Nom propre excel VBA
Résolu/Fermé
Evedll
Messages postés
74
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
26 septembre 2023
-
16 mai 2012 à 20:38
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 16 mai 2012 à 22:55
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 - 16 mai 2012 à 22:55
A voir également:
- Nom propre excel VBA
- Liste déroulante excel - Guide
- Formule excel - Guide
- Nom de l'adresse ✓ - Forum Réseaux sociaux
- Si et excel - Guide
- &Quot;Nom de l'adresse" lors d'une inscription sur une site - Forum Consommation & Internet
2 réponses
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
16 mai 2012 à 21:29
16 mai 2012 à 21:29
Peut-être :
Private Sub Worksheet_Change(ByVal Target As Range) Dim V As Range If Not Intersect([A6:A11], Target) Is Nothing Then Target.Offset(0, 1) = Empty Target.Offset(0, 2) = Empty End If If Not Intersect([B6:B11], Target) Is Nothing Then Target.Offset(0, 1) = Empty Target.Offset(0, 2) = Empty Target.Offset(0, 3) = Empty End If If Not Intersect([B6:B11], Target) Is Nothing Then Target.Offset(0, 7) = Empty End If For Each V In Range("R6:R11") If UCase(V) = "E" Then MsgBox "Attention, séances gratuites seulement pour GEA, Gym Douce et Tonic !" Exit Sub End If Next V If Not Intersect(Target, Range("B3")) Is Nothing Then Target.Value = UCase(CStr(Target.Value)) ElseIf Not Intersect(Target, Range("B4")) Is Nothing Then Target.Value = Application.Proper(CStr(Target.Value)) End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Not Intersect([A6:E11,I6:I11,B1:B2,D1:D2,F16:F25], Target) Is Nothing Then SendKeys "%{down}" End If End Sub
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
16 mai 2012 à 22:01
16 mai 2012 à 22:01
Effectivement c'est un problème d'évènnement :
Private Sub Worksheet_Change(ByVal Target As Range) Dim V As Range Application.EnableEvents = False If Not Intersect([A6:A11], Target) Is Nothing Then Target.Offset(0, 1) = Empty Target.Offset(0, 2) = Empty End If If Not Intersect([B6:B11], Target) Is Nothing Then Target.Offset(0, 1) = Empty Target.Offset(0, 2) = Empty Target.Offset(0, 3) = Empty Target.Offset(0, 7) = Empty End If For Each V In Range("R6:R11") If UCase(V) = "E" Then MsgBox "Attention, séances gratuites seulement pour GEA, Gym Douce et Tonic !" Application.EnableEvents = True Exit Sub End If Next V If Not Intersect(Target, Range("B3")) Is Nothing Then Target.Value = UCase(CStr(Target.Value)) ElseIf Not Intersect(Target, Range("B4")) Is Nothing Then Target.Value = Application.Proper(CStr(Target.Value)) End If Application.EnableEvents = True End Sub
Evedll
Messages postés
74
Date d'inscription
vendredi 6 juillet 2007
Statut
Membre
Dernière intervention
26 septembre 2023
16 mai 2012 à 22:37
16 mai 2012 à 22:37
Salut Patrice,
J'ai vu que tu as ajouté des lignes de code :
Application.EnableEvents = False (en début)
Application.EnableEvents = True (en milieu et fin)
Je suis étonnée qu'il de voir une seule False et deux fois True dans ces lignes (je pensais qu'il fallait 2 lignes au total, une pour annuler l'autre). J'ai testé et ça marche !!!
Je ne comprends pas à quoi ça correspond mais je ferai une recherche à ce sujet pour mieux comprendre mon erreur.
En attendant, ça fonctionne.
Encore merci de ton aide.
Bonne continuation
Evelyne
J'ai vu que tu as ajouté des lignes de code :
Application.EnableEvents = False (en début)
Application.EnableEvents = True (en milieu et fin)
Je suis étonnée qu'il de voir une seule False et deux fois True dans ces lignes (je pensais qu'il fallait 2 lignes au total, une pour annuler l'autre). J'ai testé et ça marche !!!
Je ne comprends pas à quoi ça correspond mais je ferai une recherche à ce sujet pour mieux comprendre mon erreur.
En attendant, ça fonctionne.
Encore merci de ton aide.
Bonne continuation
Evelyne
Patrice33740
Messages postés
8556
Date d'inscription
dimanche 13 juin 2010
Statut
Membre
Dernière intervention
2 mars 2023
1 775
16 mai 2012 à 22:55
16 mai 2012 à 22:55
Private Sub Worksheet_Change(ByVal Target As Range) est une procédure évènementielle qui s'exécute automatiquement chaque fois que le contenu d'une ou plusieurs cellules est modifié (évènement Change).
Hors, il se trouve que ta procédure modifie le contenu d'une ou plusieurs cellules, ce qui provoque l'évènement change et donc un appel récursif à cette même procédure qui en modifiant la cellule provoque un autre appel ... ainsi de suite jusqu'à ce que la pile soit pleine et provoque l'erreur.
Pour éviter ce phénomène, il suffit d'interdire la survenue des évènements pendant l'exécution de la procédure (d'où Application.EnableEvents = False).
Il faut aussi penser à rétablir les évènements avant de quitter la procédure, car Excel ne le fait pas automatiquement, d'où les deux Application.EnableEvents = True : un avant l'Exit Sub et l'autre avant le End Sub
Hors, il se trouve que ta procédure modifie le contenu d'une ou plusieurs cellules, ce qui provoque l'évènement change et donc un appel récursif à cette même procédure qui en modifiant la cellule provoque un autre appel ... ainsi de suite jusqu'à ce que la pile soit pleine et provoque l'erreur.
Pour éviter ce phénomène, il suffit d'interdire la survenue des évènements pendant l'exécution de la procédure (d'où Application.EnableEvents = False).
Il faut aussi penser à rétablir les évènements avant de quitter la procédure, car Excel ne le fait pas automatiquement, d'où les deux Application.EnableEvents = True : un avant l'Exit Sub et l'autre avant le End Sub
16 mai 2012 à 21:39
J'ai essayé ta macro mais ça fait exactement comme pour moi, dès qu'il met en majuscule, il ouvre la macro et ensuite il bug et ferme excel.
Je n'arrive toujours pas à comprendre pourquoi.
J'ai même essayé sur un nouveau classeur au cas ou ce serait mon classeur qui aurait un problème mais en vain.
Je te remercie quand même de ton aide. Je continue mes recherches malgré mes faibles connaissances en ce domaine.
Cordialement
Evelyne