Exclure une zone d'une macro

Résolu
Elyss -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Je me permet de demander votre aide dans l'écriture d'une macro Excel qui me pose problème.
J'ai dans un tableau Excel une macro qui consigne automatiquement dans les colonnes T et U la date et l'heure de modification d'une ligne. Lorsqu'un utilisateur modifie la valeur d'une cellule sur une ligne, la date et l'heure de ce changement sur la ligne sont consignés, ainsi que la date et l'heure de l'éventuel changement précédent.
J'utilise pour celà le code suivant:
Private Sub Worksheet_Change(ByVal sel As Range)



Application.EnableEvents = False

Cells(sel.Row, "U").Value = Cells(sel.Row, "T").Value

Application.EnableEvents = True


Application.EnableEvents = False

Cells(sel.Row, "T").Value = Date + Time

Application.EnableEvents = True


End Sub

Mais le problème c'est que je veux pouvoir modifier les titres de mes colonnes sans déclencher la macro dans la ligne des titres. Ni dans les lignes qui se trouvent au dessus du tableau et qui servent à consigner des informations diverses.
Du coup, je cherche le moyen de faire en sorte que la macro ne se déclenche pas pour les lignes 1 à 9 de mon tableau, mais se déclenche systématiquement pour les autres.

Si quelqu'un pouvait m'indiquer comment créer cette condition dans ma macro, je lui serais très reconnaissant.

Merci par avance!

1 réponse

  1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,

    Regarde ceci :
    If Intersect(Target, Range("D5:M26")) Is Nothing Then
       MsgBox "ici tu es dans la zone non concernée par la macro"
    Else
       MsgBox "ici tu es dans la zone concernée par la macro"
    End If

    0
    1. Elyss
       
      J'avais essayé quelque chose comme ça en effet, mais j'obtiens l'erreur 424 "Objet requis". Voici le code modifié qui me renvoi l'erreur :

      Private Sub Worksheet_Change(ByVal sel As Range)
      
      If Intersect(Target, Range("A1:Z9")) Is Nothing Then
      
      Else
      
      Application.EnableEvents = False
      
      Cells(sel.Row, "U").Value = Cells(sel.Row, "T").Value
      
      Application.EnableEvents = True
      
      
      Application.EnableEvents = False
      
      Cells(sel.Row, "T").Value = Date + Time
      
      Application.EnableEvents = True
      
      End If
      End Sub


      Et donc erreur...
      0
      1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Elyss
         
        1-Lorsque vous placez du code sur notre forum, merci d'utiliser les balises code à votre disposition.
        Le mode d'emploi (au cas ou) est ICI.

        2- dans la ligne de déclaration vous indiquez sel As Range et ensuite essayez d'utiliser Target... Pas possible.
        Private Sub Worksheet_Change(ByVal sel As Range)
        
        If Intersect(sel, Range("A1:Z9")) Is Nothing Then
        
        Else
        
        Application.EnableEvents = False
        
        Cells(sel.Row, "U").Value = Cells(sel.Row, "T").Value
        
        Application.EnableEvents = True
        
        
        Application.EnableEvents = False
        
        Cells(sel.Row, "T").Value = Date + Time
        
        Application.EnableEvents = True
        
        End If
        End Sub
        0
      2. Elyss > pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Oh, pardon pour les balises code, je n'avais aucune idée de leur existence.
        Mais merci beaucoup pour la solution, ça fonctionne effectivement ! Du moins, à l'envers en fait, mais il m'a suffit d'inverser de la façon suivante:

        Private Sub Worksheet_Change(ByVal sel As Range)
        
        If Intersect(sel, Range("A1:Z9")) Is Nothing Then
        Application.EnableEvents = False
        
        Cells(sel.Row, "U").Value = Cells(sel.Row, "T").Value
        
        Application.EnableEvents = True
        
        
        Application.EnableEvents = False
        
        Cells(sel.Row, "T").Value = Date + Time
        
        Application.EnableEvents = True
        
        Else
        
        
        
        End If
        End Sub


        C'est donc parfait! encore merci !
        0
      3. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773 > Elyss
         
        Oh, pardon pour les balises code, je n'avais aucune idée de leur existence.
        Aucun souci. C'est tout de même mieux avec...
        Du moins, à l'envers en fait, mais il m'a suffit d'inverser
        Pourtant ma première réponse était à l'endroit...vue de mon côté ;-)

        Bonne fin de journée
        0