Affichage de valeurs en fonction de 2 ComboBox Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
Avatar du membre
Dzyal
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 10 décembre 2018
Version d'Excel : Professionnel Plusc2016

Message par Dzyal » 10 décembre 2018, 12:23

Bien le bonjour,

Nouvellement inscrite, je croise les doigts pour pouvoir trouver des réponses à mes questions parmi vous! :lole:

Pour vous expliquer mon problème, je suis actuellement en train de travailler sur un projet de planning de production.
J'ai créé un formulaire en UserForm qui permet de renvoyer les données selon la ligne de production (il y en a 4 en tout) et selon la période (matin ou après-midi) ; ces données seront renvoyées sur des feuilles masquées par la suite pour une facilité de lecture.
Je souhaitais avoir une feuille principale "Planning" sur laquelle il serait possible d'afficher les valeurs de mes différentes autres feuilles à l'aide de 2 ComboBox (Contrôles ActiveX) : l'un pour le choix du poste, l'autre pour le choix de la ligne.

Je bloque sur le fait d'avoir les valeurs en direct dès qu'il y a changement de la valeur des ComboBox.
Je sais qu'il est possible de procéder à un "Private Sub CBPoste_Change()" par exemple mais comment prendre en compte le changement du n° de ligne sur l'autre ComboBox? Est-ce possible de rendre ça simultané?

Voilà mon code actuel pour le renvoi de données :
Private Sub CBLigne_Change()
If CBPoste = "M" And CBLigne = "1" Then
Worksheets("Ligne 1 M").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61") 
End If

If CBPoste = "AM" And CBLigne = "1" Then
Worksheets("Ligne 1 AM").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If

If CBPoste = "M" And CBLigne = "2" Then
Worksheets("Ligne 2 M").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If

If CBPoste = "AM" And CBLigne = "2" Then
Worksheets("Ligne 2 AM").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If

If CBPoste = "M" And CBLigne = "3" Then
Worksheets("Ligne 3 M").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If

If CBPoste = "AM" And CBLigne = "3" Then
Worksheets("Ligne 3 AM").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If

If CBPoste = "M" And CBLigne = "4" Then
Worksheets("Ligne 4 M").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If

If CBPoste = "AM" And CBLigne = "4" Then
Worksheets("Ligne 4 AM").Range("A7:L56").Copy Worksheets("Planning").Range("B12:M61")
End If
À savoir qu'il se peut qu'il y ait un moyen plus facile de faire ce que je voudrais (avec des listes déroulantes classiques) mais c'est un projet que je dois rendre également en cours pour lequel on doit utiliser du VBA à gogo... :rond: Donc je ne me facilite pas la vie volontairement.

J'espère que vous aurez des solutions pour moi ! Je peux toujours transmettre le fichier si nécessaire pour un meilleur visuel.

Merci d'avance! :mrgreen:
M
MFerrand
Fanatique d'Excel
Fanatique d'Excel
Messages : 17'203
Appréciations reçues : 445
Inscrit le : 20 juillet 2015
Version d'Excel : 2010 FR

Message par MFerrand » 10 décembre 2018, 14:39

Bonjour,

Indenter correctement ton code serait déjà te faciliter la vie pour l'avenir... :mrgreen:
Sub ChangePosteLigne()
    Dim wsPL$, P$, L%
    P = CBPoste.Value
    L = Val(CBLigne.Value)
    If (P = "M" Or P = "AM") And (L > 0 And L < 5) Then
        wsPL = "Ligne " & L & " " & P
        Worksheets("Planning").Range("B12:M61").Value = Worksheets(wsPL).Range("A7:L56").Value
    End If
End Sub

Private Sub CBLigne_Change()
    ChangePosteLigne
End Sub

Private Sub CBPoste_Change()
    ChangePosteLigne
End Sub
Cordialement.
Avatar du membre
Dzyal
Nouveau venu
Nouveau venu
Messages : 2
Inscrit le : 10 décembre 2018
Version d'Excel : Professionnel Plusc2016

Message par Dzyal » 10 décembre 2018, 14:48

MFerrand a écrit :
10 décembre 2018, 14:39
Bonjour,

Indenter correctement ton code serait déjà te faciliter la vie pour l'avenir... :mrgreen:
Sub ChangePosteLigne()
    Dim wsPL$, P$, L%
    P = CBPoste.Value
    L = Val(CBLigne.Value)
    If (P = "M" Or P = "AM") And (L > 0 And L < 5) Then
        wsPL = "Ligne " & L & " " & P
        Worksheets("Planning").Range("B12:M61").Value = Worksheets(wsPL).Range("A7:L56").Value
    End If
End Sub

Private Sub CBLigne_Change()
    ChangePosteLigne
End Sub

Private Sub CBPoste_Change()
    ChangePosteLigne
End Sub
Cordialement.
Bonjour MFerrand, mille mercis pour ta réponse! :D Ça fonctionne nickel.
J'avoue que mon code n'est pas optimisé, à vrai dire notre cours de VBA consiste à tout apprendre via Internet, alors c'est un peu brut de décoffrage on va dire :oops:
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message