Plusieurs macro sur une feuille excel ?
AMISDAL
Messages postés
173
Statut
Membre
-
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
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:
- Plusieurs macro sur une feuille excel ?
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Feuille de pointage excel - Télécharger - Tableur
- Déplacer une colonne excel - Guide
10 réponses
Il ne peut y avoir qu'un seul Private sub worksheet par feuille.
Il faut combiner les deux macros en une seule.
Michel
Il faut combiner les deux macros en une seule.
Michel
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)
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)
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 !!
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 !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Faut déterminer la cellule qui a été modifiée et agir en conséquence.
A+
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+
La deuxieme macro ne concerne aucunne des cellules de la premiere macro
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
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
J'ai pas compris les adresses de ta 1ère macro mais voilà un exemple...
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.
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.
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
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
Pour ça faut juste changer la ligne (comme tu l'a mis dans ton exemple)
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.
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.
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
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