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

10 réponses

  1. 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
  2. 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
  3. 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
  4. AMISDAL Messages postés 173 Statut Membre 2
     
    Et comment ?
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  7. AMISDAL Messages postés 173 Statut Membre 2
     
    La deuxieme macro ne concerne aucunne des cellules de la premiere macro
    0
    1. 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
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  9. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
  10. 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
    1. 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
    2. 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
  11. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. 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