[déplacé VB6 -> VBA] PROBLEME VBA AVEC UNE BOUCLE

Résolu
loloslandes Messages postés 2 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 30 juillet 2009 - 29 juil. 2009 à 16:34
loloslandes Messages postés 2 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 30 juillet 2009 - 30 juil. 2009 à 21:52
bonjour,
je suis débutante sous vba excel 2003.
j'ai un problème avec une boucle.
je voudrai que mon code copie dans la colonne 4 pour chaque lignes P la valeur de la première colonne de droite non vide ainsi de suite .

expl:
0001 colonne 4 =1 ligne 1
0501 colonne 4 =5 ligne 2
6125 colonne 4 =6 ligne 3

voici mon code :

Sub er()
Dim F As Integer ' max ligne
Dim L As Integer 'max colonne
Dim I As Integer 'debut de colonne
Dim P As Integer 'debut de ligne

'nombre de ligne pour les champs LISTE
Sheets("LISTE").Select
Range("B23").Select
Selection.End(xlDown).Select
F = ActiveCell.Row

Sheets("LISTE").Select
Range("d21").Select
Selection.End(xlToRight).Select
L = ActiveCell.Column

I = 5
P = 23

Do While P < F+1 And I < L+1 And Worksheets("LISTE").Cells(P, I).Value = ""
I = I + 1
Loop

Worksheets("LISTE").Cells(P, 4).Value = Worksheets("LISTE").Cells(P, I).Value

end sub

résultat : la première ligne ok
mais pour les autres lignes

merci d'avance de votre aide

2 réponses

Profil bloqué
30 juil. 2009 à 21:40
Salut loloslandes

1) Si j'ai bien compris les 0 sont des colonnes vides et les autres des colonnes pleines dans l'exemple que tu as donné
0001 colonne 4 =1 ligne 1
0501 colonne 4 =5 ligne 2
6125 colonne 4 =6 ligne 3

2) Dans ton code donne des noms de variables plus parlants

Sub er()

Dim Maxlg As Integer ' max ligne (dernière ligne à tester)
Dim Maxcol As Integer 'max colonne ( dernière colonne à tester)
Dim Colonne As Integer 'debut de colonne ( première colonne à tester)
Dim Ligne As Integer 'debut de ligne ( première ligne à tester)
Dim i as integer ' pour la boucle pour chaque ligne
dim j as integer ' idem pour les colonnes

'nombre de lignes pour les champs LISTE
Sheets("LISTE").Select
Range("B23").Select
Selection.End(xlDown).Select
Maxlg = ActiveCell.Row

Sheets("LISTE").Select
Range("d21").Select
Selection.End(xlToRight).Select
Maxcol = ActiveCell.Column

Colonne = 5 ' première colonne de chaque ligne à tester
Ligne = 23 ' première ligne à tester

for i = Ligne to Maxlig ' boucle pour chaque ligne
for j = Colonne to Maxcol ' pour chaque colonne à tester
if Worksheets("LISTE").Cells(i, j).Value <> "" then
' cette cellule n'est pas vide : on la copie en colonne 4
Worksheets("LISTE").Cells(i, 4).Value = Worksheets("LISTE").Cells(i, j).Value
Exit for ' on sort de la boucle des colonnes
end if
Next j
Next i

end sub

On fait une double boucle : une boucle générale pour les lignes et une boucle imbriquée pour les colonnes

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
3
loloslandes Messages postés 2 Date d'inscription jeudi 21 mai 2009 Statut Membre Dernière intervention 30 juillet 2009
30 juil. 2009 à 21:52
bonjour GRENIER Alain

merci beaucoup pour ton aide

je comprends mon erreur maintenant.

encore merci .

loloslandes
0
Rejoignez-nous