IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

comment parcourrir les champs d'une colonne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 263
    Par défaut comment parcourrir les champs d'une colonne
    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.

  2. #2
    Invité
    Invité(e)
    Par défaut
    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

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bonjour jacques_jean,
    Citation Envoyé par vacknov qui aurait dit comme ça...
    Lire la première cellule de la colonne
    Tant que colonne non vide
    Ça ne serait pas un truc comme ça ?
    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
    Bonne journée

    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.

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 453
    Par défaut
    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

  5. #5
    Invité
    Invité(e)
    Par défaut
    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.

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    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
    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
    j'obtiens
    "$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 :
    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
    A+

  7. #7
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    263
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 263
    Par défaut
    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.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function My_index(value As Integer)  As Integer
    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_count(My_index)  As Integer
    4. Utiliser My_index et My_count pour traiter les autres informations dans le fichier en se deplaçant :

    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 30/06/2011, 20h33
  2. Réponses: 1
    Dernier message: 09/10/2008, 19h04
  3. Réponses: 2
    Dernier message: 15/05/2007, 10h34
  4. Comment remplir les champs d'une autre application ?
    Par rico32fr dans le forum C++Builder
    Réponses: 6
    Dernier message: 19/06/2006, 08h54
  5. Comment compter les doublons d'une colonne?
    Par Dnx dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/11/2005, 10h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo