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

Bonsoir ,
Oui , tu pourrais tout simplement renommer l'onglet NL en Langue par exemple et toujours appeler Langue .
ensuite en sortie de classeur tu renome ton onglet grace à une cellule quelque part dans la feuille te permettant d'identifier la langue
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour le forum, camarchepas, mapommme, JCGL,
N'y aurait-il pas moyen de faire en sorte que selon le bouton de langue sur lequel je clique, la procédure s'enclenche soit avec l'onglet NL, soit avec le FR? Ceci en masquant l'onglet inutilisé ...
Merci d'avance pour vos réponses et très bon samedi.
 
Re : Activer une macro à l'introduction de données dans une cellule

Hello tous,

Je suis en train de tester la modification du code dans le sens où je l'ai indiqué ci-dessus, à savoir lorsque je clique sur l'un des 2 boutons, ce soit la feuille de la langue choisie qui soit prise en compte et continue le travail, voilà ce que ça donne mais ça fonctionne pas ... le débogueur de script interrompt encore le travail à la ligne en gras ci-dessous:

Private Sub CommandButton1_Click()
'on désactive la détection d'évènement
Application.EnableEvents = False

If Not Intersect(Sheet1.Range("C11:C17"), Target) Is Nothing Then
'on est bien dans la zone C1:C17
If Target.Count = 1 And IsDate(Target) Then
' Une seule cellule a été modifiée et la cellule à gauche
' est une date
Sheets("FR").Visible = True
' dupliquer la feuille à la fin des onglets
Sheets("FR").Copy After:=Worksheets(Worksheets.Count)
Sheets("FR").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("T1").AddComment s
ActiveSheet.Range("T1").Comment.Visible = True

'ici, voici le code nécessaire pour afficher la date dans la cellule
ActiveSheet.Range("T1") = 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("T1").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 "Front page" 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 Front page
Sheets("FR").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 Sheets("FR")
Sheets("FR").Activate
End Sub


End Sub


Private Sub CommandButton2_Click()
'on désactive la détection d'évènement
Application.EnableEvents = False

If Not Intersect(Sheet1.Range("C11:C17"), Target) Is Nothing Then
'on est bien dans la zone C1:C17
If Target.Count = 1 And IsDate(Target) Then
' Une seule cellule a été modifiée et la cellule à gauche
' est une date
Sheets("NL").Visible = True
' dupliquer la feuille à la fin des onglets
Sheets("NL").Copy After:=Worksheets(Worksheets.Count)
Sheets("NL").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("T1").AddComment s
ActiveSheet.Range("T1").Comment.Visible = True

'ici, voici le code nécessaire pour afficher la date dans la cellule
ActiveSheet.Range("T1") = 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("T1").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 "Front page" 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 Front page
Sheets("NL").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 Sheets("NL")
Sheets("NL").Activate
End Sub



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

Merci pour votre aide 😀
 
Dernière édition:
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour à tous


Sauf erreur de ma part, Target est réservé aux procédures événementielles uniquement.
Pour s'en convaincre, si on remplace Target par ActiveCell
Code:
Private Sub CommandButton1_Click()
If Not Intersect(Range("C11:C17"), ActiveCell) Is Nothing Then
MsgBox ActiveCell.Address
End If
End Sub

Pas de message d'erreur.

Donc adaptes ton code en conséquence.
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonsoir le forum, Staple 1600,

Merci pour ta réponse.

Là ça à l'air de fonctionner mais il me reste le choix du formulaire à utiliser selon la langue choisie ... pas d'idée?

Je sature vraiment après de longues heures là-dessus 🙂 pfiouuuuuuu
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour à tous,

Je me demandais s'il n'y avait pas moyen de simplifier le code ci-dessous de manière à ce que lorsque j'ai cliqué sur le bouton choisissant la langue, seule la feuille en langue choisie reste visible et soit activée pour le reste du code? Actuellement, j'ai copié le code et ajouté à la suite de l'autre tout en modifiant les noms de feuille à utiliser mais ça na marche pas comme je voudrais ... à vrai dire, ça marche pas du tout ... :-(

Private Sub CommandButton1_Click()
'on désactive la détection d'évènement
Application.EnableEvents = False

Private Sub CommandButton2_Click()
'on désactive la détection d'évènement
Application.EnableEvents = False

If Not Intersect(Sheet1.Range("C11:C17"), Target) Is Nothing Then
'on est bien dans la zone C1:C17
If Target.Count = 1 And IsDate(Target) Then
' Une seule cellule a été modifiée et la cellule à gauche
' est une date
Sheets("NL").Visible = True
' dupliquer la feuille à la fin des onglets
Sheets("NL") ==> ou ("FR").Copy After:=Worksheets(Worksheets.Count)
Sheets("NL") ==> ou ("FR").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("T1").AddComment s
ActiveSheet.Range("T1").Comment.Visible = True

'ici, voici le code nécessaire pour afficher la date dans la cellule
ActiveSheet.Range("T1") = 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("T1").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 "Front page" 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 Front page
Sheets("NL") ==> ou ("FR").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 Sheets("NL") ==> ou ("FR")
Sheets("NL") ==> ou ("FR").Activate
End Sub



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

Un méga merci pour votre aide ... 🙂 et bon après-midi.
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour à tous,

Voilà, je sèche toujours sur l'activation de la feuille choisie pour continuer ...
Dans le code actuel, il n'est fait référence qu'à la feuille "FR", hors lorsque je clique sur le bouton "Néérlandais", la feuille "FR" se masque bien mais lorsque j'entre une date pour générer mes feuilles, c'est la feuille "FR" qui est systématiquement utilisée.
Alors que dans le cas présent, ce devrait être la feuille "NL" puisque j'ai cliqué sur le bouton "Néérlandais".
Il faudrait, je suppose que je remplace les "Sheets("FR").Activate" dans le code mais par quoi? Je cherche désespérément ...


If Not Intersect(Sheet1.Range("C11:C17"), Target) Is Nothing Then
If Target.Count = 1 And IsDate(Target) Then
Sheets("FR").Visible = True
Sheets("FR").Copy After:=Worksheets(Worksheets.Count)
Sheets("FR").Visible = False

n = Target.Offset(, -1) 'valeur de la cellule à gauche
On Error Resume Next
Do
ActiveSheet.Name = n
If Err.Number = 0 Then
Exit Do
Else
Err.Clear
i = i + 1
n = Target.Offset(, -1) & "-" & i
End If
Loop
On Error Resume Next
s = "créée le #" & Format(Now(), "dd/mm/yyyy") & _
"# à (" & Format(Now(), "hh:mm:ss") & _
") avec comme date modifiée <" & Format(Target, "dd/mm/yyyy") & ">"
ActiveSheet.Range("T1").AddComment s
ActiveSheet.Range("T1").Comment.Visible = True

ActiveSheet.Range("T1").Value = Format(Target, "mm/dd/yy")

For Each xsh In ThisWorkbook.Worksheets
If Not xsh Is ActiveSheet Then
s = ""
On Error Resume Next
s = xsh.Range("T1").Comment.Text
If s <> "" Then
s = Mid(s, InStr(s, "<") + 1, 10)
On Error GoTo 0
If IsDate(s) Then
If Target.Value2 <= CDate(s) Then
ActiveSheet.Move before:=xsh
Application.EnableEvents = True
Sheets("FR").Activate
Exit For
End If
End If
End If
End If
Next xsh
End If
End If
Application.ScreenUpdating = False
Application.EnableEvents = True
Sheets("GUIDE").Activate
End Sub

Merci d'avance pour votre aide précieuse qui m'a déjà permis de bien avancer et bon dimanche 🙂
 
Re : Activer une macro à l'introduction de données dans une cellule

Bonjour ,
pourrais-tu nous remettre le fichier avec la macro intégrée afin de pouvoir faire les tests,
Mais la solution est d'utiliser une variable :

sheets(Onglet).visible , etc
et de chargé onglet en fonction du contexte :

If Français then onglet = "Fr"
if Hollande then "NL"

par contre ta boucle do loop , est plutot bisard , ainsi que les error resume next , un vrai nid à bug
 
Re : Activer une macro à l'introduction de données dans une cellule

Merci camarchepas,

L'idée, c'est ça mais lorsque je tape par exemple des dates antérieure et que l'onglet doit être créé, il me met un débogage ... vois:
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    39.6 KB · Affichages: 36
  • Capture.JPG
    Capture.JPG
    39.6 KB · Affichages: 33
  • Capture.JPG
    Capture.JPG
    39.6 KB · Affichages: 34
- 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

Retour