Boucle While

Bonjour à tous,

j'aimerai que l'on m'explique comment coder une condition particulière pour mon cas et votre avis sur ce code svp.

Il faut savoir que je débute en VBA et que c'est un entrainement.

Sub Boucle()

Dim target As Range

Dim cell As Range

Dim mystr As Byte

Set target = Columns("G")

Set cell = target.Cells("3")

mystr = Right(cell, 2)

Do While [if cell = 11 caractères, tu fais mystr sinon STOP]

Loop 'pour chaque cellule de G à partir de G3 jusqu'à cellule vide

End Sub

Pensez vous que si je défini cell = G3 la boule continuera en G4, G5 .......

Merci d'avance pour votre temps

Bonjour,

si j'ai bien compris ce serais plutôt quelque chose comme:

For i= 3 to Range("G" & Rows.Count).End(xlUp).Row ' de la ligne 3 à dernière ligne remplie de colonne G

    if range("G" & i).value = 11 caractères, then
          mystr = Right(range("G" & i).Value, 2)  ' attention "mystr" sera écrasé par son initialisation au passage suivant de la boucle
     end if

Next

Pensez vous que si je défini cell = G3 la boule continuera en G4, G5 .......

ben ...non, puisqu'aucune instruction n'incrémente le 3 en 4, en 5 ...

A+

Dans le [if range("G" & i).value = 11 caractères] la macro va compter pour chaque cellule le nombre de caractères contenus ?

l'idée est de garder les 2 derniers caractères d'un nombre de 11 chiffres pour chaque cellules non vide de la colonne G, avant de CC / CV cette colonne sur une autre feuille. Je pense que c'est plus simple que de créer une nouvelle colonne "tampon" avant de faire un CC / CV.

Mais comme le nombre de ligne est indéfinissable j'aimerai comprendre comment dire à ma boucle "tu fais droite sur chaque cellule, une par une et a la première cellule vide rencontré tu t’arrêtes"

puisque si on sélectionne la colonne complète c'est impossible.

Dans le [if range("G" & i).value = 11 caractères] la macro va compter pour chaque cellule le nombre de caractères contenus ?

C'est du pseudo code, donc utiliser la bonne syntaxe et les bonnes instructions (voir la fonction Len)

Cette instruction étant dans une boucle For i ........Next, à chaque itération i prend une nouvelle valeur . C'est comme si on avait range(G3) puis range(G4) puis G5 ...

l'idée est de garder les 2 derniers caractères d'un nombre de 11 chiffres pour chaque cellules non vide de la colonne G, avant de CC / CV cette colonne sur une autre feuille. Je pense que c'est plus simple que de créer une nouvelle colonne "tampon" avant de faire un CC / CV.

plutôt qu'un copier coller on peut écrire directement dans une colonne d'une autre feuille:

par exemple pour écrire dans la feuille "AUTREFEUILLE" en colonne B:

dim ligne as Integer

For i= 3 to Range("G" & Rows.Count).End(xlUp).Row ' de la ligne 3 à dernière ligne remplie de colonne G
    if range("G" & i).value = 11 caractères, then
          ligne=ligne + 1  ' à chaque itération on augmente le N° de ligne pour écriture
          WorkSheets("AUTREFEUILLE").range("B" & ligne).Value = Right(range("G" & i).Value, 2)         
     end if
Next

Mais comme le nombre de ligne est indéfinissable ...

Non justement.

l'instruction Range("G" & Rows.Count).End(xlUp).Row donne le N° de la dernière ligne remplie de la colonne G

et l'instruction For i= 3 to Range("G" & Rows.Count).End(xlUp).Row donne:

dans une boucle qui démarre à 3 et finit au N° de la dernière ligne remplie de la colonne G, faire les instruction suivantes

D'accord donc il serait plus simple d'utiliser le code avec la variable ligne du coup.

if range("G" & i).value = 11 caractères, then

je rencontre quand même un problème avec cette ligne, je crois que "caracteres" n'est pas accepté ??

que ce soit un chiffre ou une lettre ou autre je peux utiliser le mot "caractere" dans du code ?

le message d'erreur annonce (Erreur de compilation : Then ou GoTo attendu)

D'accord donc il serait plus simple d'utiliser le code avec la variable ligne du coup.

Pour moi, plus simple certainement, et une boucle While se justifie davantage lorsque le nombre d'itérations n'est pas déterminable .

if range("G" & i).value = 11 caractères, then

je rencontre quand même un problème avec cette ligne, je crois que "caracteres" n'est pas accepté ??

que ce soit un chiffre ou une lettre ou autre je peux utiliser le mot "caractere" dans du code ?

le message d'erreur annonce (Erreur de compilation : Then ou GoTo attendu)

une orientation un ou deux messages plus hauts :

Dans le [if range("G" & i).value = 11 caractères] la macro va compter pour chaque cellule le nombre de caractères contenus ?

C'est du pseudo code, donc utiliser la bonne syntaxe et les bonnes instructions (voir la fonction Len)

A+

Il ne semble pas y avoir d'erreur de script mais rien ne se passe ??

Sub Boucle_2()

Dim ligne As Integer

For i = 3 To Range("G" & Rows.Count).End(xlUp).Row

If Range("G" & i).Value = Len("11111111111") Then 'len = 11

ligne = ligne + 1

Worksheets("AUTREFEUILLE").Range("G" & ligne).Value = Right(Range("B" & i).Value, 2)

End If

Next

End Sub

Plus besoin de do while avec le For i ... Next mais cela revient au même non ?

Bonjour BreizhThorm, AlgoPlus , le forum,

A tester.....

Sub macro2()

Dim ligne As Integer
    ligne = 2

   With Sheets("Feuil1")
    For i = 2 To .Range("A" & Rows.Count).End(xlUp).Row ' de la ligne 2 à dernière ligne remplie de colonne A
     If Len(.Range("G" & i).Value) = 11 Then
      Sheets("Feuil2").Range("B" & ligne).Value = Right(.Range("G" & i).Value, 2)
      ligne = ligne + 1 ' à chaque itération on augmente le N° de ligne pour écriture
     End If
    Next i
   End With

End Sub
8classeur1.xlsm (119.35 Ko)

Cordialement,

Il faudra approfondir la lecture de la fonction Len

Len, fonction

Renvoie une valeur de type Long contenant le nombre de caractères d'une chaîne ou le nombre d'octets requis pour stocker une variable.

Syntaxe

Len(string | varname)

Exemple

MyString = "Bonjour le Monde" ' Initialise la variable.

MyLen = Len(MyString) ' Renvoie 16.

edit : Bonjour xorsankukai

Salut à toi,

C'est exactement ça ! Il me manquait le "i" après le Next surtout.

Merci à vous 2, c'est déjà un peu plus clair pour moi

A+

Il me manquait le "i" après le Next surtout.

Un peu d'humour quand même, j'ai commencé le VBA tout seul depuis 1 semaine ..

je reviendrai sûrement avec d'autres questions !!

merci encore

A+

Rechercher des sujets similaires à "boucle while"