explications pour Macro

Excel_lent

XLDnaute Impliqué
Bonjour à tous (tous incluant toutes bien sûr),

J'ai adapté une macro relevée dans un post (l'auteur se reconnaîtra sûrement).
Elle consiste à trier et mettre en évidence des numéros choisis.
Un cas me pose problème (voir fichier joint).

Qui peut m'apporter des éclaircissements ?
Merci et bonne journée
 

Excel_lent

XLDnaute Impliqué
Désolé,

J'ai oublié d'enlever un accent dans le nom du fichier joint donc il n'a pas été pris en compte.

Le voici ! [file name=tricoloris.zip size=10162]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/tricoloris.zip[/file]
 

Pièces jointes

  • tricoloris.zip
    9.9 KB · Affichages: 12

Hervé

XLDnaute Barbatruc
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
 

Discussions similaires

Statistiques des forums

Discussions
312 321
Messages
2 087 266
Membres
103 501
dernier inscrit
talebafia