VBA problème d'ajout de ligne avec excel

Résolu/Fermé
Haseo
Messages postés
6
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
26 mars 2007
- 9 mars 2007 à 13:35
 OhMichel - 21 nov. 2008 à 10:43
Bonjour;

voila je développe un petit macro sous excel pour que dans la premier colone a chaque foi que je rencontre le Caractère : en 1er position, un nouvelle ligne vienne s'intercalé entre la ligne ou le ":" a été trouvé et la ligne précédente.

mon problème est que le code suivant ne fonctionne pas a chaque foi qu'il trouve ":" et je ne comprend pas pq voici le code

sub Feuille()

Dim ligne As Integer
Dim LigneMax As Integer
Dim NomFeuille As String
Dim ValCell As String
Dim Caract As String

NomFeuille = InputBox(" Nom de la feuille a traité", "Feuille", "")
LigneMax = inputBox("Nombre de ligne a traité", Ligne", 0)
LigneMax = LigneMax * 2

for ligne = 1 To LigneMax
ValCell = WorkSheets(NomFeuille).Cells(ligne, 1). vallue
Caract = Mid(ValCell, 1, 1)
if Caract = ":" Then
WorkSheets(NomFeuille).Cells(ligne, 1).EntireRow.Insert
End IF
ligne = ligne + 1
Next
End sub

voila le code

en ce qui conserne le fichier sur le quelle j'ai ce problème je peut vous l'envoyer par E-mail.

Merci pour votre attention
et merci davance pour vos réponse

2 réponses

Kobaya
Messages postés
282
Date d'inscription
vendredi 28 mai 2004
Statut
Membre
Dernière intervention
10 janvier 2008
214
9 mars 2007 à 15:12
bonjour haseo,

il n afaut pas utiliser une boucle For/Next si tu insères ou détruits des lignes, car sinon le compteur va être "corrompu".
Do/Loop est plus indiqué :

ligne = 1
Do Until WorkSheets(NomFeuille).Cells(ligne, 1).Value =""
     If Left(WorkSheets(NomFeuille).Cells(ligne, 1). Value, 1) =":" Then
           WorkSheets(NomFeuille).Cells(ligne, 1).EntireRow.Insert
     End If
     ligne = ligne + 1
Loop
1
Haseo
Messages postés
6
Date d'inscription
vendredi 9 mars 2007
Statut
Membre
Dernière intervention
26 mars 2007

12 mars 2007 à 08:31
Merci

pour cette aide bien précieuse

il ne faut pas oublier de mettre un Ligne = Ligne +1

ligne = 1
Do Until WorkSheets(NomFeuille).Cells(ligne, 1).Value =""
If Left(WorkSheets(NomFeuille).Cells(ligne, 1). Value, 1) =":" Then
WorkSheets(NomFeuille).Cells(ligne, 1).EntireRow.Insert
ligne = ligne +1
End If
ligne = ligne + 1
Loop

dans le IF autrement on rentre dans une boucle infinie
0
Non, le ligne = ligne +1 est mis en dehors du "If" pour des questions de lisibilité.

Tu ne rentre pas dans une boucle infinie puisque tu es en dehors du "If" mais toujours dans la boucle.
0