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 :

relation pere et fils ?


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut relation pere et fils ?
    Bonjour à tous !

    Je posséde une liste de produits et une liste de clients, sur deux feuilles séparées. Chaque produit possède un, deux ou trois clients qui lui sont propres.
    Exemple :
    Feuille 1 (produits)
    Produit 1
    Produit 2
    Produit 3
    etc...

    et Feuille 2 (clients)
    Produit 1 Client 5
    Produit 1 Client 2
    Produit 1 Client 6
    Produit 2 Client 1
    Produit 2 Client 5
    Produit 2 Client 4
    Produit 3 Client 1

    Voyez le fichier en piece jointe, c'est plus parlant.

    Je souhaiterais utiliser un combobox pour choisir le produit en premier, et un combobox pour choisir le client en second. Comment je pourrais faire pour lier chaque produit, à plusieurs clients ?

    C'est très facile sur access, mais sur excel je n'ai aucune idée...
    Fichiers attachés Fichiers attachés

  2. #2
    Membre Expert Avatar de jerome.vaussenat
    Homme Profil pro
    Formateur Bureautique
    Inscrit en
    Janvier 2011
    Messages
    1 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Formateur Bureautique
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 629
    Par défaut
    Salut,

    pour faire çà, il faut mettre une macro après changement de ta liste produit.
    Qui efface le contenu actuel de la liste client et la recharge selon le nouveau produit.

    j'ai fait ce petit code
    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
    Private Sub pdt_change()
        'on active et charge le contenu de la clt en fonction de la pdt selectionée
        Dim cpt As Integer
     
        'activation du controle
        Me.clt.Enabled = True
        'effacement de la liste actuelle
        Me.clt.Clear
        'recherche du bon pdt pour charger la liste
        Range("G5").Select
        cpt = 0
        Do Until ActiveCell.Offset(cpt, 0).Value = ""
            If ActiveCell.Offset(cpt, 0).Value = Me.pdt.Value Then
                Me.clt.AddItem ActiveCell.Offset(cpt, 1).Value
            End If
     
            cpt = cpt + 1
        Loop
    End Sub
    Pour mieux comprendre, je te met le fichier avec le form et tout ce qui va avec.

    Bonne utilisation.

  3. #3
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir le fil, bonsoir le forum,

    Une autre proposition. Il te faut créer une Userform avec deux comboboxes nommées ComboBox1 et ComboBox2 et le code ci-dessous :

    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
    Private P As Worksheet 'déclare la variable P (onglet Produits)
    Private C As Worksheet 'déclare la variable C (onglet Clients)
    Private TP As Variant 'déclare la variable TP (Tableau des Produits)
    Private TC As Variant 'déclare la variable TC (Tableau des Clients)
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Set P = Sheets("produits") 'définit l'onglet P
    Set C = Sheets("clients") 'définit l'onglet C
    TP = P.Range("A1").CurrentRegion 'définit le tableau des produits TP
    TC = C.Range("A1").CurrentRegion 'définit le tableau des clients TC
    Me.ComboBox1.List = Application.Index(TP, , 2) 'alimente la ListBox1 avec la seconde colonne du tableau des produits TP
    Me.ComboBox1.RemoveItem (0) 'supprime de la ComboBox1 l'étiquette "Nom en clair"
    End Sub
     
    Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
    Dim I As Integer 'déclare la variable I (Incrément
     
    Me.ComboBox2.Clear 'vide la ComboBox2
    For I = 2 To UBound(TC, 1) 'boucle sur toutes les lignes I du tableau des clients TC
        'si la donnée ligne I colonne 1 de TC est égale à la valeur de la ComboBox1, ajoute la donnée ligne I colonne 2 de TC à la ComboBox2
        If TC(I, 1) = Me.ComboBox1.Value Then Me.ComboBox2.AddItem TC(I, 2)
    Next I 'prochaine ligne de la boucle
    End Sub

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut
    Salut Jerome, salut tautheme !

    Je viens de me pencher sur le code, j'avais réalisé quelque chose de semblable auparavant. Mais là ou je coince vraiment c'est pour récupérer les donnes de la ligne correspondante en fait.

    Meme si je choisis le xième item, la combo box me retourne un list index à 1 ou 2 suivant l'ordre du client.. et non les infos de la xième ligne...

    Je sais pas comment m'expliquer du coup, j'tenvois un bout de code :
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Août 2004
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 53
    Par défaut
    Salut a tous,

    Je viens de créer deux tables, table_produits et table_clients, puis j'ai créé une relation dans excel. Bon je suis pas plus avancé, je vois pas du tout ce que je peux faire maintenant.... Au moins j'aurais trouvé un truc.... servant pas a grand chose dans l immédiat...

  6. #6
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    Essaie comme ça. Le numéro de ligne est stocké dans une colonne masquée de la ComboBox2. En sélectionnant un élément de la ComboBox2 on récupère le numéro de ligne de ce dernier dans la colonne masquée :


    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
    Private TP As Worksheet 'déclare la variable TP (onglet TestProduits)
    Private TC As Worksheet 'déclare la variable TC (onglet TestClients)
    Private TdP As Variant 'déclare la variable TdP (Tableau des Produits)
    Private TdC As Variant 'déclare la variable TdC (Tableau des Clients)
    Dim Enregistrement_Courant As Long  ' Enregistrement en cours
     
    Private Sub UserForm_Initialize() 'à l'initialisation de l'UserForm
    Set TP = Sheets("testproduits") 'définit l'onglet TP
    Set TC = Sheets("testclients") 'définit l'onglet TC
    TdP = TP.Range("A1").CurrentRegion 'définit le tableau des produits TdP
    TdC = TC.Range("A1").CurrentRegion 'définit le tableau des clients TdC
    Me.ComboBox2.ColumnCount = 2 'définit le nombre de colonnes de la ComboBox2
    Me.ComboBox2.ColumnWidths = ";0" 'masque la seconde colonne de la ComboBox2
    Me.ComboBox1.List = Application.Index(TdP, , 1) 'alimente la ListBox1 avec la première colonne du tableau des produits TdP
    Me.ComboBox1.RemoveItem (0) 'supprime de la ComboBox1 l'étiquette "Code produit"
    End Sub
     
    Private Sub ComboBox1_Change() 'au changement dans la ComboBox1
    Dim I As Integer 'déclare la variable I (Incrément
     
    Me.ComboBox2.Clear 'vide la ComboBox2
    For I = 2 To UBound(TdC, 1) 'boucle sur toutes les lignes I du tableau des clients TdC (en partant de la seconde)
        If TdC(I, 1) = Me.ComboBox1.Value Then 'condition : si la donnée ligne I colonne 1 de TdC est égale à la valeur de la ComboBox1
            With Me.ComboBox2 'prend en compte la ComboBox2
                .AddItem TdC(I, 2) 'ajoute la donnée ligne I colonne 2 de TdC dans la première colonne de la ComboBox2 (colonne 0)
                .Column(1, .ListCount - 1) = I 'place le numéro de la ligne dans la seconde colonne cachée (colonne 1)
            End With 'fin de la prise en compte de la ComboBox2
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    End Sub
     
    Private Sub ComboBox2_Change() 'au changement dans la ComboBox2
    Dim LI As Integer 'déclare la variable LI (LIgne)
     
    With Me.ComboBox2 'prend en compte la ComboBox2
        LI = .Column(1, .ListIndex) 'définit la variable LI (récupère la valeur dans la seconde colonne cachée de la ComboBox2)
    End With 'fin de la prise en compte de la ComboBox2
    For I = 1 To 5 'boucle sur les 5 TextBoxes
        Me.Controls("TextBox" & I).Value = TdC(LI, I + 2) 'récupère la donnée ligne LI colonne I + 2 tu tableau des clients TdC
    Next I 'prochaine Textbox de la boucle
    End Sub

  7. #7
    Expert éminent

    Profil pro
    Conseil, Formation, Développement - Indépendant
    Inscrit en
    Février 2010
    Messages
    8 566
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Conseil, Formation, Développement - Indépendant

    Informations forums :
    Inscription : Février 2010
    Messages : 8 566
    Par défaut
    Bonjour
    Citation Envoyé par kressano Voir le message
    Salut a tous,
    Je viens de créer deux tables, table_produits et table_clients, puis j'ai créé une relation dans excel. Bon je suis pas plus avancé, je vois pas du tout ce que je peux faire maintenant.... Au moins j'aurais trouvé un truc.... servant pas a grand chose dans l immédiat...
    La relation a balancé les données dans le modèle de données de PowerPivot : le seul intérêt est la réalisation de tableaux croisés dynamiques avec PowerPivot.

    Aucune utilité ici et si j'ai bien compris et cela va alourdir ton classeur inutilement.

Discussions similaires

  1. Relation pere fils dans une meme table
    Par tongo dans le forum Hibernate
    Réponses: 1
    Dernier message: 12/07/2010, 09h35
  2. Relation pere fils
    Par Jordmund dans le forum Modélisation
    Réponses: 1
    Dernier message: 21/11/2007, 10h44
  3. DataGrid relation pere/fils
    Par TheBlackReverand dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 03/01/2007, 18h08
  4. modeliser relation pere fil
    Par flawer dans le forum Débuter
    Réponses: 20
    Dernier message: 12/12/2005, 11h59
  5. Hibernate et les relations pere/enfant
    Par kurkLord dans le forum Hibernate
    Réponses: 6
    Dernier message: 19/01/2005, 04h37

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