revenir d'une boucle i en arriere si "a"

  • Initiateur de la discussion carlos
  • Date de début
C

carlos

Guest
Bonsoir à tous

voila g cette macro qui me transforme une suite de 1 à 28 chiffres inscrit dans une colonne Plage en 7 paquets de 4 numerotés 1,1,1,1 puis2,2,2,2 etc.... jusqu'a 7

For i = 1 To 8
For Each cellMD In Range('g4:g44')
If cellMD <> Empty And cellMD <> 'A' And cellMD <= 4* i And cellMD >= 4 * (i - 1) _
Then cellMD.Offset(0, 0).Value = 1 * i

Next
Next i

Quand il y a un 'A' dans une cellule de cette plage , il passe à la cellMD suivante.
mon souci c'est que si il y a un 'A' dans la cellule alors je n'ai que 3 chiffres de 2 par exemple au lieu d'en avoir 4 car une boucle i est passée.

Comment faire pour que si il y a un 'A' alors cette boucle i ne perde pas son tour .

g essayé i = i - 1 mais ca va pas ...

Merci
 

21ch181

XLDnaute Junior
Bonsoir Carlos,

J'aurais souhaité pouvoir t'aider mais en recopiant ta macro elle ne fait pas ce que tu annonces.
Ce serait sympa que tu nous donnes une copie de ta macro qui fonctionne tel que tu l'as décrit si tu souhaites une aide adhoc !

Cordialement
 
C

carlos

Guest
Bonjour et bon WE

Voici un fichier joint.

Merci [file name=Transformer.zip size=8727]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Transformer.zip[/file]
 

Pièces jointes

  • Transformer.zip
    8.5 KB · Affichages: 27
  • Transformer.zip
    8.5 KB · Affichages: 25
  • Transformer.zip
    8.5 KB · Affichages: 23

21ch181

XLDnaute Junior
Bonsoir Carlos,

Je t'ai trouvé une solution ! Mais comme il y avait une petite erreur dans ta macro initiale j'ai galéré un peu !!

En effet dans ton test '>=' il ne faut pas qu'il y est '=' !

Ceci étant corrigé, voici la solution que je te propose (si j'ai bien compris ton pb !) :

Sub montDesc()
Dim i As Byte, cellMD As Variant
Dim k, j As Integer
For i = 1 To 8
k = 0
For Each cellMD In Range('g4:g44')
If cellMD = 'A' Then k = k + 1
j = cellMD.Row - k - 3
If cellMD <> Empty And cellMD <> 'A' And (cellMD.Row - k - 3) <= 4 * i And (cellMD.Row - k - 3) > 4 * (i - 1) _
Then cellMD.Offset(0, 0).Value = 1 * i
Next
Next i
End Sub



J'ai rajouter la variable k qui sert à compter le nombre de 'A' et j'utilise la propriété 'row' d'une cellule de la plage (puisque tu ne travailles que sur une seule colonne.
Ainsi quelque soit le nombre de 'A' et leur position, les 'paquets' auront toujours 4 valeurs (sauf en fin de liste bien sur si tu n'as un nombre de valeurs sans 'A' multiple de 4).
Je t'ai mis en rouge mes modifications.

Voilà ! Bon courage, bonne continuation.

Alain
 
C

carlos

Guest
Bonsoir Alain

c'est vraiment tres sympa de m'aider et c'est pas la premiere fois.
Grace à toi mon projet evolue de jour en jour et mes connaissances aussi.Et en plus il y a les couleurs pour me faciter la comprehension .

AU TOP

@ bientot sur le net et bon dimanche
 

21ch181

XLDnaute Junior
Bonjour Carlos et le Forum,

Ce fut un plaisir !

Je viens de voir que j'avais fait quelques fautes d'orthographe : mille excuses, parfois entre l'heure, la vue qui baisse, la frappe au clavier (je ne suis pas de formation secrétariat !!), il y en a un qui me frappe sauvagement et me fait commettre la faute !!

Au plaisir

Alain
 

Discussions similaires

Réponses
7
Affichages
377

Statistiques des forums

Discussions
312 336
Messages
2 087 387
Membres
103 532
dernier inscrit
sdfrgthyjuki