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

  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.

  8. #8
    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
    Comme je t'ai dit, je n'ai pas testé (!)
    Remplace ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim FLm as worksheet, 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
            'la suite du code
    Testé.
    Si tu as toujours un problème, il ne viendra plus de là.
    Il manquait simplement la référence à la feuille avant le range FLm.Range("d65536")

  9. #9
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    un autre message d'erreur:
    membre de méthode ou de données introuvable
    on selectionnant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLm.cel.Offset(0, 3).Value = Format(TBdate.Value, "dd/mm/yyyy")
    merci.

    vous n'avez pas repondu à ma question
    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.

  10. #10
    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
    Citation Envoyé par abouhossam Voir le message
    un autre message d'erreur:
    membre de méthode ou de données introuvable
    on selectionnant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FLm.cel.Offset(0, 3).Value = Format(TBdate.Value, "dd/mm/yyyy")
    merci.
    Oui, je n'ai pas testé cette partie (sans ton ficher cela m'aurait été difficile...) et j'ai laissé FLm.
    J'ai corrigé la procédure dans le poste précédent.
    Ceci dit, pour ta seconde intervention, modère tes exigeances. N'oublie pas que nous sommes tous des bénévoles et que nous ne sommes pas à ta disposition. La méthode que tu réclames, je te l'ai donnée dans ma première réponse.
    Si tu veux en savoir plus, consulte la FAQ et les tutoriels
    Sauf erreur commise - que tu aurais pu identifier si tu t'étais donné la peine d'aller dans l'aide en ligne, à Find - je pense avoir suffisamment porté d'attention à ta question.
    Essaie de trouver seul la solution avec les renseignements fournis.
    Bonne journée

  11. #11
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    ouskel'n'or
    je t'envoie le fichier
    je peux avoir des doublons dans la colonne N°cadre et N°moteur mais jamais un couple (N°moteur;N°cadre) soit en double.
    mais comme la listbox LBmoteurcadre ne fait la recherche que sur la colonne N°moteur; quand je click sur le bouton valider , la macro m'envoie le N° facturevente pour les N°moteur sans prendre en considération son N°cadre
    merci.

    je pense que les conditions doivent se faire avec le couple (N°moteur;N°cadre) pour ne pas avoir de problèmes.
    mais je ne sais pas comment faire
    merci.

  12. #12
    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
    Regarde la réponse 6. Corrigée et testée.

  13. #13
    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 ouskel'n'or
    j'ai corrigé mon code
    et voilà le resultat:
    la macro s'execute sans qu'il colle les valeurs date vente et N° facture vente sur le tableau
    le fichier est ci-joint
    merci.

  14. #14
    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 n'ai regardé que la correspondance N°moteur-N°cadre
    je peux avoir des doublons dans la colonne N°cadre et N°moteur mais jamais un couple (N°moteur;N°cadre) soit en double.
    Et ça, c'est corrigé.
    Pour date vente et N° facture vente je n'ai pas vu où tu avais mis le code. Je regarde.
    Mais peut-être as-tu trouvé entre temps
    Tu dis

  15. #15
    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
    Bien sûr, la colonne dans laquelle tu recherches est la colonne d alors que le N° de cadre (colonne 2 de la listbox) est dans la colonne e. Ensuite, je n'ai pas vu où tu fixais BoundColumn et textColumn
    Ajoute ça à ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Activate()
        Me.LBmoteurcadre.BoundColumn = 2
        Me.LBmoteurcadre.TextColumn = 1
    End Sub
    Et corrige cette procédure
    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("e2:e" & Flm.Range("e65536").End(xlUp).Row)
        With Plage
            Set cel = .Find(Me.LBmoteurcadre.Value, LookIn:=xlValues, lookat:=xlWhole)
            If Not cel Is Nothing Then
                firstAddress = cel.Address
                Do
                    If cel.Value = Me.LBmoteurcadre.Value Then
                        cel.Offset(0, 2).Value = Format(CDate(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
    Testé aussi

  16. #16
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    merci ouskel'n'or
    j'ai copier ton code mais j'ai un problème
    tu peux ouvrir le fichier ci-joint et voir l'exemple pour:
    sté = "SAHARACYCLE"
    modèle = "LIBERO"
    N° moteur = "ASC159" ===> il est toujours afficher sur LBmoteurcadre en double même si un est vendu
    merci.

  17. #17
    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
    Et si tu expliquais la finalité de l'appli en une seule fois? A chacun de tes messages il y a un nouvel élément.
    Que dois-tu renseigner ?
    Que veux-tu chercher ?
    Que veux-tu obtenir ?
    Bref, qu'est censée faire ton appli ?
    Là, j'ai cherché LBmoteurcadre pour récupérer la date, et le N° de facture.
    Essaie de comprendre le code et corrige-le en fonction de ce que tu veux.
    Déjà, il semblerait que c'est bien LBmoteurcadre mais qu'ensuite c'est le No moteur, ce que fait pas le code que je t'ai passé.
    As-tu regardé Offset, dans l'aide en ligne ?
    Si tu corriges, vérifie le No de colonne et si tu le corriges, corrige l'offset.
    La moindre des chose est que tu participes autrement qu'en testant ce qu'on te met.
    Bon week-end

  18. #18
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 271
    Par défaut
    merci de tes conseils

+ 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