Affichage de valeurs en fonction de 2 ComboBox

Bien le bonjour,

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

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... 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!

Bonjour,

Indenter correctement ton code serait déjà te faciliter la vie pour l'avenir...

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,

Indenter correctement ton code serait déjà te faciliter la vie pour l'avenir...

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! Ç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

Rechercher des sujets similaires à "affichage valeurs fonction combobox"