Plusieurs macro sur une feuille excel ?

Fermé
AMISDAL Messages postés 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 - 10 févr. 2011 à 10:55
AMISDAL Messages postés 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 - 14 févr. 2011 à 15:51
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 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
14 févr. 2011 à 09:34
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 531 Date d'inscription samedi 14 mars 2009 Statut Membre Dernière intervention 28 février 2013 132
10 févr. 2011 à 11:03
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 09:08
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 09:43
Et comment ?
0

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

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 févr. 2011 à 09:50
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 10:26
La deuxieme macro ne concerne aucunne des cellules de la premiere macro
0
mic13710 Messages postés 1088 Date d'inscription samedi 26 novembre 2005 Statut Membre Dernière intervention 13 mai 2021 354
14 févr. 2011 à 11:02
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 14/02/2011 à 11:43
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
14 févr. 2011 à 11:42
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 11:55
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 11:59
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 12:09
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 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
Modifié par lermite222 le 14/02/2011 à 12:11
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 162 Date d'inscription lundi 24 août 2009 Statut Membre Dernière intervention 24 mars 2016 2
14 févr. 2011 à 15:51
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