Nom propre excel VBA
Résolu
Evedll
Messages postés
79
Statut
Membre
-
Patrice33740 Messages postés 8930 Statut Membre -
Patrice33740 Messages postés 8930 Statut Membre -
Bonjour à toutes et tous,
Je voudrais pouvoir appliquer le format nom propre à la cellule B3 et majuscules à la cellule B4 de ma feuille nommée "Saisie 12-13".
J'ai déjà des codes existants dans cette feuille : Private Sub Worksheet_Change(ByVal Target 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
Dim V As Range
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
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
J'ai trouvé la macro suivante qui fonctionne mais seulement dans une classeur différent. Je ne sais pas où la placer avec celle du dessus car ça bug complètement. Je ne dois surtout pas supprimer la macro du dessus car elle est utilisée.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B3")) Is Nothing Then
Target.Value = UCase(CStr(Target.Value))
Else:
If Not Intersect(Target, Range("B4")) Is Nothing Then
Target.Value = Application.Proper(CStr(Target.Value))
End If
End If
End Sub
Merci de bien vouloir m'aider à résoudre mon problème.
Cela fait très longtemps que je cherche et je commence à desespérer.
Dans l'attente d'une solution, je continue à me creuser la tête.
Merci d'avance.
Evelyne
Je voudrais pouvoir appliquer le format nom propre à la cellule B3 et majuscules à la cellule B4 de ma feuille nommée "Saisie 12-13".
J'ai déjà des codes existants dans cette feuille : Private Sub Worksheet_Change(ByVal Target 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
Dim V As Range
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
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
J'ai trouvé la macro suivante qui fonctionne mais seulement dans une classeur différent. Je ne sais pas où la placer avec celle du dessus car ça bug complètement. Je ne dois surtout pas supprimer la macro du dessus car elle est utilisée.
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("B3")) Is Nothing Then
Target.Value = UCase(CStr(Target.Value))
Else:
If Not Intersect(Target, Range("B4")) Is Nothing Then
Target.Value = Application.Proper(CStr(Target.Value))
End If
End If
End Sub
Merci de bien vouloir m'aider à résoudre mon problème.
Cela fait très longtemps que je cherche et je commence à desespérer.
Dans l'attente d'une solution, je continue à me creuser la tête.
Merci d'avance.
Evelyne
A voir également:
- Nom propre excel VBA
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
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
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
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
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
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