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 ecrire un code qui parcours une colonne?


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 169
    Points : 76
    Points
    76
    Par défaut comment ecrire un code qui parcours une colonne?
    bonjour,

    je souhaiterai s'il vous plaît réaliser une macro en vba qui parcourerait une colonne et, à chaque fois qu'il ya une valeur dans une des cellules de cette colonne, elle l'a renvoi dans une autre colonne .Quelqu'un pourrait t-il me montrer un exemple de code ??

    Merci d'avance

  2. #2
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonjour à tous
    Bonjour doudou8mc

    Quelque chose comme cela :
    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
    19
    20
    21
    22
    Option Explicit
     
    Sub parcours_copie()
    Dim c As Range
    Dim firstAddress As String
    Dim ligne As Integer
    Dim mavar
     
    With Worksheets("Feuil1").Range("a:a")
    mavar = "*"
        Set c = .Find(mavar, LookIn:=xlValues, Lookat:=xlPart) '
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                ligne = c.Row
                Range("b" & ligne) = Range("a" & ligne)
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
     
    End Sub
    mais il y a d'autres méthodes

    Eric

  3. #3
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour doudou8mc edelweisseric le forum
    interesse a toi a for next & For Each next les plus classiques
    2 exemples qui font exactemement la méme chose

    boucle sur la colonne a copy sur sur la colonne b sur la meme ligne


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub es()
    Dim c As Range
    For Each c In Range("a1", Range("a65536").End(xlUp))
    If c <> "" Then c.Offset(0, 1) = c
    Next c
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub es1()
    Dim i As Long
    For i = 1 To Range("a65535").End(xlUp).Row
    If Cells(i, 1) <> "" Then Cells(i, 2) = Cells(i, 1)
    Next i
    End Sub
    SALUTATIONS

  4. #4
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Bonjour à tous
    re doudou8mc
    Bonjour Laetitia

    Juste une petite chose : il est toujours préférable de poser les questions sur le site et non par MP, comme cela tous ceux qui suivent le sujet sont au courant et surtout tout le monde peut aider, dont les plus aguerris.

    Je me permets de recopier ta demande : "d'abord merci bcp pour ton aide;mais ce que j'attends de la macro,c'est qu'elle parcoure une colonne ou une plage (ex:M32:M80) et à chaque fois qu'elle tombe sur une cellule non vide , elle la renvoi vers dans une colonne d'un tableau (ex:Y42:Y54);les valeurs restituées dans (Y42:Y54) doivent être successive , c à dire, pas de cellules vides entre deux valeurs.
    Merci d'avance pour le précieux coup de main !! "

    Donc peut être comme cela :
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Option Explicit
     
    Sub parcours_et_copie()
    Dim a As Integer
    Dim c As Range
    Dim firstAddress As String
    Dim ligne As Integer
    Dim mavar
     
    a = 42
     
    Range("M30").Select    
    With Worksheets("Feuil1").Range("M32:M80")
    mavar = "*"
        Set c = .Find(mavar, LookIn:=xlValues, Lookat:=xlPart) '
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                ligne = c.Row
                Range("y" & a) = Range("M" & ligne)
                a = a + 1
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
     
    End Sub
    J'ai écrit car si l'on sélectionne une autre cellule ; M31, M32, .... , le "find" ne commence pas la recherche à M32. Il y a peut être une instruction à ajouter ou modifier, mais je ne la connais pas.

    Il n'en reste pas moins que c'est aussi faisable avec la proposition de Laetitia

    Eric

  5. #5
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Citation Envoyé par edelweisseric Voir le message
    J'ai écrit car si l'on sélectionne une autre cellule ; M31, M32, .... , le "find" ne commence pas la recherche à M32. Il y a peut être une instruction à ajouter ou modifier, mais je ne la connais pas.
    En effet, on peut en utilisant un range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim Plage as range, c as range, ...
         Set Plage = Worksheets("Feuil1").Range("M32:M80")
         With Plage
              Set c = etc.
    Bon aprem'

    PS - Et je préfère une boucle de recherche à un parcours de toutes les cellules de la colonne...

  6. #6
    Membre éclairé
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Points : 712
    Points
    712
    Par défaut
    Re

    On en apprend tous les jours

    Merci

  7. #7
    Membre expérimenté Avatar de laetitia
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 281
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 281
    Points : 1 512
    Points
    1 512
    Par défaut
    bonjour le fil une solution simple suffisante pour peu de cellules a traiter


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub essai()
    Dim i As Long, z As Byte
    Application.ScreenUpdating = False
    z = 42
    For i = 32 To 80
    If Cells(i, 13) <> "" Then
    Cells(z, 25) = Cells(i, 13)
    z = z + 1
    End If: Next i
    End Sub
    code donner en message prive mea culpa
    en precisant
    ps evite les messages privees autrement le forum n'en
    'profite pas
    SALUTATIONS

Discussions similaires

  1. [C#]Comment executer du code qui se trouve dans une string ?
    Par freddyboy dans le forum Windows Forms
    Réponses: 4
    Dernier message: 28/02/2005, 17h31
  2. [Thread] comment arreter un thread qui execute une methode b
    Par Cyber@l dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 04/08/2004, 11h51
  3. [Juridique] Comment réutiliser le code source d'une classe ?
    Par mathieu dans le forum Général Java
    Réponses: 8
    Dernier message: 17/05/2004, 14h40
  4. [VB.NET] Comment ecrire du code entre <title>
    Par ykane dans le forum ASP.NET
    Réponses: 5
    Dernier message: 10/05/2004, 17h58
  5. Instruction SQL qui supprime une colonne d'une table
    Par tseg dans le forum Langage SQL
    Réponses: 2
    Dernier message: 31/10/2003, 21h47

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