Modifier une macro de façon qu'elle est utilisable sur plusieurs feuilles
2 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
'-------------------------------------------
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
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
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
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