OVH Cloud OVH Cloud

Modifier une macro de façon qu'elle est utilisable sur plusieurs feuilles

2 réponses
Avatar
totontitus
Bonjour,

J'utilise cette macro que j'ai récupéré sur le net pour une liste déroulante à choix multiples, cette macro je l'ai placé sur la feuille même, elle fonctionne bien et selon mes attentes, mais ce que j'aimerais c'est de la mettre dans un module pour pouvoir l'utiliser sur plusieurs feuilles du même classeur, quelqu'un aurait-il la solution pour modifier la macro de façon qu'elle soit fonctionnelle sur plusieurs feuilles

Merci

Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("G13:K13"), Target) Is Nothing And Target.Count = 1 Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
p = InStr(Target, ValSaisie)
If p > 0 Then
Target = Left(Target, p - 1) & Mid(Target, p + Len(ValSaisie) + 4)
If Right(Target, 4) = " , " Then
Target = Left(Target, Len(Target) - 4)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & " , " & ValSaisie
End If
End If
Application.EnableEvents = True
End If
End Sub

2 réponses

Avatar
MichD
Bonjour,
Copie la procédure suivante dans le THISWORKBOOK du projetVBA du classeur.
Dans la procédure, modifie le nom des onglets des feuilles pour
lesquelles la macro doit s'appliquer.
'-------------------------------------------
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
Dim Arr(), MaFeuille As String, RG As Range
'Définis la liste des onglets des feuilles où la macro doit s'appliquer.
'Ta liste peut être aussi longue que tu veux
Arr = Array("Feuil1", "Feuil3", "Feuil5", _
"Feuil7")
MaFeuille = Sh.Name
x = Application.Match(MaFeuille, Arr, 0)
If IsNumeric(x) Then
Application.EnableEvents = False
Set RG = Target
If Not Intersect(Range("G13:K13"), RG) Is Nothing And
RG.Cells.Count = 1 Then
If RG = "" Then
Exit Sub
End If
ValSaisie = RG
Application.Undo
p = InStr(RG, ValSaisie)
If p > 0 Then
RG = Left(RG, p - 1) & Mid(RG, p + Len(ValSaisie) + 4)
If Right(RG, 4) = " , " Then
RG = Left(RG, Len(RG) - 4)
End If
Else
If RG = "" Then
RG = ValSaisie
Else
RG = RG & " , " & ValSaisie
End If
End If
End If
Application.EnableEvents = True
End If
End Sub
'-------------------------------------------
MichD
Avatar
totontitus
Le mercredi 13 Novembre 2019 à 12:52 par totontitus :
Bonjour,
J'utilise cette macro que j'ai récupéré sur le net pour
une liste déroulante à choix multiples, cette macro je l'ai
placé sur la feuille même, elle fonctionne bien et selon mes
attentes, mais ce que j'aimerais c'est de la mettre dans un module pour pouvoir
l'utiliser sur plusieurs feuilles du même classeur, quelqu'un aurait-il
la solution pour modifier la macro de façon qu'elle soit fonctionnelle
sur plusieurs feuilles
Merci
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Range("G13:K13"), Target) Is Nothing And
Target.Count = 1 Then
If Target = "" Then Exit Sub
Application.EnableEvents = False
ValSaisie = Target
Application.Undo
p = InStr(Target, ValSaisie)
If p > 0 Then
Target = Left(Target, p - 1) & Mid(Target, p + Len(ValSaisie) + 4)
If Right(Target, 4) = " , " Then
Target = Left(Target, Len(Target) - 4)
End If
Else
If Target = "" Then
Target = ValSaisie
Else
Target = Target & " , " & ValSaisie
End If
End If
Application.EnableEvents = True
End If
End Sub
Bonjour MichD, le forum
Merci beaucoup pour le coup de pouce, la modif sur la macro me convient bien et répond bien à mes attentes
Merci
Cordialement