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 :

colonne de listbox


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
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    bjr à tous
    j'ai le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("mouvement")
    For Each cel In .Range("e2:e" & .Range("e65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value Then
    LBmoteurcadre est listbox;

    je veux faire la condition sur la valeur de la 2ème colonne de la ligne selectionnée de LBmoteurcadre.
    veuillez m'aider svp
    merci.

    slt
    autre façon de poser m'a question
    mon code est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Bvalider_Click()
    With Sheets("mouvement")
    For Each cel In .Range("d2:d" & .Range("d65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value Then
    je veux le chose suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Bvalider_Click()
    With Sheets("mouvement")
    For Each cel In .Range("d2:d" & .Range("d65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value and .range("e" & cel.row).value = la valeur de la 2ème colonne Then
    est ce clair ?

    noter que
    ma listbox LBmoteurcadre a 2 colonne.
    merci

    slt
    autre façon de poser m'a question
    mon code est:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Bvalider_Click()
    With Sheets("mouvement")
    For Each cel In .Range("d2:d" & .Range("d65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value Then
    je veux le chose suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Bvalider_Click()
    With Sheets("mouvement")
    For Each cel In .Range("d2:d" & .Range("d65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value and .range("e" & cel.row).value = la valeur de la 2ème colonne Then
    car ma listbox LBmoteurcadre a 2 colonnes.
    je pense que c'est clair ?

  2. #2
    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
    Je suppose une listbox à deux colonne dans un userform.
    Pour afficher la première colonne et récupérer la seconde tu dois mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Listbox1.TextColumn = 1
    Listbox1.BoundColumn = 2
    Ensuite tu récupères .value
    Bonne soirée

    Edit
    Dans cet exemple, tu peux en même temps récupérer la sélection dans la 1ère colonne avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sélection = Listbox1.Text

  3. #3
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    j'ai bien changé mon code et ça ne donne rien.
    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
    Private Sub Bvalider_Click()
    With Sheets("mouvement")
    LBmoteurcadre.TextColumn = 1
    LBmoteurcadre.BoundColumn = 2
    For Each cel In .Range("d2:d" & .Range("d65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value And .Range("e" & cel.Row).Value = LBmoteurcadre.BoundColumn.Value Then  
    .Range("g" & cel.Row).Value = Format(TBdate.Value, "dd/mm/yyyy")
    .Range("h" & cel.Row).Value = Format(facturevente.Value, ">")
    End If
    Next
    End With
    facturevente.Value = ""
    LBmoteurcadre.Clear
    LBmodèle.Clear
    CBsté.Value = ""
    End Sub
    merci.

  4. #4
    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
    Déclare "cel as range" et tu nous reviens

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    cel as range est bien déclaré
    car la macro est
    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
    Dim cel As Range 'variable de boucle qui represente les element de la feuil "recap" de la col article
    Dim str As String 'variable de comparaison
    Dim Unique As New Collection
    Dim Valeur As Range
    Dim lg As Integer
    Dim Tableau()
    Dim boolVerif As Boolean
    Dim celtableau As Variant
    Private Sub Bvalider_Click()
    With Sheets("mouvement")
    LBmoteurcadre.TextColumn = 1
    LBmoteurcadre.BoundColumn = 2
    For Each cel In .Range("d2:d" & .Range("d65536").End(xlUp).Row)
    If cel.Value = LBmoteurcadre.Value And .Range("e" & cel.Row).Value = LBmoteurcadre.BoundColumn.Value Then
     
    .Range("g" & cel.Row).Value = Format(TBdate.Value, "dd/mm/yyyy")
    .Range("h" & cel.Row).Value = Format(facturevente.Value, ">")
     
    End If
    Next
    End With
    facturevente.Value = ""
    LBmoteurcadre.Clear
    LBmodèle.Clear
    CBsté.Value = ""
    TBdate.Value = Format(Now, "dd/mm/yyyy")
    End Sub
    merci.

  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
    Plutôt qu'examiner les valeurs ligne par ligne, utilise Find pour trouver la première valeur puis vérifie la seconde. Cette méthode est infiniment plus rapide et est décrite dans l'aide en ligne.
    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
    Sub Bvalider_Click()
    Dim Flm As Worksheet
    Dim Plage As Range, cel As Range, firstAddress As String
        Set Flm = Worksheets("mouvement")
        Set Plage = Flm.Range("d2:d" & Flm.Range("d65536").End(xlUp).Row)
        With Plage
            Set cel = .Find(LBmoteurcadre.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not cel Is Nothing Then
                firstAddress = cel.Address
                Do
                    If cel.Offset(0, 1).Value = LBmoteurcadre.Value Then
                        cel.Offset(0, 3).Value = Format(TBdate.Value, "dd/mm/yyyy")
                        cel.Offset(0, 3).Value = Format(facturevente.Value, ">")
                        Exit Do
                    End If
                    Set cel = .FindNext(cel)
                Loop While Not cel Is Nothing And cel.Address <> firstAddress
            End If
        End With
        facturevente.Value = ""
        LBmoteurcadre.Clear
        LBmodèle.Clear
        CBsté.Value = ""
        TBdate.Value = Format(Now, "dd/mm/yyyy")
    End Sub
    Le seul pb que tu peux rencontrer (que je n'ai pas vérifié) est sur la ligne
    With FLm.Range("d2:d" & .Range("d65536").End(xlUp).Row)
    Tu peux tester pour moi ?

    Edit
    Pour ton code, que vient faire "BoundColumn" ici ?
    LBmoteurcadre.BoundColumn.Value
    BoundColumn est fixé au départ, ensuite tu utilises "LBmoteurcadre.Value"

    Edit
    Code corrigé

  7. #7
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    ça marche pas
    il donne un message d'erreur:
    référence incorrecte ou non qualifiée.
    et selectionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    With FLm.Range("d2:d" & .Range("d65536").End(xlUp).Row)
    ouskel'n'or
    est ce qu'il ya une méthode pour copier les valeurs de la ligne selectionnée d'une listbox et les coller dans une feuille sachant que la listbox a 2 colonnes?
    si il y a une méthode je dis que mon problème va être résolu
    merci.

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

Discussions similaires

  1. [XL-2007] séparateur de colonne dans listbox
    Par Gestionnaire_rh dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/11/2011, 15h39
  2. [XL-2003] Séparateur de colonne dans listbox
    Par Pierre67 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 12/09/2010, 16h20
  3. Lecture d'une colonne de listbox
    Par Shadow5 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 13/03/2008, 12h07
  4. [VBA-E]Définir un en-tête de colonne pour listbox
    Par ippo_master dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/11/2007, 09h47
  5. [VBA-E]2 colonnes dans listbox
    Par Kaiba dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/02/2007, 17h47

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