Bonjour;
Je suis novice en vba excel, je veux savoir comment parcourir les champs remplis d'une colonne. C'est à dire :
Lire la première cellule de la colonne
Tant que colonne non vide
Traitement.
Merci de votre aide.
Bonjour;
Je suis novice en vba excel, je veux savoir comment parcourir les champs remplis d'une colonne. C'est à dire :
Lire la première cellule de la colonne
Tant que colonne non vide
Traitement.
Merci de votre aide.
Bonjour Vacknov,
Il y a comme toujours plusieurs solutions dont :
si la colonne contenant les données est la C et si la 1ère ligne à traiter est la 2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 pl = 2 dl = Range("C65536").End(xlUp).Row For i = pl to dl 'traitement next i
Bonjour jacques_jean,
Ça ne serait pas un truc comme ça ?Envoyé par vacknov qui aurait dit comme ça...
Bonne journée
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub LeTest() Dim FL1 As Worksheet, Cel as range, CelCol as range Dim PlageLignes As Range, PlageCol As Range Set FL1 = Worksheets("Feuil1") DerniereLigne = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row Set PlageLignes = FL1.Range("A1:A" & DerniereLigne) For Each Cel In PlageLignes Set PlageCol = FL1.Range(Cel.Address & ":" & FL1.Cells(Cel.Row, FL1.Cells(Cel.Row, Rows(Cel.Row).Cells.Count).End(xlToLeft).Column).Address) For Each CelCol In PlageCol MsgBox CelCol Next Next Set PlageCol = Nothing Set PlageLignes = Nothing End Sub
Edit
@vacknov,
Ce code parcourt la colonne A ligne par ligne et, pour chaque ligne, lit ce qu'il y a dans chaque colonne.
Ce qu'il fait :
Il définit la plage renseignée de la colonne A -> de la première à la dernière ligne (PlageLignes)
Il parcourt cette plage
A chaque ligne il définit la plage renseignée de la ligne -> De la première colonne à dernière colonne (PlageCol)
Il parcourt cette plage et affiche le contenu de la cellule pour chaque colonne jusqu'à la dernière
Puis il passe à la ligne suivante.
Une alternative consiste à concaténer toutes les cellules non-vides d'une plage à l'aide des méthodes SpecialCells() de l'objet Range() et Union de l'objet Application. Par la suite, on traite de façon appropristoutes les cellules résultant de ces opération, puisqu'elles ne sont pas vides. Le traitement ne se fait plus par colonne mais par cellule...
Par exemple:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Sub LeTest() Dim rng As Range Dim rngNonVide As Range Dim C as Range Set rng = Feuil1.UsedRange Set rngNonVide = rng.SpecialCells(Type:=xlCellTypeConstants) Set rngNonVide = Union(rngNonVide, rng.SpecialCells(Type:=xlCellTypeFormulas)) For Each C in rngNonVide ' Traitement de la cellule non vide, C Next C Set rng = Nothing Set rngNonVide = Nothing End Sub
Bonjour Ouskel'nor,
Il est vrai que j'ai compris qu'il voulait lancer un traitement sur les cellules renseignées d'une seule colonne.
Mais on en saura peut-être plus demain ou lundi (en cas de pont !), car comme vous l'avez dit récemment, les questions et réponses ne se bousculent en dehors des heures de travail.
Mais c'est sans doute le point fort de ce site : beaucoup d'utilisateurs à titre professionnel.
Amicalement.
Bonsoir Singular,
J'avais pensé à SpecialCell mais je ne l'utilise plus après avoir eu une appli qui a tourné plusieurs minutes au lieu d'une fraction de seconde.
Le fichier sur lequel je suis ne comporte que 8 colonnes et 75 lignes. Toutes les cellules de cette plage sont renseignées
En faisant
j'obtiens
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Set rng = Feuil1.UsedRange Set rngNonVide = rng.SpecialCells(Type:=xlCellTypeConstants) Set rngNonVide = Union(rngNonVide, rng.SpecialCells(Type:=xlCellTypeFormulas)) MsgBox rngNonVide.Address
"$G$1:$X$16,$B$16:$E$16,$A$1:$A$22,$A$23:$X$33,$O$35,$Z$36,$B$1:$F$15,$B$17:$X$22"
Or je n'ai rien entre $G$1:$X$16, rien en Z36, rien en x22.
Par contre, l'adresse que j'aurais dû obtenir est "A1:H75"
Ceci dit, ta méthode me fait penser à une méthode quand même plus simple que ma précédente :
A+
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 Sub ParcourirColonnesChaqueLigne() Dim FL1 As Worksheet Dim Plage As Range, cel As Range Set FL1 = Worksheets("Feuil1") DerniereLigne = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row DerniereColonne = Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column Set Plage = FL1.Range(Cells(1, 1), Cells(DerniereLigne, DerniereColonne)) For Each cel In Plage If Not cel Is Nothing Then MsgBox cel Next Set Plage = Nothing End Sub
Merci premièrement pour l'interêt.
Effectivement je traite une seule colonne. comme lorsque l'on cherche une date ou un nom dans une liste.
Ce numero peut apparaitre n fois sur la même colonne bien entendu les lignes différentes : donc plusieurs enregistrement.
1. Tri des données croissant ou decroissant aucune importance l'essentiel qu'on retrouve le même numero à la suite.
2. Recherche du numero de la ligne sur la colonne specifier contenant la valeur passée en paramètre pour retourner le numero de cette dernière.
3. Compter le nombre d'engistrement et retourner ce dernier: lecture depuis My_index.
Code : Sélectionner tout - Visualiser dans une fenêtre à part function My_index(value As Integer) As Integer
4. Utiliser My_index et My_count pour traiter les autres informations dans le fichier en se deplaçant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part function My_count(My_index) As Integer
1. depuis My_index le long de la ligne à gauche ou à droite suivant l'emplacement de la colonne à lire.
2. lire les autres lignes de la colonne jusqu'à My_count.
Partager