Cumul de deux événements dans une même feuille
Bonjour le forum,
Suite à mon précédent post (https://forum.excel-pratique.com/post284046.html#p284046), j'ai obtenu une macro qui permet, via un événement Private Sub Worksheet_Change, de copier le contenu de cellules dans d'autres colonnes de la même feuille.
Je voudrais, dans la même feuille, que la valeur d'une liste déroulante (en B33) change, en fonction de la valeur d'une cellule alimentée automatiquement (en l'occurrence B15).
J'ai la macro qui va bien. Le problème est qu'elle se déclenche avec un événement Private Sub Worksheet_SelectionChange et que les deux événements ne peuvent pas "cohabiter" dans la même feuille.
Voici le code correspondant à mes deux événements cumulés :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Pl, Pl2 As Range 'déclare la variable Pl (Plage)
Dim i, Col As Long
If Target.Count > 1 Then Exit Sub
Set Pl = Application.Union(Range("B29:B35"), Range("B37:B42")) 'définit la plage Pl
If Not Application.Intersect(Target, Pl) Is Nothing And Target.Value <> "" Then 'si le changement a lieu ailleurs que dans la plage Pl, la macro sort de la procédure
'Copie de la cellule de la plage dans la première colonne vide de la même ligne après la colonne L
MsgBox "Vos données vont être sauvegardées et vous allez pouvoir en renseigner d'autres du même type." & vbLf & vbLf & "Si vous n'avez pas d'autres informations de ce type à insérer, vous pouvez passer à la ligne suivante.", vbOKOnly + vbInformation, _
"InfoShop"
Col = Cells(Target.Row, Columns.Count).End(xlToLeft).Column + 1
Target.Offset(0, 1).Copy
Cells(Target.Row, Col).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "OPERATEUR" Then
[B33] = "B"
End If
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "DIRECTRICE" Then
[B33] = "L"
End If
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "TECHNICIEN" Then
[B33] = "A"
End If
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "COMPTABLE" Then
[B33] = "D"
End If
End SubQuelqu'un pourrait-il me dire comment je peux faire pour que les deux événements puissent fonctionner sur la même feuille ?
La solution n'est peut-être pas compliquée, mais je ne suis pas un pro des macros (loin de là !).
Je joins aussi un fichier test. Les données étant anonymisées, il ne veut pas dire grand chose.
Merci d'avance.
Cordialement.
Je ne vois pas pourquoi ne pourraient ils pas être dans une même feuille...
Le problème c'est que tu ne fermes pas ton sub
Private Sub Worksheet_Change(ByVal Target As Range)Ferme le comme ici
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Pl, Pl2 As Range 'déclare la variable Pl (Plage)
Dim i, Col As Long
If Target.Count > 1 Then Exit Sub
Set Pl = Application.Union(Range("B29:B35"), Range("B37:B42")) 'définit la plage Pl
If Not Application.Intersect(Target, Pl) Is Nothing And Target.Value <> "" Then 'si le changement a lieu ailleurs que dans la plage Pl, la macro sort de la procédure
'Copie de la cellule de la plage dans la première colonne vide de la même ligne après la colonne L
MsgBox "Vos données vont être sauvegardées et vous allez pouvoir en renseigner d'autres du même type." & vbLf & vbLf & "Si vous n'avez pas d'autres informations de ce type à insérer, vous pouvez passer à la ligne suivante.", vbOKOnly + vbInformation, _
"InfoShop"
Col = Cells(Target.Row, Columns.Count).End(xlToLeft).Column + 1
Target.Offset(0, 1).Copy
Cells(Target.Row, Col).PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _
xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End If
End sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "OPERATEUR" Then
[B33] = "B"
End If
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "DIRECTRICE" Then
[B33] = "L"
End If
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "TECHNICIEN" Then
[B33] = "A"
End If
If Target.Address = "$B$7" And Target.Count = 1 And [B15] = "COMPTABLE" Then
[B33] = "D"
End If
End SubBonjour EngueEngue,
Merci pour ta réponse.
J'ai ajouté le "End Sub" et l'événement SelectionChange ne fonctionne pas très bien.
Il reste bloqué sur une valeur, j'ai une incompatibilité de type sur la première ligne de l'événement, la fonction RECHERCHE bugge ...
Je joins mon fichier test actualisé. Si tu peux y regarder ...
Merci d'avance.
Cordialement.
il n'y a aucune recherche
Si, si, la fonction RECHERCHE est dans la cellule B15.
A +
Si tu penses que je vais m'amuser à essayer de comprendre ton fichier brouillon pour t'aider tu rêves. Si tu exposes un problème précis je veux bien y jetter un oeil, sinon A+
Re-,
Désolé, mon fichier était effectivement très peu explicite ! Cool !
Je l'ai donc modifié pour qu'il soit compréhensible, tout en restant anonymisé.
Comme tu pourras le voir, le premier évenement (Change) fonctionne très bien.
En revanche, malgré le End Sub, SelectionChange ne marche pas. Pour info, quand je me place sur la cellule B7, l'événement Change se déclenche.
Ce que je voudrais, c'est que si mon agent est, par exemple, "OPERATEUR", la liste déroulante de B33 se mette automatiquement sur "Code 618" (voir les autres cas dans la macro). Après, il y a des formules (que je n'ai pas mises) qui calculent automatiquement ce "Code 618".
La cellule B7 est une recopie de B5, c'est normal. La feuille est protégée par mot de passe et, comme l'utilisateur tape les premières lettres du nom en B5, c'est le seul moyen que j'ai trouvé pour que ça ne bloque pas.
Merci d'avance.
A +
Tu confonds les événements selection change et change
Change se déclenche quand tu rentres dans une cellule, tu modifies une valeur et tu en sors
Selection_change se déclenche quand la cellule active change.
Ce n'est toujours pas assez explicite.