Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Activer une macro à l'introduction de données dans une cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

luke3300

XLDnaute Impliqué
Bonjour à tous,

je reviens de nouveau vers vous car j'aimerais obtenir une macro qui s'activera lorsque j'entrerai une date dans une cellule.
Dans le fichier exemple que je vous mets, c'est expliqué ...
Mais si en entrant une date dans la cellule D9 par exemple, j'aimerais qu’automatiquement, une copie de l'onglet "à duppliquer" soit créée à la suite de celui-ci et renommée en la valeur qui est à la même ligne en colonne C.

Merci d'avance pour votre aide précieuse et bon dimanche 🙂
 

Pièces jointes

Re : Activer une macro à l'introduction de données dans une cellule

Bonjour,

Merci pour ta rapidité camarchepas 🙂 cependant, je suis sur mon PC du boulot et ça marche pas ... j'utilise la version 2007 d'excel et rien ne fonctionne alors qu'hier tout marchait à merveille à la maison ...
Le code n'est-il pas opérationnel sous 2007?

Bonen journée
 
Re : Activer une macro à l'introduction de données dans une cellule

A priori pourtant pas de commande spécifique qui ne passerait pas .

Mais ça ne marche pas ne veut pas dire grand chose ........

un message doit s'afficher et en principe une ligne surlignée en jaune doit également s'afficher si tu valides le message d'erreur en validant sur le bouton déboggage .
 
Re : Activer une macro à l'introduction de données dans une cellule

Re,

Ok voilà, ça marche. J'avais plusieurs fichier excel ouvert en même temps ... qui sait, peut-être qu'un de ceux-ci mettait le brin 🙂

Voici le code complet, peux-tu m'indiquer où ajouter le tiens?

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n$, s$, i&, dat, xsh As Worksheet

'on désactive la détection d'évènement
Application.EnableEvents = False

If Not Intersect(Feuil1.Range("D8:D100"), Target) Is Nothing Then
   'on est bien dans la zone D8:D100
   If Target.Count = 1 And IsDate(Target) Then
      ' Une seule cellule a été modifiée et la cellule à gauche
      ' est une date
      Feuil2.Visible = True
      ' dupliquer la feuille à la fin des onglets
      Feuil2.Copy After:=Worksheets(Worksheets.Count)
      Feuil2.Visible = False
      
      '--- définir le nom de la feuille qui a été dupliquée
      n = Target.Offset(, -1)    'valeur de la cellule à gauche
      On Error Resume Next
      Do
         ' on attribue le nom n à la feuille dupliquée
         ActiveSheet.Name = n
         If Err.Number = 0 Then
            'Pas d'erreur -> on sort de la boucle
            Exit Do
         Else
            ' il y a eu une erreur -> le nom sans doute existe déjà
            Err.Clear      ' RAZ de l'erreur
            i = i + 1      ' on oncrémente i
            ' nouveau nom à tester
            n = Target.Offset(, -1) & "-" & i
         End If
      Loop
      
      ' mettre un commentaire pour la cellule A1 de la nouvelle feuille
      On Error Resume Next
      ' texte du commentaire
      s = "créée le " & Format(Now(), "dd/mm/yyyy") & _
         " à " & Format(Now(), "hh:mm:ss") & _
         " avec comme date planifiée <" & Format(Target, "dd/mm/yyyy") & ">"
      ' ajout du commentaire
      ActiveSheet.Range("A1").AddComment s
      ActiveSheet.Range("A1").Comment.Visible = True
      
       ' classement de la nouvelle feuille
       ' boucler sur l'ensemble des feuilles
       For Each xsh In ThisWorkbook.Worksheets
         If Not xsh Is ActiveSheet Then
            'si la xsh n'est pas la feuille dupliquée (ie feuille active)
            s = ""
            On Error Resume Next
            ' récupérer le commentaire en de la cellule A1
            ' si pas de commentaire -> une erreur se produit et se propage
            s = xsh.Range("a1").Comment.Text
            If s <> "" Then
               ' la cellule A1 avait un commentaire
               ' on recherche la date comprise entre <.....>
               s = Mid(s, InStr(s, "<") + 1, 10)
               On Error GoTo 0
               ' si s est une date
               If IsDate(s) Then
                  ' le commenataire avait une date après un signe "<"
                  If Target.Value2 <= CDate(s) Then
                     ' la date modifiée de la feuille "Feuil1" est
                     ' inférieure à la date du commentaire de xsh
                     ' -> on place la feuille dupliquée avant la feuille xsh
                     ActiveSheet.Move before:=xsh
                     ' on ré-active la détection d'évènement
                     Application.EnableEvents = True
                     ' on active Feuil1
                     Feuil1.Activate
                     Exit For
                  End If
               End If
            End If
         End If
      Next xsh
   End If
End If

' on ré-active la détection d'évènement
Application.EnableEvents = True
' on active Feuil1
Feuil1.Activate
End Sub

Sub re_activer_détection_evenement()
   Application.EnableEvents = True
End Sub

Merci beaucoup ;-)
 
Re : Activer une macro à l'introduction de données dans une cellule

Voici le module modifié

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n$, s$, i&, dat, xsh As Worksheet

'on désactive la détection d'évènement
Application.EnableEvents = False

If Not Intersect(Feuil1.Range("D8:D100"), Target) Is Nothing Then
   'on est bien dans la zone D8:D100
   If Target.Count = 1 And IsDate(Target) Then
      ' Une seule cellule a été modifiée et la cellule à gauche
      ' est une date
      Feuil2.Visible = True
      ' dupliquer la feuille à la fin des onglets
      Feuil2.Copy After:=Worksheets(Worksheets.Count)
      Feuil2.Visible = False
      
      '--- définir le nom de la feuille qui a été dupliquée
      n = Target.Offset(, -1)    'valeur de la cellule à gauche
      On Error Resume Next
      Do
         ' on attribue le nom n à la feuille dupliquée
         ActiveSheet.Name = n
         If Err.Number = 0 Then
            'Pas d'erreur -> on sort de la boucle
            Exit Do
         Else
            ' il y a eu une erreur -> le nom sans doute existe déjà
            Err.Clear      ' RAZ de l'erreur
            i = i + 1      ' on oncrémente i
            ' nouveau nom à tester
            n = Target.Offset(, -1) & "-" & i
         End If
      Loop
      
      ' mettre un commentaire pour la cellule A1 de la nouvelle feuille
      On Error Resume Next
      ' texte du commentaire
      s = "créée le #" & Format(Now(), "dd/mm/yyyy") & _
         "# à (" & Format(Now(), "hh:mm:ss") & _
         ") avec comme date modifiée <" & Format(Target, "dd/mm/yyyy") & ">"
      ' ajout du commentaire
      ActiveSheet.Range("A1").AddComment s
      ActiveSheet.Range("A1").Comment.Visible = True

'ici, voici le code nécessaire pour afficher la date dans la cellule
      ActiveSheet.Range("A1") = Format(Target, "dd/mm/yyyy") 

       ' classement de la nouvelle feuille
       ' boucler sur l'ensemble des feuilles
       For Each xsh In ThisWorkbook.Worksheets
         If Not xsh Is ActiveSheet Then
            'si la xsh n'est pas la feuille dupliquée (ie feuille active)
            s = ""
            On Error Resume Next
            ' récupérer le commentaire en de la cellule A1
            ' si pas de commentaire -> une erreur se produit et se propage
            s = xsh.Range("a1").Comment.Text
            If s <> "" Then
               ' la cellule A1 avait un commentaire
               ' on recherche la date comprise entre <.....>
               s = Mid(s, InStr(s, "<") + 1, 10)
               On Error GoTo 0
               ' si s est une date
               If IsDate(s) Then
                  ' le commenatire avait une date après un signe "<"
                  If Target.Value2 <= CDate(s) Then
                     ' la date modifiée de la feuille "Feuil1" est
                     ' inférieure à la date du commentaire de xsh
                     ' -> on place la feuille dupliquée avant la feuille xsh
                     ActiveSheet.Move before:=xsh
                     ' on ré-active la détection d'évènement
                     Application.EnableEvents = True
                     ' on active Feuil1
                     Feuil1.Activate
                     Exit For
                  End If
               End If
            End If
         End If
      Next xsh
   End If
End If

' on ré-active la détection d'évènement
Application.EnableEvents = True
' on active Feuil1
Feuil1.Activate
End Sub
 
Re : Activer une macro à l'introduction de données dans une cellule

Merci camarchepas, ça à l'air de fonctionner nickel! 😀
Je vais continuer à préparer mon fichier et vous dirais quoi sur le final.

Très bonne journée.
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonsoir à tous,

ben voilà, je cale encore sur ceci ... lorsque j'essaye d'adapter le code à mon bon fichier, voici ce qu'il me met:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim n$, s$, i&, dat, xsh As Worksheet

'on désactive la détection d'évènement
Application.EnableEvents = False

If Not Intersect(Feuil1.Range("D10:D16"), Target) Is Nothing Then ==> ceci en jaune!
   'on est bien dans la zone D10:D16
   If Target.Count = 1 And IsDate(Target) Then
      ' Une seule cellule a été modifiée et la cellule à gauche
      ' est une date
      FR.Visible = True
      ' dupliquer la feuille à la fin des onglets
      FR.Copy After:=Worksheets(Worksheets.Count)
      FR.Visible = False
      
      '--- définir le nom de la feuille qui a été dupliquée
      n = Target.Offset(, -2)    'valeur de la cellule à gauche
      On Error Resume Next
      Do
         ' on attribue le nom n à la feuille dupliquée

Quelqu'un a une idée? Moi je ne parviens pas à comprendre ... ma feuille se nomme pourtant bien Feuil1 ...

Merci d'avance
 
Dernière édition:
Re : Activer une macro à l'introduction de données dans une cellule

Bonsoir like3300, camarchepas 🙂,

Dans le code on voit apparaitre FR. FR semble ici employé comme une variable qui n'est pas été initialisée.

Je suppose que FR est le nom (qui figure sur l'onglet) de la feuille à dupliquer.

Si c'est le cas, remplacer FR partout où il apparait par sheets("FR").

ou bien

avant la première ligne où apparait FR, déclarer FR comme variable et initialiser FR en ajoutant ces deux lignes:
Code:
dim FR as worksheet
set FR=worksheets("FR")



Cela aide t-il ?
 
Dernière édition:
Re : Activer une macro à l'introduction de données dans une cellule

Bonsoir tout le monde, mapomme, JCGL et camarchepas,

Toujours le même souci, cette ligne active le déboguagede script:

Code:
If Not Intersect(Feuil1.Range("C11:C17"), Target) Is Nothing Then

Je vous mets un exemple de mon fichier original que je construis pour mieux cerner le souci.

Vous verrez qu'il y a un onglet FR et un NL, si ce n'est pas trop abuser, il n'y aurait pas moyen d'intégrer dans le code que lorsqu'on choisi FR ou NL avec un des boutons, l'onglet non choisi soit supprimé et que tout continue avec l'autre?

Merci d'avance et bonne fin de journée 🙂
 

Pièces jointes

Re : Activer une macro à l'introduction de données dans une cellule

Bonjour à tous,

Peux-tu essayer avec :

Code:
If Not Intersect(Sheet1.Range("C11:C17"), Target) Is Nothing Then

Tu as deux autres Feuil1 à remplacer dans ton code...

Dans le code la feuille :

Code:
Private Sub CommandButton1_Click()
CommandButton2.Visible = False
End Sub


Private Sub CommandButton2_Click()
CommandButton1.Visible = False
End Sub


Private Sub Worksheet_Activate()
CommandButton1.Visible = True
CommandButton2.Visible = True
End Sub

A+ à tous
 
Dernière édition:
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour à tous,

J'ai édité... le #24

A+ à tous

Edition : je viens de lire que ce sont les feuilles que tu souhaites masquer :

Code:
Private Sub CommandButton1_Click()
Sheet6.Visible = False
End Sub


Private Sub CommandButton2_Click()
Sheet3.Visible = False
End Sub


Private Sub Worksheet_Activate()
CommandButton1.Visible = True
CommandButton2.Visible = True
End Sub
 
Dernière édition:
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour le forum, JCGL,

En effet ce sont les feuilles que je désire masquer mais ce que j'aimerais aussi, c'est que selon le choix de la langue, ce soit la feuille soit FR ou NL qui s'active pour le reste de l'utilisation du fichier. Est-ce possible?

Merci d'avance.

Excellent mercredi à tous 😀
 
Re : Activer une macro à l'introduction de données dans une cellule

Re,
Petit bémol trouvé aussi ... dans ma cellule A1, la date qui s'ajoute automatiquement s'ajoute sous format mm/dd/yy lorsque le chiffre du jour est inférieur à 12 (nombre de mois sur un an). Comment puis-je résoudre cela svp?

Merci pour votre aide, bonne journée.
 
Re : Activer une macro à l'introduction de données dans une cellule

Bon OK pour la date j'ai trouvé ;-) j'ai inversé le format de date en VBA et voilà: ActiveSheet.Range("T1").Value = Format(Target, "mm/dd/yy")

Reste pour la question du formulaire "FR" ou "NL" ... bonne soirée à tous.
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonsoir le forum, JCGL, mapomme, camarchepas,

Je ne vois pas comment je pourrais faire pour que selon le choix de la langue, ce soit la feuille soit FR ou NL qui s'active pour le reste de l'utilisation du fichier. Est-ce possible? Comment puis-je faire pour cela?

Merci d'avance et très bonne soirée à tous.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…