Problème de cohabitation de 2 parties de codes VBA
Bonjour le forum,
Voici mon problème, j'ai 2 codes VBA qui marchent tous les 2 indépendamment, mais qui lorsque qu'ils sont ensembles crées des problèmes dans mon fichier Excel.
Mon premier code me permettait de mettre une majuscule en début de mot dans ma feuille, et j'y ai rajouté un code permettant d'insérer un champ recherche dans cette même feuille. Les 2 testés seul font ce qu'on leur demande, malheureusement ensemble ils "déconnent". Le problème rencontré est le suivant : La première lettre de chaque mot est remplacée par un chiffre ou un caractère du style ", & .... Bizarre non ?
Je ne suis pas assez fort en VBA pour trouver une solution, je compte donc sur vous SVP, ou une autre solution.
Merci.
Voici mon code :
Option Compare Text
Private Sub TextBox1_Change()
Application.ScreenUpdating = False
Range("A6:A400").Interior.ColorIndex = 2
If TextBox1 <> "" Then
For ligne = 6 To 400
If Cells(ligne, 1) Like "*" & TextBox1 & "*" Then
Cells(ligne, 1).Interior.ColorIndex = 43
End If
Next
End If
End Sub
'Majuscule en début de mot
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Value >= "a" And Target.Value <= "z" Then
Target.Value = Chr(-32 + Asc(Left$(Target.Value, 1))) & Right$(Target.Value, Len(Target.Value) - 1)
End If
End Sub
Bonjour,
Essaie après avoir modifié la procédure Worksheet_Change comme cela
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Asc(Left$(Target.Value, 1)) >= 97 And Asc(Left$(Target.Value, 1)) <= 122 Then
Target.Value = Chr(-32 + Asc(Left$(Target.Value, 1))) & Right$(Target.Value, Len(Target.Value) - 1)
End If
Application.EnableEvents = True
End Sub
A+
Merci.
Je viens de tester et apparemment ça fonctionne, bien que je n'ai pas tout compris dans le changement du code.
J'ai bien compris ça" Application.EnableEvents" mais pour les autres modifs... surtout cette ligne "If Asc(Left$(Target.Value, 1)) >= 97 And Asc(Left$(Target.Value, 1)) <= 122 Then " c'est quoi le 97 et 122 ?
En tout cas merci.
Jimmy
Bonjour, Bonjour Frangy,
En complément de ton code, la gestion d'erreur pour réiniatiliser EnableEvents si plantage macro...
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo gestion_erreur
Application.EnableEvents = False
If Asc(Left$(Target.Value, 1)) >= 97 And Asc(Left$(Target.Value, 1)) <= 122 Then
Target.Value = Chr(-32 + Asc(Left$(Target.Value, 1))) & Right$(Target.Value, Len(Target.Value) - 1)
End If
Application.EnableEvents = True
gestion_erreur:
Application.EnableEvents = True
End Sub
Merci Jean-Eric,
J'avais justement rencontré ce problème lors de tests. Après ça ne me mettait plus de majuscule.
Merci à vous 2
Jimmy
Si je laisse Option Explicit mon code pour le champ recherche renvoie une erreur.
Jean-Eric a écrit :Bonjour, Bonjour Frangy,
En complément de ton code, la gestion d'erreur pour réiniatiliser EnableEvents si plantage macro...
Option Explicit Private Sub Worksheet_Change(ByVal Target As Range) On Error GoTo gestion_erreur Application.EnableEvents = False If Asc(Left$(Target.Value, 1)) >= 97 And Asc(Left$(Target.Value, 1)) <= 122 Then Target.Value = Chr(-32 + Asc(Left$(Target.Value, 1))) & Right$(Target.Value, Len(Target.Value) - 1) End If Application.EnableEvents = True gestion_erreur: Application.EnableEvents = True End Sub
Re-bonjour,
c'est quoi le 97 et 122 ?
Ton code a pour objectif de mettre une majuscule en début de mot.
Pour cela, le code doit vérifier tout d’abord que cette première lettre est une minuscule.
Or, dans la table ASCII, les caractères minuscules (a-z) sont numérotés de 97 à 122, ce qui justifie la ligne de code.
"If Asc(Left$(Target.Value, 1)) >= 97 And Asc(Left$(Target.Value, 1)) <= 122 Then "
Pour obtenir l’équivalent en majuscule il suffit alors de sélectionner le caractère ayant le numéro du caractère minuscule auquel on soustrait 32.
Exemple :
le caractère "a " occupe la position 97 ; le caractère "A " occupe la position 97-32 = 65.
le caractère "p " occupe la position 112 ; le caractère "P " occupe la position 112-32 = 80.
A+
Merci pour ces explications.
frangy a écrit :Re-bonjour,
c'est quoi le 97 et 122 ?
Ton code a pour objectif de mettre une majuscule en début de mot.
Pour cela, le code doit vérifier tout d’abord que cette première lettre est une minuscule.
Or, dans la table ASCII, les caractères minuscules (a-z) sont numérotés de 97 à 122, ce qui justifie la ligne de code.
"If Asc(Left$(Target.Value, 1)) >= 97 And Asc(Left$(Target.Value, 1)) <= 122 Then "
Pour obtenir l’équivalent en majuscule il suffit alors de sélectionner le caractère ayant le numéro du caractère minuscule auquel on soustrait 32.
Exemple :
le caractère "a " occupe la position 97 ; le caractère "A " occupe la position 97-32 = 65.
le caractère "p " occupe la position 112 ; le caractère "P " occupe la position 112-32 = 80.
A+