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