Récupération valeurs d'une colonne variable
Bonjour !
Me revoilà ! Cela faisait un bon mois que je n'ai pas donné de nouvelle.
Je solicite à nouveau votre aide en remerciant chaleureusement toutes les personnes qui m'ont aide la fois d'avant !
Aujourd'hui je souhaite récupérer des données d'une colonne variable
Je m'explique :
J'ai une liste d'entreprise que j'ai ordonné en ligne (Entreprise 1 / Entreprise 2 / Entreprise 3 / etc).
Dans chaque entreprise, il y a des contacts de référence.
J'ai réussi à coder la partie recherche entreprise, mais pas la partie récuperation des contacts de cette entreprise.
Autre explication plus parlante :
Je recherche les contacts de l'entreprise "P'tit poucet" qui correspond à la colonne G.
Je souhaite donc récupérer tous les contacts de G3 à G10
Sachant que la colonne n'est jamais fixe ! Car si je recherche l'entreprise "Les pros d'excel" qui correspond à la colonne I cette fois, il faut aussi que je puisse récupérer les contacts de I3 à I10 et seulement ces contacts là.
Les noms des contacts seront stockés dans un menu déroulant par la suite.
Voici le code qui permet la recherché de l'entreprise :
Private Sub Client_Change() 'Configuration menu déroulant contact client
Dim C1, C2 As Variant
For Each C1 In Sheets("Feuille_donnees").Range("B2:BB2") 'Recherche l'entreprise
If C1.Value = Client Then 'Verifie que le nom correspond aux entreprises de références
'Ici le code qui permettra de récupérer les contacts de référence dans la même colonne que C1
'Je sais que .Cells(C1.Row, "B") permet de récupérer les données sur la même ligne, colonne B
'J'ai essayé .Cells(C1.Column, 10) mais ça ne me donne absolument rien :/
End If
Next C1
End SubMerci pour vos retours !
Bonne journée !
Bonsoir Zepn,
je souhaite récupérer des données d'une colonne variable
2 exemples : G3 à G10 ; I3 à I10
Puisque c'est variable, VBA ne peut pas deviner l'emplacement !
Je te propose cette solution : regarde d'abord quelle est la colonne de départ qui revient le plus souvent ; je vais supposer ici que c'est I ; ajoute une colonne à droite de ta colonne "Entreprise" et nomme-la "d" pour "décalage" (horizontal) ; quand la cellule est vide, ça vaut 0, donc c'est déjà ok pour ta recherche du 1er contact, en Cells(C1.Row, 9).Offset(, d) ; pour les lignes où c'est différent de I, mets un nombre négatif ou positif en colonne "d", selon le décalage ; ainsi, pour la ligne où le 1er contact est en G3, tu devras mettre -1 ; si le 1er contact est en L3, tu devras mettre 3 (car 3 colonnes à droite de I).
S'il n'y avait qu'un seul contact, on pourrait s'arrêter là ; mais comme il y en a plusieurs, voyons la suite : si ton nombre de contacts est toujours le même, par exemple 8, il suffit de toujours prendre les 8 valeurs depuis la cellule du 1er contact (quitte à en ignorer le contenu s'il est vide) ; note que j'ai pris 8 car il y a bien 8 contacts pour tes 2 exemples G3:G10 et I3:I10.
Si le nombre de contacts est variable, ajoute une autre colonne à droite de la colonne "d", de nom "n" ; si tu laisses vide (= 0), ça correspondra à ton nombre de contacts le plus courant : 8 ; si 5 contacts seulement, mettre -3 ; si 15 contacts, mettre 7 ; il faudra prendre en compte ce nombre de contact : 8 + n ; ainsi : 8 + 7 = 15 et 8 + (-3) = 8 - 3 = 5.
À toi de faire le reste...
Cordialement
J'ai absolument rien compris.
Le code que j'ai fourni permet déjà de récupérer l'entreprise. Il balaye de B2 à BB2 et ça marche très bien.
Les colonnes ne changeront pas. Le client B sera en colonne B, le client E en E, etc.
Edit : J'ai trouvé la solution finalement :
For Each C1 In Sheets("Contacts").Range("B2:BB2") 'Recherche l'entreprise
If C1.Value = Client Then 'Verifie que le nom correspond aux entreprises de références
For Each C2 In Sheets("Contacts").Range("B3:BB" & Sheets("Contacts").Range("B50").Row) 'Recherche contact
If C2.Value <> "" Then
If C2.Column = C1.Column Then
Customer.AddItem C2.Value
End If
End If
Next C2
End If
Next C1