Problème avec Private sub

Résolu
Michaelv78800 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -  
Michaelv78800 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention   -
bonjour,

Voici mon souci, j'ai une macro qui tourne sans souci avec un bouton pour la lancer, mais je souhaite qu'elle tourne seul. après maintes recherche j'ai trouvé un code mais je dois mal m'y prendre car il n'a aucun effet. alors je me tourne vers les maîtres YODA afin que la force soit en moi!!!!

voici mon code :

Private Sub Worksheets_change(ByVal target As Range)
 
' Vérification du changement de valeur d'une cellule de la plage A14:A52
    If Not Application.Intersect(target, Feuil6.Columns("A14:A52")) Is Nothing Then
    
' Exécution de la macro "Date_quadriennale"
    Date_quadriennale
    
    End If
    
End Sub
'------------------------------------------------------------------------------------------------------------
Sub Date_quadriennale()

' Plage de recherche et condition
    Dim PlageRecherche As Range
    With ActiveSheet
    Set PlageRecherche = .Range("A14:B52").Find(what:="PLG 1", LookIn:=xlValues, lookat:=xlWhole)

' Ouverture boîte de dialogue
        If Not PlageRecherche Is Nothing Then
            variable = InputBox("DATE DE VISITE QUADRIENNALE (date d'obtention + 4 ans) ?")
                
' Cellule cible
            Feuil5.Range("d35").Value = variable
  
        End If
    End With
  
End Sub


Merci à vous

9 réponses

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    C'est dans le module de la feuille concernée qu'il faut mettre le code, pas dans Module1.

    Sinon dépose ce que tu as fait sur cjoint.com et colle ici le lien fourni.

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

    Placez vous sur la feuille concernée : Feuil6 normalement.
    Clic droit sur l'onglet de cette feuille / Visualiser le code
    Copier/coller ce code:
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' Vérification du changement de valeur d'une cellule de la plage A14:A52
    If Not Application.Intersect(Target, Range("A14:A52")) Is Nothing Then

    ' Exécution de la macro "Date_quadriennale"
    Date_quadriennale

    End If
    End Sub
    '------------------------------------------------------------------------------------------------------------
    Sub Date_quadriennale()

    ' Plage de recherche et condition
    Dim PlageRecherche As Range
    With ActiveSheet
    Set PlageRecherche = .Range("A14:B52").Find(what:="PLG 1", LookIn:=xlValues, lookat:=xlWhole)
    End With
    ' Ouverture boîte de dialogue
    If Not PlageRecherche Is Nothing Then
    variable = InputBox("DATE DE VISITE QUADRIENNALE (date d'obtention + 4 ans) ?")
    ' Cellule cible
    With Feuil5
    .Range("d35").Value = variable
    End With
    End If

    End Sub
    0
  3. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    Bonjour,

    une remarque en plus :
    tu utilises le codename des feuilles et non le nom des feuilles.
    C'est un peu risqué si tu ne sais pas très bien ce que tu fais.
    Worksheets("Feuil1") peut très bien avoir pour codename Feuil2.
    Utilise plutôt la notation Worksheets("nom_de_la_feuille")

    eric
    0
  4. Michaelv78800 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour,

    J'ai essaye le code mais rien ne se passe..........
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sipherion Messages postés 1836 Date d'inscription   Statut Membre Dernière intervention   287
     
    Bonjour,

    As tu essaye de placer un Call avant le nom de ta macro ?

    Call Date_quadriennale


    (Message sans accent pour cause de "corps vide")
    0
  7. Michaelv78800 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
     
    Je viens d'essayer.... pas mieux
    0
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      tu as lu ça ?
      0
  8. Michaelv78800 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
     
    j'ai effectivement mis la macro danhs le module de la feuille mais sois je l'ai mal fait sois... je ne sais pas voici le fichier en piece jointe

    https://www.cjoint.com/?DHelRuOzjQB
    0
  9. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Bonjour,

    Essaie ceci:

    Option Explicit
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ' Vérification du changement de valeur d'une cellule de la plage A14:A52
        If Not Application.Intersect(Target, Range("A14:A52")) Is Nothing Then
    ' Exécution de la macro "Date_quadriennale"
        Date_quadriennale
         End If
    End Sub
    Sub Date_quadriennale()
    Dim variable As String
    ' Plage de recherche et condition
        Dim PlageRecherche As Range
        With ActiveSheet
            Set PlageRecherche = .Range("A14:B52").Find(what:="PLG 1", LookIn:=xlValues, lookat:=xlWhole)
        End With
            ' Ouverture boîte de dialogue
            If Not PlageRecherche Is Nothing Then
                variable = InputBox("DATE DE VISITE QUADRIENNALE (date d'obtention + 4 ans) ?")
                ' Cellule cible
                With [Feuil5]
                    .Range("d35").Value = variable
                End With
            End If
      End Sub
    


    C'est le même code que pijaku, j'ai déclaré la variable variable (c'est un drôle de choix, mais enfin) et With [Feuil5]
    Cela fonctionne très bien
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Bonjour Le Pivert,

      Le souci du Selection_Change est que si l'utilisateur change de cellule en utilisant la touche Tab, Target va en colonne D...

      _Change ne peux pas fonctionner car les modifications sont faites sur des listes de validation de données.
      Pour pallier à cela, il "faudrait" passer par un nouvel onglet masqué : http://www.excelabo.net/excel/value_change

      De plus, le code n'était pas dans la feuille concernée...
      0
  10. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    Rectification

    Option Explicit
    Private Sub Worksheet_Change(ByVal Target As Range)
    ' Vérification du changement de valeur d'une cellule de la plage A14:A52
        If Not Application.Intersect(Target, Range("A14:A52")) Is Nothing Then
    ' Exécution de la macro "Date_quadriennale"
        Date_quadriennale
         End If
    End Sub
    Sub Date_quadriennale()
    Dim variable As String
    ' Plage de recherche et condition
        Dim PlageRecherche As Range
        With ActiveSheet
            Set PlageRecherche = .Range("A14:B52").Find(what:="PLG 1", LookIn:=xlValues, lookat:=xlWhole)
        End With
            ' Ouverture boîte de dialogue
            If Not PlageRecherche Is Nothing Then
                variable = InputBox("DATE DE VISITE QUADRIENNALE (date d'obtention + 4 ans) ?")
                ' Cellule cible
             Sheets("Feuil5").Range("d35").Value = variable
                End If
    End Sub
    


    pijaku, je n'avais pas fait attention à l'évènement:

    Private Sub Worksheet_Change(ByVal Target As Range)

    Cela fonctionne
    0
    1. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 772
       
      Tu as raison. Excuse moi, j'étais persuadé que l'événement Change n'était pas déclenché par une modification d'une cellule par validation de liste...

      A+
      0
    2. Michaelv78800 Messages postés 11 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci encore a vous pour votre aide.

      pour info j'ai changé la fin de ta macro cs_Le Pivert :

      Sheets("Feuil5").Range("d35").Value = variable
      me donne une erreur du coup j'ai repris ton premier code a savoir :

      With [Feuil5]
      .Range("d35").Value = variable
      End With

      merci aussi pour les explications qui permettent de progresser et d'apprendre, c'est ma deuxieme macro et j'avoue que ce n'est pas tjrs evident de comprendre le language des initiés.

      a bientot... et bonne vacances.
      0