Simplifier le code

Patchi06

XLDnaute Nouveau
Bonjour à tous.

Mon code fonctionne mais ne me plait pas ! Je suis sur qu'il y a moyen de le simplifier. Le but étant de sélectionner une série de cellules pour en faire une planche de 21 étiquettes uniques.

Voilà...
Les étiquettes sont en A, B et C ; 2 lignes vides séparent chaque série

If nb_lignes = 6 Then
Range("A4:A7").PasteSpecial Paste:=xlPasteValues '1ère étiquette
End If
If nb_lignes = 7 Then
Range("B4:B7").PasteSpecial Paste:=xlPasteValues '2ème étiquette
End If
If nb_lignes = 8 Then
Range("C4:C7").PasteSpecial Paste:=xlPasteValues '3ème étiquette
End If
If nb_lignes = 9 Then
Range("A9:A12").PasteSpecial Paste:=xlPasteValues '1ère étiquette -série 2
End If
If nb_lignes = 10 Then
Range("B9:B12").PasteSpecial Paste:=xlPasteValues '2ème étiquette -série 2
End If
If nb_lignes = 11 Then
Range("C9:C12").PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 2
End If
If nb_lignes = 12 Then
Range("A14:A17").PasteSpecial Paste:=xlPasteValues '1ère étiquette -série 3
End If
If nb_lignes = 13 Then
Range("B14:B17").PasteSpecial Paste:=xlPasteValues '2ème étiquette -série 3
End If
If nb_lignes = 14 Then
Range("C14:C17").PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 3
End If
If nb_lignes = 15 Then
Range("A19:A22").PasteSpecial Paste:=xlPasteValues '1ère étiquette -série 4
End If
If nb_lignes = 16 Then
Range("B19:B22").PasteSpecial Paste:=xlPasteValues '2ème étiquette -série 4
End If
If nb_lignes = 17 Then
Range("C19:C22").PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 4
End If
If nb_lignes = 18 Then
Range("A24:A27").PasteSpecial Paste:=xlPasteValues '1ère étiquette -série 5
End If
If nb_lignes = 19 Then
Range("B24:B27").PasteSpecial Paste:=xlPasteValues '2ème étiquette -série 5
End If
If nb_lignes = 20 Then
Range("C24:C27").PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 5
End If
If nb_lignes = 21 Then
Range("A29:A32").PasteSpecial Paste:=xlPasteValues '1ère étiquette -série 6
End If
If nb_lignes = 22 Then
Range("B29:B32").PasteSpecial Paste:=xlPasteValues '2ème étiquette -série 6
End If
If nb_lignes = 23 Then
Range("C29:C32").PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 6
End If
If nb_lignes = 24 Then
Range("A34:A37").PasteSpecial Paste:=xlPasteValues '1ère étiquette -série 7
End If
If nb_lignes = 25 Then
Range("B34:B37").PasteSpecial Paste:=xlPasteValues '2ème étiquette -série 7
End If
If nb_lignes = 26 Then
Range("C34:C37").PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
End If

Merci pour votre aide toujours précieuse.
 

Gelinotte

XLDnaute Accro
Re : Simplifier le code

Bonjour,

Ouf! Il manque des bouts pour le compréhension, m'enfin.

Regarde ceci pour remplacer ton code :

Code:
 Select Case Nb_Lignes
 Case 6, 7, 8
 Range(Cells(4, Nb_Lignes - 5), Cells(7, Nb_Lignes - 5)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 Case 9, 10, 11
 Range(Cells(9, Nb_Lignes - 8), Cells(12, Nb_Lignes - 8)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 Case 12, 13, 14
 Range(Cells(14, Nb_Lignes - 11), Cells(17, Nb_Lignes - 11)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 Case 15, 16, 17
 Range(Cells(19, Nb_Lignes - 14), Cells(22, Nb_Lignes - 14)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 Case 18, 19, 20
 Range(Cells(24, Nb_Lignes - 17), Cells(27, Nb_Lignes - 17)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 Case 21, 22, 23
 Range(Cells(29, Nb_Lignes - 20), Cells(32, Nb_Lignes - 20)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 Case 24, 25, 26
 Range(Cells(34, Nb_Lignes - 23), Cells(37, Nb_Lignes - 23)).PasteSpecial Paste:=xlPasteValues '3ème étiquette -série 7
 End Select

G
 

Dormeur74

XLDnaute Occasionnel
Re : Simplifier le code

Personnellement, j'aurais tendance à chercher un algorithme dans le problème proposé et à n'utiliser la fonction Select Case que lorsqu'on ne peut pas faire autrement. Comme il y a un algorithme qui permet de réduire le code, je vous le propose :

Code:
Sub Macro1()
    Dim y As Integer
    Dim reste As Integer
    Dim debPlage As Integer
    Dim Plage As String
    
    For y = 6 To 26
        debPlage = 5 * Int(y / 3) - 6
        reste = y Mod 3
        Plage= Chr(65 + reste) & debPlage & ":" & Chr(65 + reste) & debPlage + 3
        MsgBox Plage
    Next y
End Sub
 

Dormeur74

XLDnaute Occasionnel
Re : Simplifier le code

Détrompe-toi, ami Gelinotte. Tu as réussi à faire passer le code de Patchi06 de 63 lignes à 23, donc avec un coef(r) de 2,73.
De mon côté, je n'ai pu ramener ton code que de 23 lignes à 10. Donc coef(r) = 2,3
Conclusion, ton moteur a un meilleur rendement que le mien.
 

Statistiques des forums

Discussions
312 559
Messages
2 089 604
Membres
104 225
dernier inscrit
Misterpat63