Boucle pour copie des plages en changeant certaines données Macro

madtnt09

XLDnaute Junior
Bonjour le forum,

SVP j'ai besoin d'aide

Voici mon problème:

En colonne A la donnée change de "D1", "D2", "D3"etc. à tous les 24.
En colonne B la donnée change de "UA", "UB", "UC" etc. à toutes les 12 jusqu'à "UQ" C'est cette colonne qui arrête la boucle donc 12 fois "UQ" et fin de la boucle.
En colonne C les 6 donnée se répète de façon répétitive jusqu'à la fin
En colonne D les 6 données commencent par "10" et les 6 suivantes tombent à "11" et ainsi de suite jusqu'à la fin de la boucle
En colonne E et F les 6 données se répètent de façon répétitive jusqu'à la fin de la Boucle.


MErci de m'aider voici en pièce jointe un fichier et un peu de code que j'ai commencé sans boucle.
 

Pièces jointes

  • Book2.xlsm
    26.7 KB · Affichages: 33
  • Book2.xlsm
    26.7 KB · Affichages: 43
  • Book2.xlsm
    26.7 KB · Affichages: 36

Paf

XLDnaute Barbatruc
Re : Boucle pour copie des plages en changeant certaines données Macro

Bonjour

pas sûr d'avoir tout compris

à tester

Code:
Sub madtnt09()
 Dim i As Integer, V4 As Integer, V1 As String, V2 As String
 V1 = "D1"
 V2 = "UA"
 V4 = 10
 For i = 1 To 204
    Cells(i + 1, 1) = V1
    Cells(i + 1, 2) = V2
    Cells(i + 1, 4) = V4
    Cells(i + 1, 6) = (i - 1) Mod 2 + 1
    
    If i Mod 6 = 0 Then V4 = V4 + 1
    If i Mod 12 = 0 Then V2 = "U" & Chr(Asc(Right(V2, 1)) + 1)
    If i Mod 24 = 0 Then V1 = "D" & Right(V1, Len(V1) - 1) + 1
 Next
 For i = 1 To 204 Step 6
    Cells(i + 1, 3) = "S"
    Cells(i + 2, 3) = "S"
    Cells(i + 3, 3) = "S3"
    Cells(i + 4, 3) = "S3"
    Cells(i + 5, 3) = "S4"
    Cells(i + 6, 3) = "S4"
    Cells(i + 1, 5) = "A"
    Cells(i + 2, 5) = "A"
    Cells(i + 3, 5) = "B"
    Cells(i + 4, 5) = "B"
    Cells(i + 5, 5) = "C"
    Cells(i + 6, 5) = "C"
 Next

A+
End Sub
 

madtnt09

XLDnaute Junior
Re : Boucle pour copie des plages en changeant certaines données Macro

Bonjour Paf,

Est-ce que tu peux annoter la lignes suivantes:

"Cells(i + 1, 6) = (i - 1) Mod 2 + 1"

J'aimerais en comprendre le sens le tout fonctionne à merveilles.

Merci bcp de ton aide
 

Paf

XLDnaute Barbatruc
Re : Boucle pour copie des plages en changeant certaines données Macro

Re

le but est d'écrire dans les cellules de la colonne 6 une suite alternée de 1 et de 2.
(i - 1) Mod 2 + 1
L'opérateur modulo (Mod) donne le reste de la division du terme de gauche par le terme de droite.

le terme de gauche étant alternativement paire et impaire, le reste de sa division par 2 sera alternativement 0 et 1. Voulant obtenir une suite de 1 et 2 on rajoute donc 1 au résultat.

Pour i = 1 , i Mod 2 renvoie 1 donc i Mod 2 + 1 on obtiendrait 2 , et comme on veut commencer par 1, on décale i de 1 :(i - 1) Mod 2 + 1 (on aurait tout aussi bien pu faire (i + 1) Mod ....)


Pour fixer un maximum à V4 :

Code:
If i Mod 6 = 0 Then 
     V4 = V4 + 1
     If V4 > 23 Then V4 = 10
End If
où 23 ( à adapter) est la valeur max à faire afficher.

A+
 

madtnt09

XLDnaute Junior
Re : Boucle pour copie des plages en changeant certaines données Macro

RE:
Wow c'est magnifique merci pour les solutions,

J'aurais pour un autre fichier sembleble une modifications à la suite 1, 2 de la colonne F est-ce possible de faire 1,2 et ensuite 1,2,3 et revenir à 1,2 et ainsi de suite???

Mon autre fichier est un peu différent j'ai essayer de modifier le code comme suit, mais il divise la 14 donnée par 3 et addition 1:

Voilà ce que j'ai:

'Sub madtnt09()
Application.ScreenUpdating = False
Dim i As Integer, V4 As Integer, V1 As String, V2 As String
V1 = "D1"
V2 = "UA"
V4 = 10



For i = 1 To 7854
Cells(i + 1, 2) = V1
Cells(i + 1, 3) = V2
Cells(i + 1, 5) = V4

If i Mod 14 = 0 Then
V4 = V4 + 1
If V4 > 34 Then V4 = 10
End If
If i Mod 476 = 0 Then V2 = "U" & Chr(Asc(Right(V2, 1)) + 1)
If i Mod 2618 = 0 Then V1 = "D" & Right(V1, Len(V1) - 1) + 1

Next
For i = 1 To 7854
Cells(i + 1, 7) = (i - 1) Mod 2 + 1
If i Mod 2 = 0 Then i = i + 12
Next
For i = 1 To 7854
Cells(i + 3, 7) = (i - 1) Mod 3 + 1
If i Mod 12 = 0 Then i = i + 2

Next

For i = 1 To 7854 Step 14
Cells(i + 1, 4) = "S"
Cells(i + 2, 4) = "S"
Cells(i + 3, 4) = "S4"
Cells(i + 4, 4) = "S4"
Cells(i + 5, 4) = "S4"
Cells(i + 6, 4) = "S4"
Cells(i + 7, 4) = "S4"
Cells(i + 8, 4) = "S4"
Cells(i + 9, 4) = "S3"
Cells(i + 10, 4) = "S3"
Cells(i + 11, 4) = "S3"
Cells(i + 12, 4) = "S3"
Cells(i + 13, 4) = "S3"
Cells(i + 14, 4) = "S3"

Cells(i + 1, 6) = "A"
Cells(i + 2, 6) = "A"
Cells(i + 3, 6) = "B"
Cells(i + 4, 6) = "B"
Cells(i + 5, 6) = "B"
Cells(i + 6, 6) = "C"
Cells(i + 7, 6) = "C"
Cells(i + 8, 6) = "C"
Cells(i + 9, 6) = "D"
Cells(i + 10, 6) = "D"
Cells(i + 11, 6) = "D"
Cells(i + 12, 6) = "E"
Cells(i + 13, 6) = "E"
Cells(i + 14, 6) = "E"
Next


'End Sub
Merci

Mon fichier originale est trop gros pour l'ajouter En rouge les lignes qui me posent problèmes.
 

Paf

XLDnaute Barbatruc
Re : Boucle pour copie des plages en changeant certaines données Macro

Re bonjour

est-ce possible de faire 1,2 et ensuite 1,2,3 et revenir à 1,2 et ainsi de suite???

une solution possible:
Code:
Dim Pas As Boolean
Pas = False 'False s'il faut traiter jusqu'a 2 et True pour 3
For i = 1 To 7854
    x = x + 1
    If Not Pas And x > 2 Then
        x = 1
        Pas = True
    End If
    If Pas And x > 3 Then
        x = 1
        Pas = False
    End If
    Cells(i + 1, 6) = x
Next

par contre entre
Mon autre fichier est un peu différent j'ai essayer de modifier le code comme suit, mais il divise la 14 donnée par 3 et addition 1:
et le code en rouge, pas compris le besoin ni le soucis

A+


Edit: OK pour le code rouge: tentatives de suite alternée de 1,2 / 1,2,3
 
Dernière édition:

madtnt09

XLDnaute Junior
Re : Boucle pour copie des plages en changeant certaines données Macro

Bonjour Paf,

Merci pour ton aide c,est très apprécier et j'apprends énormément de tes formules et codes.

Pour réponde, à pourquoi je cherche à avoir différente série c'est que dans mon fichier originale les lettres et les chiffres sont positionés différement et à partir de tes pistes de solutions je tentent de réussir à adapter le code pour mon problème.

Dans mon fichier originale la suite va ainsi pour les lettre et les chiffres de la colonne E et F
A 1
A 2
B 1
B 2
B 3
C 1
C 2
C 3
D 1
D 2
D 3
A 1
A 2
B 1
...

Et ainsi de suite par contre j'aurai d'autre fichier dont les le nombre de lettres changera forcément. Je vais devoir adapter le code selon les critères de départ. Ce que je souhaite c'est que lorsque la boucle ce fait elle prend en considération qu'à chaque groupe de lettres il associe un chiffre mais que lorsque le groupe de lettre se répète de recommencer la boucle à 1.

Je suis pas sûr si je suis clair.... tu pourras me le dire. J'apprécie énormément l'aide que tu me fourni donc si jamais tu trouves que je suis "annoying" parce que je ne donne pas tout dès le début je comprendrai.

Merci si tu peux m'aider à trouver cette solution ce serais merveilleux.
 

madtnt09

XLDnaute Junior
Re : Boucle pour copie des plages en changeant certaines données Macro

Re bonjour,

J,ai ajouter cette partie du code qui fonctionne quand même bien mais par contre c'est plus long peut-être un raccourci existe...

Cells(i + 1, 7) = "1"
Cells(i + 2, 7) = "2"
Cells(i + 3, 7) = "1"
Cells(i + 4, 7) = "2"
Cells(i + 5, 7) = "3"
Cells(i + 6, 7) = "1"
Cells(i + 7, 7) = "2"
Cells(i + 8, 7) = "3"
Cells(i + 9, 7) = "1"
Cells(i + 10, 7) = "2"
Cells(i + 11, 7) = "3"
Cells(i + 12, 7) = "1"
Cells(i + 13, 7) = "2"
Cells(i + 14, 7) = "3"
MErci
 

Paf

XLDnaute Barbatruc
Re : Boucle pour copie des plages en changeant certaines données Macro

Re,

si jamais tu trouves que je suis "annoying" parce que je ne donne pas tout dès le début je comprendrai.

ça tombe bien !

J'avoue ne plus suivre le besoin réel ni les tentatives pour y arriver

A+ avec une explication claire et définitive ?
 

Discussions similaires

Statistiques des forums

Discussions
311 725
Messages
2 081 948
Membres
101 850
dernier inscrit
Danigra