boucle infinie sur événement Worksheet_Change

  • Initiateur de la discussion Initiateur de la discussion m0j0man_fr
  • Date de début Date de début

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 !

M

m0j0man_fr

Guest
Bonjour à tous, voilà mon problème:

feuille "code postaux" de mon classeur:
colonne A : il y a une liste de noms de villes (tous en majuscules)
colonne B : il y a les codes postaux des villes

feuille "Liste clientèle" de mon classeur:
lorsque l'utilisateur tape dans la colonne E un nom de ville une macro va chercher le code postal correspondant dans la feuille "code postaux" et l'insere automatiquement dans la colonne F de la feuille travail.
cette macro se trouve dans le code de la feuille travail, c'est la procédure evenementielle Worksheet_Change(ByVal Target As Range) avec un test pour savoir si target.column=5 (colonne des villes)

jusque là impeccable 🙂

là ou ca se corse c'est que je veux que les noms de ville que l'utilisateur entre dans la colonne F soient toujours en majuscules.
J'ai donc ajouté au code de la procédure événementielle (qui jusque là se contentait d'aller chercher le code postal) deux lignes de code avec la fonction Ucase qui change le contenu de la cellule en majuscules.

Malheureusement , cela a pour effet de reboucler infiniment sur l'événement change. en effet:
l'utilisateur entre un nom -> événement change
donc convertion du nom en majuscule
donc re événement change
donc reconversion en majuscules
donc re re événement change
etc...

et voilà, c'est en vrac !

donc ma question est simple:
je veux :
1-convertir le contenu de la cellule en majuscules quand on entre du texte dans la cellule
2-utiliser le texte convertit pour une recherche
et éviter cette p.... de boucle infinie !

merci pour vos propositions
je joins le code de ma macro:

*************************************************
*************************************************
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ville As String
'
If Target.Column = 5 Then
'
ville = UCase(Target.Value)
Target.Value = ville
'
derligne = Sheets("code postaux").Range("A1").End(xlDown).Row
For ligne = 2 To derligne
If Sheets("code postaux").Cells(ligne, 1) = ville Then
Target.Offset(0, 1).Value = Sheets("code postaux").Cells(ligne, 2)
Exit Sub
End If
Next ligne
End If
'
End Sub
 
Bonsoir m0j0man_fr,


Je n'ai pas testé mais ceci conviendra peut être :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ville As String
'
If Target.Column = 5 Then
'
Application.EnableEvents = False
ville = UCase(Target.Value)
Target.Value = ville
'
derligne = Sheets("code postaux").Range("A1").End(xlDown).Row
For ligne = 2 To derligne
If Sheets("code postaux").Cells(ligne, 1) = ville Then
Target.Offset(0, 1).Value = Sheets("code postaux").Cells(ligne, 2)
Exit Sub
End If
Next ligne
Application.EnableEvents = True
End If
'
End Sub



Cordialement,
Didier_mDF
 
Salut à tous,

Tu pourrais éviter la cascade d'évènements en plaçant un Flag, de cette manière :

Public Flag As Boolean

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ville As String
If Flag = True Then Exit Sub
If Target.Column = 5 Then
If Target.Rows.Count > 1 Then Exit Sub
If Not IsNumeric(Target) Then
Flag = True
ville = UCase(Target.Value)
Target.Value = ville
Flag = False

derligne = Sheets("code postaux").Range("A1").End(xlDown).Row
For ligne = 2 To derligne
If Sheets("code postaux").Cells(ligne, 1) = ville Then
Target.Offset(0, 1).Value = Sheets("code postaux").Cells(ligne, 2)
Exit For
End If
Next ligne
End If
End If
End Sub

A+
Horatio
 
Bonjour à tous,

Pourquoi ne pas utiliser l'évènement selectionchange au lieu de change ?

a voir cependant: prise en compte des touches curseurs si l'utilisateur se sert des flèches de déplacement sans valider par "enter"

Michel
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
9
Affichages
409
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Réponses
2
Affichages
429
Réponses
4
Affichages
449
Réponses
8
Affichages
654
Retour