rebonjour excel_lent
oui oui, l'auteur c'est reconnu
Dans le fichier initiale, toutes les données partaient de la colonne A, c'est donc très logiquement que je recherchais la dernière cellule non vide dans cette colonne.
Ceci ne fonctionne plus si la dernière ligne non vide ne commence pas en A.
Ce qui est le cas dans ton fichier pour la troisième ligne.
Il faut donc définir précisément la plage complete des entrées, pour ceci, je connais 3 méthodes :
1) on peut lancer la boucle d'une manière arbitraire du style for each c in range('a1:a100'). mais ceci implique de modifier la macro dès que l'on rajoute des lignes, ou fait travailler la macro sur 100 lignes alors que 3 auraient pu suffire.
2) on définit la plage par usedrange (qui va nous donner l'ensemble des cellules de la feuille) puis redéfinir cette plage par un resize :
Dim plage As Range
Set plage = ActiveSheet.UsedRange
Set plage = plage.Resize(plage.Rows.Count, 10)
puis ensuite boucler sur cette plage : for each c in plage.
3) rechercher précisément la colonne la plus longue afin de trouver la dimension exact de la plage pour lancer notre boucle, c'est cette méthode que j'ai utilisé dans la macro :
Dim max As Integer
max = Cells(65536, 1).End(xlUp).Row
For i = 2 To 10
If Cells(65536, i).End(xlUp).Row > max Then max = Cells(65536, i).End(xlUp).Row
Next i
For Each c In Range(Cells(1, 10), Cells(max, 10))
numero = 1
le reste de la macro reste inchangé.
de plus, en regardant ta macro RAZ, je me permet de te préciser que l'on est pas obligé de sélectionner une plage pour travailler avec :
Range('A1:J4').ClearContents
ceci suffit amplement.
en espérant t'avoir aidé.
salut
edition : oups salut baptiste
Message édité par: Hervé, à: 31/10/2005 15:20