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 :

Pb listbox -


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut Pb listbox -
    Bonjour
    J'ai une première feuille (Feuil1) d'un fichier source se trouve le nom d'une entreprise.
    Dans une seconde feuille (Feuil2) de ce meme fichier excel, j'ai le nom, adresse et ville d'un certain nombre d'entreprise.
    Je souhaiterais réaliser une macro qui aille cherche le nom de l'entrprise de la feuille 1 (Feuil1) et qu'un onglet me propose de selectionner l'ensemble des entreprise de la feuille 2 (dans une Listbox) dont les trois première lettres soient identiques. Une fois une entreprise selectionnée, je souhaite réaliser des copier coller (nom, adresse, ville) dans différentes cellules de la feuil 2.
    Attention, dans le fichier, une mem entreprise peut etre présentes à plusieurs reprises du fait que de nombreuses adresses peuvent y etre associées.
    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Une fois une entreprise selectionnée, je souhaite réaliser des copier coller (nom, adresse, ville) dans différentes cellules de la feuil 2.
    Sois un peu plus précis; j'ai compris que ces éléments étaient déjà sur Feuil2. Où faut-il les coller. Un classeur exemple serait le bienvenu.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    le copier coller se fait dans la feuil 1 pour les cellules a2, a3, a5 par exemple

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Ce n'est pas "par exemple", ce que je veux, c'est les emplacements définitifs. Mets ton classeur avec ce que tu as déjà fait en pièce jointe.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    le probleme ne concerne pas le copier/coller.
    Pour etre plus clair, et prendre un exemple concret :
    Le nom de l'enterprise dans la feuil 1 est : DANONE.
    Un user form s'ouvre dans lequel se trouve une listbox qui est relié à la feuil 2 ou se trouve la base de données de l'ensemble des entreprises repertoriées.
    Seulement, cette list box commence par les entreprises commencant par la lettre A et ca oblige l'utilisation a aller cherche l'entreprise DANONE manuellement.

    Mon but est que lors de l'ouverture de ce userform, l'entreprise DANONE soit directement proposée ou affiché avant d'etre selectionné par un clic qui engendrera des opier/coller...mais ca c'est un autre pb

    le fichier est en cours de réalisation

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Si je te demande ton classeur, c'est que je ne sais pas où se trouvent tes données. Comment alimenter la listbox si je ne sais pas dans quelle colonne se trouvent les noms d'entreprise. De même pour les autres champs (adresse, ville...). Si tu peux fourrnir ces renseignements de façon précise, je peux travailler sans ton classeur.

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    pour faire simple
    feuil2 (base de données des adresses)
    colonne A : nom des entreprises
    colonne B : adresse
    Colonne C : ville
    Ces données alimentent la Listbox (a1:c500)


    Feuil1 : cellule A5 : DANONE

    l'ensemble se trouve dans un meme fichier

  8. #8
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Regarde le classeur joint. Quand tu presses le bouton "Choix", l'userform apparaît en affichent la liste des entreprises dont les 3 premières lettres sont les mêmes que celles de la valeur de A5, feuille Feuil1. Quand tu sélectionnes une entreprise de la listbox, les résultats correspondants s'affichent en A1:C1; Voici le code de l'userform :

    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
    28
    29
    Private Sub ListBox1_Click()
        With Me.ListBox1
            Var = .List
            [Feuil1!A1].Value = .Value
            [Feuil1!B1].Value = .List(.ListCount - 2, 1)
            [Feuil1!C1].Value = .List(.ListCount - 2, 2)
            Unload Me
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim C As Range
        With Sheets("Feuil2")
            Set plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Me.ListBox1
            .Clear
            .ColumnCount = 3
            .ColumnWidths = "50;50;50"
            .BoundColumn = 1
            For Each C In plage
                If Left(C.Value, 3) = Left([Feuil1!A5], 3) Then
                    .AddItem C.Value
                    .List(.ListCount - 1, 1) = C.Offset(, 1)
                    .List(.ListCount - 1, 2) = C.Offset(, 2)
                End If
            Next C
        End With
    End Sub
    Fichiers attachés Fichiers attachés

  9. #9
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    super ca marche
    merci beaucoup
    peux tu m'expliquer succintement le code stp en mettant des commentaires ?

  10. #10
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,

    Voici le code commenté. En le faisant, je me suis aperçu d'une erreur. J'ai modifié ce qui n'allait pas.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Private Sub ListBox1_Click()
        '"Me" représente ici l'userform
        With Me.ListBox1
            'Tout ce qui commence par "." se réfère à ce qui est mentionné avec "With"
            'par exemple ".Value" signifie ici "Me.ListBox1.Value"
            'la cellulle A1 de Feuil1 prend la valeur de celle du listbox
            [Feuil1!A1].Value = .Value
            'List représente l'ensemble des valeurs de la listbox
            'List(0,0) représente la première ligne et première colonne de List
            'List(0,1) représente la première ligne et deuxième colonne de List
            'Listindex représente le numéro de ligne de la valeur dans "List"
            [Feuil1!B1].Value = .List(.ListIndex, 1)
            [Feuil1!C1].Value = .List(.ListIndex, 2)
            Unload Me
        End With
    End Sub
     
    Private Sub UserForm_Initialize()
        Dim C As Range
        With Sheets("Feuil2")
            '"plage" définit la plage de cellules occupées à partir de A2 de Feuil2
            Set plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
        End With
        With Me.ListBox1
            'on vide la listbox
            .Clear
            ' définit 3 colonnes
            .ColumnCount = 3
            'elles font chacune 50 points de large
            .ColumnWidths = "50;50;50"
            'la valeur renvoyée lors d'un choix est la colonne 1
            .BoundColumn = 1
            'on boucle sur chaque cellule de "plage"
            For Each C In plage
                'si les 3 premières lettres correspondent à celles de A5, Feuil1
                If Left(C.Value, 3) = Left([Feuil1!A5], 3) Then
                    'remplissage de la listbox
                    'ajout d'une ligne dans la listbox
                    .AddItem C.Value
                    'ajout de la cellule de la colonne B dans la listbox en colonne 2
                    .List(.ListCount - 1, 1) = C.Offset(, 1)
                    'ajout de la cellule de la colonne C dans la listbox en colonne 3
                    .List(.ListCount - 1, 2) = C.Offset(, 2)
                End If
            Next C
        End With
    End Sub

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    merci pour ces précisions je comprends bcp mieux.
    Mais par exemple si la base de données se situe sur la feuil2 en e2:g17 - comment faire pourqu'il la reconnaissance
    j'ai du mal avec cette ligne de code
    est il possible de me l'expliquer

    pour préciser ma question
    j'ai simplement deplacer dans le fichier envoyé les données sources des entreprises de a2:c17 vers e2:g17 et je n'arrive pas à adapter le code pour cette nouvelle plage ce qui signifie que j'ai pas tout compris !!!
    merci de m'indiquer les modif a realiser pour que ca fonctionne dans ce cas

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    La ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = .Range(.[A2], .Cells(.Rows.Count, 1).End(xlUp))
    définit la plage de la colonne A (à partir, on accède aux cellules des colonnes B et C).
    Il faut donc mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set plage = .Range(.[E2], .Cells(.Rows.Count, 5).End(xlUp))
    pour partir de la plage de la colonne E (et donc F et G).

  13. #13
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    268
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 268
    Par défaut
    OK merci pour tout

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

Discussions similaires

  1. DrawItem d'un listbox...
    Par scorpiwolf dans le forum C++Builder
    Réponses: 5
    Dernier message: 22/06/2007, 15h50
  2. [Listbox] ScrollBar Horizontal
    Par haleem dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/04/2005, 07h53
  3. Recuper les items de ListBox d'une autre application [API?]
    Par Shamanisator dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 27/09/2002, 12h32
  4. [Canvas] Listbox, couleur et multiselect
    Par rbag dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/09/2002, 13h02
  5. Copier le texte d'un ListBox dans le clipboard.
    Par Clément[Delphi] dans le forum Composants VCL
    Réponses: 3
    Dernier message: 18/08/2002, 08h20

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