appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

micky01

XLDnaute Occasionnel
Bonjour à tous,
Je dois appliquer une macros à chaque changement de cellule dans plusieurs feuille.

Cette macros est identique quelle que soit la feuille.

Suis-je obligé de réécrire la macros intégrale dans chaque feuille ou puis-je faire appel à une macros située dans un module?

Code:
Private Sub Worksheet_selectionchange(ByVal Target As Range)

call ma_macro_dans_module

End Sub

Merci par avance,
 
G

Guest

Guest
Re : appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

bonjour,

Sans plus de précision dans la demande:

mettre dans le module thisWorkbook:

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
ma_macro_dans_module
End Sub
Où Sh représente la feuille sur laquelle la sélection est intervenue.


A+
 

micky01

XLDnaute Occasionnel
Re : appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

En fait, toutes les feuilles du classeur ne sont pas concernées.
Plus de précision alors :

ma macro est la suivante :

Code:
Private Sub Worksheet_selectionchange(ByVal Target As Range)
Dim pl As Range 'déclare la variable pl
Dim c As Range 'déclare la variable c
For Each c In Target
    If c.Locked = True Then
       If c = "" Then
            If c.MergeCells = True Then
                Set pl = c.MergeArea 'définit la plage pl
            
                c.UnMerge 'défusionne la cellule
                c.Locked = False 'verrouille la cellule
                pl.Merge 'fusionne la plage pl
                Exit Sub
            Else
            c.Locked = False
            Exit Sub
            End If
       Else: Exit Sub
       End If
    Else
    If c <> "" Then
    
      If c.MergeCells = True Then
            Set pl = c.MergeArea 'définit la plage pl
            
            c.UnMerge 'défusionne la cellule
            c.Locked = True            'verrouille la cellule
            pl.Merge 'fusionne la plage pl
            
      Else
            c.Locked = True 'verrouille la cellule
      End If
    End If
    End If

Next c

End Sub

Ca marche parfaitement si je le met dans chaque feuille concernée.

Mais j'aurais aimé n'avoir à écrire que
Code:
Private Sub Worksheet_selectionchange(ByVal Target As Range)
Call Ma_macro 'Ma_macro étant situé dans un module
End sub
dans les feuilles qui en ont besoin pour simplifier le fichier mais ça ne fonctionne pas.

Est ce un peu plus clair?

Merci
 
G

Guest

Guest
Re : appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

Re,

Où "Feuil1;Feuil2;Feuil3;Feuil4" est la liste des noms de feuilles concernées

Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
If InStr(1, "Feuil1;Feuil2;Feuil3;Feuil4", Sh.Name) > 0 Then Call ma_macro_dans_module( Target)
End Sub
Dans le module:
Code:
Sub  ma_macro_dans_module( ByVal Target As range)
'Lignes de codes de la macro

End sub

A+
 

micky01

XLDnaute Occasionnel
Re : appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

Bonjour et merci pour le retour,
Le problème est que j'ai 80 feuilles ou il faudrait mettre cette macros et 10 ou elle ne doit pas l'être.

N'est-il vraiment pas possible de mettre une macro du style
Code:
Private Sub Worksheet_selectionchange(ByVal Target As Range)

Call ma_macro_dans_module
End Sub

Il me met une erreur : "erreur de compilation, argument non facultatif".
 
G

Guest

Guest
Re : appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

Bonjour,

Eh bien tu inverses la condition:
Code:
IF InStr(1, "Feuil1;Feuil2;Feuil3;Feuil4;Feuil5;Feuil6;Feuil7; Feuil8;Feuil9; Feuil10", Sh.Name) = 0 Then
  Call la_macro_dans_module(Target)
End if
Pour le message d'erreur, il faut passer Target en argument de la macro. Sur le modèle donné plus haut

P.S. les questions à titoir où l'on découvre les contraintes au fur et à mesure et sans exemples sont pénibles. Alors pour moi, j'estime avoir largement répondu à la question de départ.

A+
 

micky01

XLDnaute Occasionnel
Re : appel à une macro dans Private Sub Worksheet_selectionchange(ByVal Target)

Je te remercie,
J'ai résolu mon problème.
En ce qui concerne l'exemple, toute ma macro est indiquée plus haut.

Bonne journée
PS : Je ne t'ai pas forcé à me répondre, si tu estimais que je ne méritais pas de réponse à cause du manque d'information de départ.
 

Discussions similaires

Statistiques des forums

Discussions
312 468
Messages
2 088 682
Membres
103 919
dernier inscrit
BOB66500