Une variable sur deux s'incrémente
Bonjour à tous,
J'ai une macro qui me permet d'effectuer un copier/coller de valeurs grâce à deux variables.
Seulement voilà ; suivant l'ordre du "Next", il n'y a qu'une variable sur deux qui s'incrémente. L'autre reste à son nombre de départ et je ne comprends pas pourquoi.
En plus de ça, ma méthode de collage "Valeurs" ne fonctionne plus alors qu'elle sort tout droit de l'enregistreur de macro ..
J'espère que vous allez pouvoir m'aider!
Bien à vous,
Sub Macro4()
Dim i As Integer
Dim j As Long
For i = 3 To 171 Step 14
For j = 14 To 182 Step 14
Range("E" & i & ":F" & i).Copy
Range("C" & j).End(xlUp).Offset(1, 0).Activate
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Next j
Next i
End SubFloki
Salut,
La prochaine fois joins un fichier, s'il-te-plait.
C'est incorrect de dire qu'il n'y a qu'une variable sur deux qui s'incrément. Regarde le fichier ci-joint.
A la première boucle i, ta boucle j boucle 13 fois. Tu as donc 13 fois le même résultat de C2 à D14.
A ta deuxième boucle i, les cellules C3:D3 sont remplacées par la nouvelle valeur trouvée 14 lignes plus loin (Donnée15, 45). Ces valeurs ''Donnée15 et 45 sont également placés 12 fois, plus bas.
A la troisième boucle i, les cellules C3:D3 sont remplacées par la nouvelle valeur trouvée 14 lignes plus loin, etc., etc.
En finale, ce sont les dernières valeurs transférées qui se retrouvent en C3:D3 (Donnée169, 507) et ces valeurs se retrouvent également tout au fond de ton tableau.
Ca t'aide à avancer ?
Je ne peux que te conseiller en plus d'aller voir cette démo trouvée sur Internet et qui me semble très intéressante
Bonjour Yvouille, le Forum,
Tout d'abord merci pour ta réponse. Normalement je mets toujours mon fichier mais pour cette fois, je pensais que mon erreur était grossière et que cette dernière allait se voir plus distinctement.
Aussi je n'ai pas très bien compris ton exemple ni ton fichier joint ..
Malheureusement lors de mon lancement pas à pas de ma macro et quand je survole ma variable i, cette dernière reste à 3 alors que la variable j augmente bien 14 par 14. Ce qui implique que les cellules copiées restent les même alors que je voudrais que ce soit ("E3:F3") puis ("E17:F17") etc jusqu'à ("E171:F171").
Le collage, lui, se fait normalement.
J'espère avoir été clair et que mon fichier apportera un plus.
Merci d'avance,
Floki
Salut,
Par mon fichier, je voulais te montrer ce que fait réellement ta macro et je pensais que de voir cela te permettait de découvrir tes erreurs et de les corriger.
Bien entendu ! Ta variable i reste x fois à 3 pendant que ta variable j va de 14 à 182 (Step 14) puis ta valeur i passe à 17 et reste à 17 pendant de ta variable j va à nouveau de 14 à 182 (step 14) puis ta variable i passe à 31 et reste à 31 pendant de ta variable j va à nouveau de 14 à 182 (step 14), etc., etc.Malheureusement lors de mon lancement pas à pas de ma macro et quand je survole ma variable i, cette dernière reste à 3 alors que la variable j augmente bien 14 par 14.
Si tu regardes la manière dont j’ai placé - dans mon fichier - les lignes de ton code en retrait, il est plus facile de voir ce ‘’bouclage’’ de x fois sur la variable j avant de revenir boucler une fois sur la variable i, puis à nouveau x fois sur la variable j avant de revenir boucler une fois sur la variable i, etc.
Si tu ne comprends toujours pas, prends des valeurs plus petites pour la variable j (par exemple For j = 14 To 42 Step 14, ainsi ça ne boucle que 3 fois sur j avant de revenir boucler sur i. Si tu corriges cette instruction dans mon fichier et que tu lances le code au pas-à-pas, tu devrais bien voir comment fonctionne ton code.
Cela étant dit, je voudrais bien corriger ta macro afin de te montrer la solution, mais je ne comprends toujours pas exactement ce que tu souhaites réaliser.
J’ai compris que tu veux boucler sur les données des colonnes E et F mais où veux-tu coller ces données exactement ?..... alors que je voudrais que ce soit ("E3:F3") puis ("E17:F17") etc jusqu'à ("E171:F171")
Alors ?
Effectivement ...! Je viens de comprendre le fait que les variables ne s'incrémentaient pas en même temps .. c'est effectivement logique!
Je viens de résoudre mon problème en calculant i par rapport à j et donc en ayant qu'un seul "Next".
Seulement je voulais savoir si il y avait possibilité d'incrémenter i et j en même temps?
Chaque Step de 14 correspond à une nouvelle équipe. Ce calcul est à effectuer une fois par mois et se colle en dessous du dernier mois effectuer.
Donc je copie mon calcul, je recherche la dernière ligne remplie de mon tableau en partant de ("C" & j), je me décale d'une ligne en dessous puis je colle la valeur du calcul.
Ainsi de suite pour toutes les équipes.
Tes explications sont beaucoup trop vagues, tu ne fais pas référence aux objets Excel (lignes, colonnes, plage de cellules, feuilles, etc.).
Tu dis vouloir faire une action chaque mois. Peux-tu alors simuler un fichier sur lequel le mois de janvier est déjà traité et mettre en place les données exactes à disposition pour février avant son traitement ? Ensuite indique un truc du genre :
- au mois de février, je voudrais passer en revue toutes les cellules des plages X3:Y3 puis X17:Y17, etc.,
- en copier les données et les coller de cette manière :
X17:Y17 en M8:N8, en M22:N22, en M29:N29 etc.,
Exemples de tes explications peu claires :
Quels calculs ? Ceux dans les colonnes E et F ? Mais en E3 :F3, il n’y a pas de calculs, uniquement des données fixes, il serait donc inutile de passer par les instructions Copy/Selection.PasteSpecial. Mais plus loin eu as effectivement des calculs en E59:F59, etc. C’est quoi ce bronxDonc je copie mon calcul
J’ai compris que tes équipes sont ‘’Services généraux’’, ‘’EAI’’, etc. Si je vais erreur, indique-moi que sont tes équipes.
Amicalement.
Lors de la nouvelle année nous sommes passés à un nouveau logiciel et le temps que tout se mette en place je n'ai pas pu sortir l'indicateur du mois de Décembre. Donc les données envoyées sur mon dernier fichier sont à jour.
Ensuite, je veux que les calculs des cellules E3:F3 soient copiées en C14:D14 car le calcul correspond à l'équipe des Services Généraux et que le mois de Décembre n'a pas été fait.
Puis que les calculs des cellules E17:F17 soient copiées en C28:D28 car le calcul correspond à l'équipe des EAI et que le mois de Décembre n'a pas été fait.
Puis que les calculs des cellules E31:F31 soient copiées en C42:D42 car le calcul correspond à l'équipe des Meca Epuration et que le mois de Décembre n'a pas été fait.
Et ainsi de suite jusqu'à l'équipe Mecanique qui se trouve tout en bas.
Oui les calculs en E:F. Malheureusement j'ai mit des valeurs bidons pour les premières équipes car je n'ai pas eu envie d'inclure l'onglet de données dans le fichier Excel.
Ces valeurs on été rentrées à la main car sinon mes calculs ne font référence à rien et renvoient la valeur #REF!. J'ai rentré que les premières valeurs car il s'agit de vérifier que le copier/coller agisse sur les bonnes cellules donc il n'y a pas la nécessité d'avoir les calculs et valeurs justes.
Tu as vu juste, il s'agit bien des différentes équipes.
Dans le fichier ci-joint, la macro en place devrait correspondre à ton attente.
Il faut absolument ''Vider décembre'' avant de faire un nouvel essai car il n'y a pas (encore) de garde-fou si tous les mois sont déjà complétés. Toutefois, ça fonctionne aussi pour d'autres mois s'ils sont également vidés.
Sub Macro4()
Dim i As Integer
Application.ScreenUpdating = False
For i = 3 To 171 Step 14
Range("E" & i & ":F" & i).Copy
Range("C" & i).End(xlUp).Offset(1, 0).Activate
Do Until ActiveCell = ""
ActiveCell.Offset(1, 0).Activate
Loop
Selection.PasteSpecial Paste:=xlPasteValues
Next i
End SubAmicalement.
RAJOUT DE 13:23: Il y aurait bien entendu 36 manières de résoudre ton problème différemment. Ma solution n'en ait qu'une parmi tant d'autres.
Tu pourrais par exemple faire une boucle Step 14 et ajouter une valeur de x en fonction du mois traité. Par exemple, pour la première équipe, i = 3 et j = i + 0 pour janvier, i + 1 pour février, i + 2 pour mars, etc. Mais il faudrait alors pouvoir aller ''lire'' le mois traité je ne sais où ou le chercher d'une manière quelconque. Ce qui revient finalement au même que la manière de chercher le mois par ma boucle Do/Loop ci-dessus.
Merci Yvouille, cela marche à merveille!
Je ne connaissais pas cette manip' avec le Do Until, elle est bien pratique!
Merci beaucoup et bonne semaine!