Execution automatique d'une macro

saidtoufik Messages postés 6 Statut Membre -  
 saidtoufik -
Bonjour à Tous

J'ai mis ce code pour supprimer une plage de cellules mais pour que la macro s'exécute il faut que j'ailles sur la feuille et que je clique sur A1 pour qu'enfin la plage de cellules s'efface et ce n'est pas pratique et je ne sais pas où est l'erreur dans ce code.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address <> "$A$1" Then Exit Sub
If Range("A1").Value = 405 Then
Call supprimer
End If
End Sub

Merci

6 réponses

  1. ThauTheme Messages postés 1564 Statut Membre 160
     
    Bonsoier Saidtoufik, bonsoir le forum,

    Supprime la première ligne de ton code :

    If Target.Address <> "$A$1" Then Exit Sub 

    qui dit clairement : si A1 n'est pas la cellule active, sort de la procédure... Donc la suite du code n'est exécutée qui si tu sélectionnes A1.
    0
  2. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
     
    Bonjour,

    La macro se déclenche lorsque tu change de cellule dans ta feuille....et uniquement lorsque que tu te places sur la cellule A1 (normal puisque ton IF lui demande de faire ça !! )

    Pour la rendre automatique à l'ouverture du classeur tu dois utiliser workbook_open
    et modifier un peu ton code

    Private Sub Workbook_Open()
     Dim sh As Worksheet
     Set sh = ThisWorkbook.Sheets(1) ' ou une autre feuille.. a toi de voir
     
     With sh
      If .Range("A1").Value = 405 Then
       Call supprimer
       End If
     End With
    End Sub
    


    https://silkyroad.developpez.com/VBA/EvenementsClasseur/#LII-12
    .

    Cordialement, 
    Jordane                                                                 
    0
  3. saidtoufik
     
    Merci pour vos réponses
    Je ne veux pas que la macro s’exécute à l'ouverture du classeur mais seulement lorsque A1 prend la valeur 405 comme exemple.
    et quand j’enlève la ligne If Target.Address <> "$A$1" Then Exit Sub la macro s’exécute là où je clique aussi.
    Ce que je veux c'est quand A1=405 alors la macro s’exécute automatiquement sans y aller sur la feuille et cliquer sur la cellule .
    J’espère que c'est plus clair.
    0
    1. jordane45 Messages postés 30427 Date d'inscription   Statut Modérateur Dernière intervention   4 832
       
      Ben pour détécter un changement dans la feuille... tu dois utiliser la méthode : Worksheet_change()

      https://docs.microsoft.com/fr-fr/office/vba/api/excel.worksheet.change?redirectedfrom=MSDN

      Private Sub Worksheet_Change(ByVal Target as Range) 
          If Target.Address <> "$A$1" Then Exit Sub 
          If Range("A1").Value = 405 Then 
             Call supprimer 
          End If 
      End Sub
      
      0
  4. saidtoufik
     
    Merci Jordane45 pour la réponse .
    Oui c'est ce que j'ai fait et que j'ai posté sur mon premier message mais ça ne fonctionne que quand je clique sur la cellule A1 et seulement quand je clique sinon rien ne se passe .
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      teste d'abord...
      Jordane ne t'a pas mis la même chose.
      eric
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. saidtoufik
     
    Bonsoir Mr eriiic
    voila ce que j'ai mis :
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Target.Address <> "$A$1" Then Exit Sub
    If Range("A1").Value = 405 Then
    Call supprimer
    End If
    End Sub </bold><ital></ital>
     et voila ce qu'a mis Jordane :
    <bold>Private Sub Worksheet_Change(ByVal Target as Range) 
        If Target.Address <> "$A$1" Then Exit Sub 
        If Range("A1").Value = 405 Then 
           Call supprimer 
        End If 
    End Sub
    


    et c'est pareil et j'ai essayé avec "405" et 405 et cela a donné le mème résultat et je ne sais ou est le problème et j'ai entendu parler de :
    Declare Sub mouse_event Lib "user32" Alias "mouse_event" (ByVal dwFlags As Integer, ByVal dx As Integer, ByVal dy As Integer, ByVal cButtons As Integer, ByVal dwExtraInfo As Integer)
        Public Const MOUSEEVENTF_LEFTDOWN = &H2
        Public Const MOUSEEVENTF_LEFTUP = &H4
    


    EDIT : Ajout des balises de code (la coloration syntaxique).
    Explications disponibles ici :ICI

    Merci d'y penser dans tes prochains messages.


    mais je n'arrive pas à bien le manipuler et il me donne des messages d’erreurs du genre
    Microsoft Visual Basic for Applications
    ---------------------------
    Compile error:

    Constants, fixed-length strings, arrays, user-defined types and Declare statements not allowed as Public members of object modules
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Bonjour,

      Worksheet_SelectionChange et Worksheet_Change ce n'est pas pareil...
      Pas besoin de Declare Sub mouse_event Lib...
      Dépose ton fichier avec ce que tu as fait sur cjoint.com et colle ici le lien fourni.
      0
      1. saidtoufik > eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention  
         
        Bonjour
        Avec Private Sub Worksheet_SelectionChange(ByVal Target As Range) ça marche quand je clique sur A1 mais avec Private Sub Worksheet_Change(ByVal Target As Range) ça ne fonctionne pas
        Et voici le lien pour le fichier
        http://www.cjoint.com/c/FImjpNznyu1
        0
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      Je dois réinstaller mon PC, je vais en avoir pour qq jours et ne peux contrôler ce que tu as fait...
      Tu ne dois mettre qu'une seule procédure : Worksheet_Change().
      Comme tu as demandé déclenchement sur une saisie c'est ce que t'a proposé Jordane. il faut saisir et valider A1 pour que ça fonctionne, que ce code soit dans le module de la feuille concernée, et que tu aies accepté les macros.
      eric
      0
  7. saidtoufik
     
    Merci Eric et bonne réinstallation
    je vais essayer de mettre le module et worksheet ensemble
    Said
    0