Plusieurs macro sur une feuille excel ?

AMISDAL Messages postés 173 Statut Membre -  
AMISDAL Messages postés 173 Statut Membre -
Bonjour,
Je dois mettre plusieurs macro pour la meme feuille excel le problème c'est que les deux ont le meme nom, l'application ne fonctionne donc pas et il me marque "nom ambigu" et me surligne :
Private Sub Worksheet_Change(ByVal Target As Range)
Comment faut il faire ?
Merci de m'expliquer car je pense que dans ce tableau j'aurais d'autre macro a ajouter.
Merci d'avance

A voir également:

10 réponses

mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
Il ne peut y avoir qu'un seul Private sub worksheet par feuille.
Il faut combiner les deux macros en une seule.

Michel
1
Thedrake Messages postés 683 Statut Membre 132
 
Salut

Tu peux toujours modifier le nom d'une des macro, et de modifier à l'intérieur tout ce qui se référait à ce nom (peut être un gros boulot pour les longues macro)
0
AMISDAL Messages postés 173 Statut Membre 2
 
Cela ne marche toujours pas. Voici mes deux macro


Private Sub Worksheet_Change(ByVal Target As Range)
Dim cTitres, cdebuts, cfins
Dim pl As Long, col As Long, ok As Boolean
' saisir les n° des colonnes des plages à contrôler
cTitres = Array(1, 8) 'colonnes titre
cdebuts = Array(2, 9) ' colonnes début des plages
cfins = Array(5, 12) ' colonnes fin des plages

' détection si dans plages
For pl = 0 To UBound(cTitres)
If Target.Column >= cdebuts(pl) And Target.Column <= cfins(pl) Then Exit For
Next pl
If pl > UBound(cTitres) Then Exit Sub

' recherche "x"
For col = cfins(pl) To cdebuts(pl) Step -1
If LCase(Cells(Target.Row, col)) = "x" Then
Cells(Target.Row, cTitres(pl)).Interior.ColorIndex = Cells(1, col).Interior.ColorIndex
ok = True
Exit For
End If
Next col
If Not ok Then Cells(Target.Row, cTitres(pl)).Interior.ColorIndex = xlNone
End Sub

Et la deuxième :


Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Intersect(Target, Range("B2:B10,F2:F10")) Is Nothing Then Exit Sub
Target.Offset(0, -1) = Now
End Sub

Merci de me donner la solution car je ne suis vraiment pas fortiche pour les macros mais j'adore les utiliser !!
0
AMISDAL Messages postés 173 Statut Membre 2
 
Et comment ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Bonjour,
Faut déterminer la cellule qui a été modifiée et agir en conséquence.
Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, LaPlage1) Is Nothing Then
        '1er code Macro
    ElseIf Not Intersect(Target, LaPlage2) Is Nothing Then
        '2ém code Macro
    End If
End Sub

A+
0
AMISDAL Messages postés 173 Statut Membre 2
 
La deuxieme macro ne concerne aucunne des cellules de la premiere macro
0
mic13710 Messages postés 1165 Date d'inscription   Statut Membre Dernière intervention   360
 
Je pense que la solution de lermite est suffisamment claire.
Il ne peut y avoir qu'un seul Private sub worksheet_change pour la feuille.
Donc, il suffit de surveiller la première condition et si elle est exacte on exécute la macro 1 sinon, on vérifie la deuxième condition et si elle est exacte on exécute la macro 2. On peut y mettre autant d'autres conditions que l'on souhaite et si aucune est exacte, on sort de la macro.

Michel
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
J'ai pas compris les adresses de ta 1ère macro mais voilà un exemple...
Private Sub Worksheet_Change(ByVal Target As Range) 
Dim Col As Integer 
    If Not Intersect(Target.Columns, Columns("A:H")) Is Nothing Then 
        '1er code - recherche "x" 
        For Col = 8 To 1 Step -1 
            If LCase(Cells(Target.Row, Col)) = "x" Then 
                Target.Interior.ColorIndex = Cells(1, Col).Interior.ColorIndex 
                Exit For 
            End If 
        Next Col 
        If Col = 0 Then Target.Interior.ColorIndex = xlNone 
     
    ElseIf Not Intersect(Target, Range("B2:B10,F2:F10")) Is Nothing Then 
        '2ém code 
        Target.Offset(0, -1) = Now 
    End If 
End Sub

A+
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Ou dans l'autre sens ...
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Col As Integer
    If Not Intersect(Target, Range("B2:B10,F2:F10")) Is Nothing Then
        '2ém code
        Target.Offset(0, -1) = Now
    ElseIf Not Intersect(Target.Columns, Columns("A:H")) Is Nothing Then
        '1er code - recherche "x"
        For Col = 8 To 1 Step -1
            If LCase(Cells(Target.Row, Col)) = "x" Then
                Target.Interior.ColorIndex = Cells(1, Col).Interior.ColorIndex
                Exit For
            End If
        Next Col
        If Col = 0 Then Target.Interior.ColorIndex = xlNone
    End If
End Sub

0
AMISDAL Messages postés 173 Statut Membre 2
 
Les adresses de la première macro sont des cellules réparties tout le long du tableau et qui ont une action sur la première cellule
0
AMISDAL Messages postés 173 Statut Membre 2
 
Plus exactement quand j'interviens sur une cellule( par exemple G5), la couleur du titre (par exemple G1) se reporte sur la couleur de la première cellule (par exemple A5)
0
AMISDAL Messages postés 173 Statut Membre 2
 
Quelle adresse dois je mettre : la cellule d'intervention, la cellule de donnée ou la cellule de reception (elle sont toutes séparées par d'autres cellules)
Merci
0
lermite222 Messages postés 9042 Statut Contributeur 1 191
 
Pour ça faut juste changer la ligne (comme tu l'a mis dans ton exemple)
Cells(Target.Row, 1).Interior.ColorIndex = Cells(1, Col).Interior.ColorIndex

Juste dans tes plages, dans l'exemple que je t'ai donner il y a "recouvrement", donc ça peu pas aller convenablement.
Quel est la plage de la macro qui change les couleurs. ?
L'expérience instruit plus sûrement que le conseil. (André Gide)
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
0
AMISDAL Messages postés 173 Statut Membre 2
 
Pour plus de clarté, j'ai mis un fichier test joint.
Explication :
Quand je mets une croix dans les colonnes oou est indiqué une couleur, la cellule dans la colonne titre se met de la meme couleur.
Et quand je mets une croix dans la colonne fait, la date du jour s'inscrit dans la colonne date

http://www.cijoint.fr/cjlink.php?file=cj201102/cijYzOGo2f.xls
0