VBA Boucle Do While ==> Loop

Stéphanie82

XLDnaute Nouveau
Bonjour

j'ai besoin de votre aide pour faire un boucle, j'ai essayé de le faire mais en vain

J'aimerai qu'il regarde si la celulle est vide
si cellule vide il met un TEXTE + rajoute une ligne en dessous

Sinon si il n'est pas vide, il regarde si la cellule du dessous est vide.
Si oui il met un TEXTE + rajoute une ligne en dessous

etc.

j'ai réussi a faire le code sans le boucle (fier de moi) :
Code:
Sub TEST()
Range("B4").Select
If Range("B4") = "" Then [COLOR="SeaGreen"]'Si la valeur est vide[/COLOR]
    Range("B4").Value = "TEXTE" [COLOR="seagreen"]'On insère le TEXTE[/COLOR]
    ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="seagreen"]'et on insérer une ligne en dessous après avoir mis le TEXTE[/COLOR]
Else: ActiveCell.Offset(1, 0).Select [COLOR="seagreen"]'Sinon on descend d'une case et on la selectionn[/COLOR]    
If ActiveCell = "" Then [COLOR="seagreen"]'Si la valeur est vide[/COLOR]
    ActiveCell.Value = "TEXTE" [COLOR="seagreen"]'On insère le TEXTE[/COLOR]
    ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="seagreen"]'et on insérer une ligne en dessous après avoir mis la TEXTE[/COLOR]
End If
End If
End Sub


J'ai ensuite essayé de faire le boucle avec Do While ==> Loop.
mais ça ne marche pas je ne sais pas pourquoi.
voila mon code avec le boucle (un peu moins fier)
Code:
Sub TEST2()
Range("B4").Select
If Range("B4") = "" Then  [COLOR="seagreen"]'Si la valeur est vide[/COLOR]
    Range("B4").Value = "TEXT" [COLOR="seagreen"]'On insère le TEXTE[/COLOR]
    ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="seagreen"]'et on insérer une ligne en dessous après avoir mis le TEXTE[/COLOR]    
Else:
    [COLOR="blue"]Do While [/COLOR]ActiveCell.Offset(1, 0) <> ""
        ActiveCell.Value = "TEXTE" [COLOR="seagreen"]'On insère le texte[/COLOR]
        ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="seagreen"]'et on insérer une ligne en dessous après avoir mis le TEXTE[/COLOR]    
[COLOR="Blue"]Loop[/COLOR]
End If
End Sub


Merci d'avance.
 
Dernière édition:

porcinet82

XLDnaute Barbatruc
Re : VBA Boucle Do While ==> Loop

Salut,

Voici 2 propositions de code qui colles le plus a ce que tu avais fait :
Code:
Sub TEST()
Dim i As Integer
For i = 4 To 50
    If Range("B" & i) = "" Then
        Range("B" & i).Value = "TEXTE"
        Range("B" & i + 1).EntireRow.Insert
    End If
Next i
[COLOR=teal][B]'ou alors
[/B][/COLOR]i = 4
Do While i < 50
    If Range("B" & i) = "" Then
        Range("B" & i).Value = "TEXTE"
        Range("B" & i + 1).EntireRow.Insert
    End If
    i = i + 1
Loop
End Sub

Je pense que tu comprendras aisément ces codes, mais si tu as des questions, n'hesites pas a refaire signe.

@+
 

Stéphanie82

XLDnaute Nouveau
Re : VBA Boucle Do While ==> Loop

Merci porcinet82
Oui j'ai bien compris les codes.
en fait j'avais mal expliqué mon problème, j'ai oublié de dire que le boucle doit s'arreté si on rajoute un texte.

la finalité et de pouvoir allimenter un tableau

grace à ta première proposition, j'ai pensé à une solution à ce problème.

voici le résultat final sans passer par une boucle (très très fier)

Code:
Sub TEST()
Range("A4").Offset(1, 1).Select
If ActiveCell = "" Then [COLOR="Green"]'Si la valeur est vide[/COLOR]
    ActiveCell.Value = "TEXTE" [COLOR="green"]'On insère le TEXTE[/COLOR]
    ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="green"]'et on insérer une ligne en dessous[/COLOR]
Else:
    ActiveCell.Offset(1, 0).Select [COLOR="green"]'Sinon on descend d'une cellule et la selectionn[/COLOR]    
    If ActiveCell = "" Then [COLOR="green"]'Et on regarde si la valeur est vide[/COLOR]
        ActiveCell.Value = "TEXTE" [COLOR="green"]'Si vide alors on insère le TEXTE[/COLOR]
        ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="green"]'et on insérre une ligne en dessous[/COLOR]    
Else:
        ActiveCell.Offset(-1, 0).End(xlDown).Offset(1, 0).Select [COLOR="green"]'Sinon regarde encore en dessous[/COLOR] 
       ActiveCell.Value = "TEXTE" [COLOR="green"]'Et on insère le TEXTE[/COLOR]
        ActiveCell.Offset(1, 0).EntireRow.Insert [COLOR="green"]'et on insérer une ligne en dessous[/COLOR]
End If
End If
End Sub


PS roro69 : merci d'avoir consacré un peu de ton temps, ça arrive même aux meilleurs
 

roro69

XLDnaute Impliqué
Re : VBA Boucle Do While ==> Loop

RE
Une petite contribution quand meme

Sub Boucle()
Range("B5").Select 'Début de la recherche
Do While ActiveCell <> "" 'Faire la boucle tant que la cellule sélectionée n'est pas vide
ActiveCell.Offset(1, 0).Select 'Décalage de 1 ligne à chaque fois
Loop
Selection.Insert Shift:=xlDown
End Sub
A ++
 

porcinet82

XLDnaute Barbatruc
Re : VBA Boucle Do While ==> Loop

re,

Roro, tu as oublié un p'ti bout de code, tu ne mets nul part de référence à TEXTE ;)

Sinon, je veux pas paraitre chiant, mais c'est histoire de donner de bonnes habitudes à Stéphanie. Il vaut mieux éviter les Select qui en général ne sont pas nécessaire et rallonge le tps d'execution. Donc en reprenant la base du code de roro et en enlevant les Select, ca donnerait quelque chose de ce genre (enfin, si j'me suis pas planté...) :
Code:
Sub Boucle()
Dim i As Integer
i = 5
Do While Range("B" & i) <> "" 'Faire la boucle tant que la cellule sélectionée n'est pas vide
    i = i + 1 'Décalage de 1 ligne à chaque fois
Loop
Range("B" & i).Value = "TEXTE"
Rows(i + 1).Insert Shift:=xlDown
End Sub

Bon courage,

@+
 

roro69

XLDnaute Impliqué
Re : VBA Boucle Do While ==> Loop

RE
Bonne rectification;c'est gentil de m'avoir corrigé et de plus çà me permet d'apprendre;et de toute évidence de donner de bonne habitude.Bonne leçon pour moi faire attention quand on répond de répondre suivant ses connaissances pour ne pas donner de mauvaises informations.
A++
 

Hervé

XLDnaute Barbatruc
Re : VBA Boucle Do While ==> Loop

Bonjour :)

Puisqu'on parle de bonnes habitudes à donner à stephanie, évites les boucles do....loop très vite lourde à coder et rapidement illisible, et un poil plus long en temps d'execution.

préferes les boucles for..to ou mieux encore (a mon avis) for....each

voilà, c'était l'avis d'hervé en direct de son bureau à vous les studios.

salut
 

porcinet82

XLDnaute Barbatruc
Re : VBA Boucle Do While ==> Loop

re, Salut Hervé :),

Une petite question au maitre Hervé. Par curiosiré, pourquoi tu dis que les boucles For Each sont mieux que les For To ?
En tout cas, d'accord avec toi avec Do While que j'utilise quasiment jamais !!!

@+
 

Hervé

XLDnaute Barbatruc
Re : VBA Boucle Do While ==> Loop

re :)

lol, tu parles d'un maitre :D

les boucles for to incrémente une variable à chaque passage de la boucle, l'incrémentation est toujours une perte de temps.

mais bon, là, on chipote un peu, porcinet, tant que c'est pas des boucles do...loop (beurk) tout me va :)

bye
 

porcinet82

XLDnaute Barbatruc
Re : VBA Boucle Do While ==> Loop

re,

En tout cas, tu n'es pas pres de me voir utiliser autre chose que des For To sauf pour boucler sur des plages, donc heureusement que ca te vas, sinon l'un de nous aurait ete de trop ici :cool: !!! :D

Allez, je retourne bosser un peu quand meme ;).

@+
 

Statistiques des forums

Discussions
312 160
Messages
2 085 839
Membres
103 001
dernier inscrit
vivinator