Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 20/07/2009
Messages:
9
Système d'exploitation: PC Version Excel utilisée: 2007 |
Posté le : 05-08-2009 13h50
Bonjour à tous,
voilà donc mon problème qui ne semble pas être présent dans l'un des forums : à partir d'une feuille (Finances), je veux lancer une macro qui, entre autres, trie par dates des tableaux qui sont présents sur les autres feuilles du classeur. Ces tableaux n'ont pas une longuer fixe et seront amener à évoluer. Après de nombreux essais avec "Sort" qui me renvoyaient des erreur d'application ou d'objet(voir premier code), j'ai trouvé un code qui semblait marcher (voir deuxième code). Le problème est qu'il me modifie aussi ma feuille de départ et que je ne voudrais pas passer par une fontion "Activate". Premier code (juste la partie concernée): For i = 3 To ActiveWorkbook.Sheets.Count Deuxième code (juste la partie concernée) : For i = 3 To ActiveWorkbook.Sheets.Count Cordialement, Gaël |
|
|
Re: Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 06-08-2009 00h57
Bonsoir GGLyon et bienvenue
A priori, je te proposerais un code VBA comme suit : Dim DerniereFacture As Long Par ailleurs, j'ai un peu de mal à comprendre les points suivants : - Pourquoi ActiveWorkbook puis ThisWorkbook ? Y a t'il 2 classeurs en jeu ? - Pourquoi i commence à 3 ? A 2, j'aurai compris que tu exclus une feuille, celle se nommant "Finances", mais 2.... - J'ai aussi du mal à imaginer le pourquoi de cette boucle For L = 4 to 69. Le but est-il de comparer la valeur B9 de chaque feuille avec 65 cellules en colonne E de la feuille "Finances" ? La seule chose dont je suis quasi sûr, c'est que tes plantages proviennent des Activates et autres Select que tu utilises à tort dans tes codes. A part de très très rares exceptions, il est toujours inutiles d'activer ou sélectionner un objet pour agir dessus en VBA. C'est même la première source de plantages que rencontrent la plupart des débutants... Je me permets également d'attirer ton attention sur l'importance et l'intérêt de la Déclaration des Variables en VBA. Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 20/07/2009
Messages:
9
Système d'exploitation: PC Version Excel utilisée: 2007 |
Posté le : 06-08-2009 09h55
Bonjour le forum, Bonjour mDF,
merci beaucoup pour avoir jeté un oeil sur mon problème. Pour le moment, j'ai une erreur de compilation qui apparaît sur la ligne Key1:=.Range... dans ce que tu m'as proposé. Comme mes notions en VBA sont très limitées, je ne sais pas si ça provient de ce que j'ai pu écrire avant ou pas ! C'est aussi pour cette raison que tu trouves des ActiveWorkbook et ThisWorkbook partout et que qu'il y a des boucles qui parcourent beaucoup de cellules peut-être inutilement ! Je fais vraiment du bidouillage et je pense que tu passerais pas loin de la syncope en voyant le reste des lignes ! Pour répondre un peu plus à tes interrogations : - i commence à 3 car j'ai une 2 feuilles (dont Finances) qui récupère des données sur le reste du classeur, - en ce qui concerne les Activate, c'était juste un essai, y en a pas ailleurs :) - la prochaine fois, j'incluerai ma déclaration de variables dans le code que je poste. J'aurai bien mis mon classeur mais il s'agit de données confidentielles et j'ai peur de passer beaucoup de temps à l'épurer. Je vais voir quand même aujourd'hui si c'est possible car tes conseils et ceux du forum me seront précieux. MAJ : voilà le fichier, qui était trop gros, donc il faut copier les feuilles du fichier 2 dans le 1 ! Cordialement, Gaël Pièce jointe:
GGlyon1.zip [ Taille: 67.00 Ko - Téléchargements: 423 ] GGlyon2.zip [ Taille: 18.39 Ko - Téléchargements: 437 ]
Edité par GGlyon le 06/08/2009 11:06:27
|
|
|
Re: Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 06-08-2009 22h59
Bonsoir GGlyon, le Forum,
Tu trouveras ci-joint une proposition pour ta demande, en espérant que j'ai bien interprété tes indications... N'ayant pas compris pourquoi tu avais scindé le traitement en 3 phases (3 boutons) alors que visiblement elles devaient être lancées successivement, et pour simplifier le code, j'ai rassemblé l'ensemble du traitement (Finance, Commandes et Factures) en une seule procédure "Traitement()" que tu trouveras toujours dans le module de code de la feuille "Finances". L'ensemble se déclenche donc avec l'unique bouton "Actualiser". Je te laisse prendre connaissance du code VBA utilisé. Pas franchement convaincu par le choix de certaines de tes variables (je pense notamment à X, Z, n, k par exemple), je les ai toutefois laissées telles quelles pour que tu puisses conserver tes repères dans tout ceci. Sub Traitement() Par rapport à ton travail, voici quelques infos qui pourront t'être utiles je pense : Lorsque tu écris par exemple : Dim DateFinProjet, DateActuelle, DateVirement As Date Il te faut impérativement écrire : Dim DateFinProjet As Date, DateActuelle As Date, DateVirement As Date Par ailleurs, concernant l'utilisation de la propriété ThisWorkbook ou ActiveWorkbook : comme ton code VBA n'agit que sur le classeur dans lequel se trouve le code lui-même, tu n'as pas besoin d'utiliser cette propriété, elle est implicite. Tu verras que je ne l'ai pas utilisé dans le code ci-dessus. De plus, comme tu as fait le choix de créer ta procédure de traitement dans le module de code Private de la feuille "Finances", tu n'as pas non plus besoin de faire précéder tes Ranges et autres Cells de l'expression Worksheets("Finances"), cette expression est également implicite puisque tu te trouves dans le module de code de cette feuille. Cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 20/07/2009
Messages:
9
Système d'exploitation: PC Version Excel utilisée: 2007 |
Posté le : 07-08-2009 11h07
Bonjour le forum, Bonjour mDF,
Merci beaucoup mDF pour ce nouveau code qui fonctionne très bien et qui ressemble à quelque chose contrairement à ce que j'avais écris ! C'est impressionnant comme maintenant il est compact :) J'ai juste modifié le "n as Byte" en "n as Integer" pour éviter le message "dépassement de capacité" du au fait que certains tableaux "commandes" et/ou "factures" dépassent la ligne 254. En ce qui concerne ma compréhension du code, je bloque sur Select Case et Dateserial... J'ai lu l'aide VBA là-dessus mais ça ne m'a pas éclairé ! Est-ce que tu pourrais m'expliquer ? Pour mes variables n, Z, etc je me demande ce qui pose problème ?! Il faudrait qu'elles soient plus explicites ? Pour voir si j'ai bien tout compris, je vais essayer de modifier la macro concernant la feuille "Général" :) Merci encore. Gaël |
|
|
Re: Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 18/05/2006
De Saône-et-Loire (71)
Messages:
1539
Système d'exploitation: PC Version Excel utilisée: 97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365 |
Posté le : 07-08-2009 16h01
Bonjour GGlyon, le Forum,
Citation : GGlyon a écrit : Select Case Il s'agit là d'une instruction de bloc très pratique et indispensable à connaitre à mon avis. Elle remplace très avantageusement des cascades de IF... THEN... ELSEIF... Prenons l'exemple d'une variable MaValeur que tu souhaiterais tester. Suivant sa valeur, tu souhaites exécuter des instructions différentes. Ce test pourra se présenter sous cette forme par exemple : Select Case MaValeur Pour info, sache qu'on peut également l'utiliser pour tester une variable de type String. Par exemple, si on considère une variable MaChaine sensée stocker un nom d'utilisateur, on pourrait faire quelque chose comme ça : Select Case MaChaine Cette instruction est donc in-dis-pen-sa-ble ! N'hésite pas à en abuser. DateSerial Je ne sais pas si je peux être plus clair que l'aide Excel au sujet de cette fonction... Sa syntaxe est : DateSerial(valeur qui représente l'année, valeur qui représente le mois, valeur qui représente le jour) Cette fonction retourne donc une valeur de Date en fonction des arguments donnés. Exemple : DateSerial(2009, 8, 15) te retournera donc la date "15/08/2009" Autre exemple (utilisé dans le code proposé dans ton classeur) : DateSerial(Year(Date), Month(Date), 1) Comme nous sommes le 07/08/2009, la fonction Date retourne donc "07/08/2009" - Year(Date) donnera donc "2009" - Month(Date) donnera donc "08" - DateSerial(Year(Date), Month(Date), 1) donnera donc "01/08/2009" Citation : GGlyon a écrit : Rien de grave là GGlyon... c'était juste du chipotage façon mDF ! C'était juste pour dire que nous avons tous nos habitudes et que j'avais délibérément mis les miennes de côté pour que tu puisses conserver tes proprres repères. Par exemple, je t'avoue que pour moi, l'expression Cells(X,Y) ce n'est pas très conventionnel... car généralement, le X on l'utilise plutot pour les abscisses (colonnes) et le Y pour les ordonnées (lignes) et non le contraire. Un conseil toutefois (et en rapport avec ta remarque d'ailleurs) : si tu crées une variable qui devra stocker des numéros de ligne, il conviendrait systématiquement de la déclarer de type Long. Et si tu en crées une sensée stocker des numéros de colonnes, elle devrait être au minimum de type Integer pour éviter tout plantage (256 colonnes sur une feuille Excel). Par ailleurs, en terme d'optimisation, tu aurais pu aussi déclarer de type Currency, les variables correspondant à des montants (d'euros) au lieu de Single. Mais bon, tout ça reste du chipotage, surtout si tu n'es pas appelé à réaliser des calculs complexes avec ces valeurs. Bien cordialement, Didier_mDF
Le Webmaster La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien |
|
|
Re: Tri de tableaux de longueurs variables sur différentes feuilles | ||
---|---|---|
Inscription: 20/07/2009
Messages:
9
Système d'exploitation: PC Version Excel utilisée: 2007 |
Posté le : 07-08-2009 16h40
Re,
merci pour ces explications supplémentaires, tout est clair maintenant :) Cordialement, Gaël |
|
|
Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
Qui consulte actuellement ce sujet ?
1 Utilisateur(s) anonymes