bonjour,
Bon sans vouloir te vexer tu peux simplifier énormément ton code. Quand j'ai vu ta série de if j'ai été assez surpris
1 2 3 4 5 6 7 8
| If Range("A1") = 2 Then Range("E" & x).Select: ActiveSheet.Paste
If Range("A1") = 3 Then Range("E" & x).Select: ActiveSheet.Paste: Range("H" & x).Select: ActiveSheet.Paste
If Range("A1") = 4 Then Range("E" & x).Select: ActiveSheet.Paste: Range("H" & x).Select: ActiveSheet.Paste: Range("K" & x).Select: ActiveSheet.Paste
If Range("A1") = 5 Then Range("E" & x).Select: ActiveSheet.Paste: Range("H" & x).Select: ActiveSheet.Paste: Range("K" & x).Select: ActiveSheet.Paste: Range("N" & x).Select: ActiveSheet.Paste
If Range("A1") = 6 Then Range("E" & x).Select: ActiveSheet.Paste: Range("H" & x).Select: ActiveSheet.Paste: Range("K" & x).Select: ActiveSheet.Paste: Range("N" & x).Select: ActiveSheet.Paste: Range("Q" & x).Select: ActiveSheet.Paste
If Range("A1") = 7 Then Range("E" & x).Select: ActiveSheet.Paste: Range("H" & x).Select: ActiveSheet.Paste: Range("K" & x).Select: ActiveSheet.Paste: Range("N" & x).Select: ActiveSheet.Paste: Range("Q" & x).Select: ActiveSheet.Paste: Range("T" & x).Select: ActiveSheet.Paste
If Range("A1") = 8 Then Range("E" & x).Select: ActiveSheet.Paste: Range("H" & x).Select: ActiveSheet.Paste: Range("K" & x).Select: ActiveSheet.Paste: Range("N" & x).Select: ActiveSheet.Paste: Range("Q" & x).Select: ActiveSheet.Paste: Range("T" & x).Select: ActiveSheet.Paste: Range("W" & x).Select: ActiveSheet.Paste
... |
.Tout d'abord je te conseille d'utiliser un Select Case et de plus je te conseille de faire une instruction par ligne (pour l'être humain c'est plus facile à lire et donc a maintenir et corriger)
.Ensuite je te conseille d'utilser l'objet Cells(N°ligne,N°colonne) à la place de l'objet Range c'est plus facile pour incrémenter d'une colonne vers une autre. Exemple Range("B6") -> Cells(6,2) (oui je sais c'est inversé ...)
.J'ai vu qu'au début de ton programme tu mets l'instruction
Application.ScreenUpdating = False
Effectivement vu le nombre de select que tu fais je comprend mais du coup tu vois pas les messages qui peuvent apparaitre pour debogger ton programme je te conseille de le mettre en commentaire (pour l'instant) et quand tout marche de le remettre.
Donc pour pallier au problème de tes selects voici comment on fait.
1 2 3
| Range("E" & x).Select: ActiveSheet.Paste
' devient
Range("E" & x).Paste |
Donc avec mes conseils voici ce que cela donne
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| Select Case Cells(1, 1).Value
Case 2
Cells(x, 5).Paste
Case 3
Cells(x, 5).Paste
Cells(x, 8).Paste
Case 3
Cells(x, 5).Paste
Cells(x, 8).Paste
Cells(x, 11).Paste
Case 3
Cells(x, 5).Paste
Cells(x, 8).Paste
Cells(x, 11).Paste
Cells(x, 14).Paste
'... |
c'est plus lisible et on s’aperçoit du coup que l'on peut encore plus simplifier comme cela
1 2 3 4 5 6
| Dim Coln As Long
Coln = 2
For i = 1 To Cells(1, 1).Value - 1
Coln = Coln + 3
Cells(x, Coln).Paste
Next |
Bon pour répondre à ta question tu dois te douter du coup de la réponse : Utilise la méthode .value de l'objet Cells et concatène avec & dans une variable de type string
Voilà
Tu dis si ça va ou pas et n’hésite pas si tu as besoin de plus d'information
A+
Partager