Probleme curieux dans déclaration de variable

  • Initiateur de la discussion Initiateur de la discussion TVulcain
  • 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 !

TVulcain

XLDnaute Nouveau
Bonjour à tous,

Un souci plutôt curieux pour un novice.
Par macro je réalise une simple copie de quelque ligne d'un fichier dans un autre.
Puis je veux mettre en couleur une cellule si celle ci contient la chaine de type string "Mot à vérifier"

La déclaration est :

VB:
Dim MotCS As String
Dim Lignerouge As String

MotCS = "Mot à vérifier"
Lignerouge = Range("H" & LigneLu).Value ' Ligne pour mettre en rouge
' teste
If LTrim(RTrim(Lignerouge)) = MotCS then
Range("H" & LigneLu).Interior.Color = RGB(225, 94, 41) ' rouge fonc?
end if

Cela ne fonctionne pas tout le temps, par contre si je copie la cellule du fichier et remplace dans la déclaration "Mot à vérifier"
le code fonctionne.
Si je reprends depuis la copie, plus rien ne fonctionne.
Le format de la cellule est standard.

J'ai essayé de forcer le format par Cells(LigneLu, "H").NumberFormat = "$" mais idem.

donc dans la macro si je tape "Mot à vérifier" ça ne fonctionne plus
si je copie le contenu de la cellule dans la macro pour être sur de l'orthographe, ça marche.

Par contre il apparaît ceci "Mot à vérifier"" et je supprime le " en double.

Avez-vous un conseil, merci
 
Bonsoir

A vue de nez, et après test sur mon propre fichier exemple, cela semble fonctionner, non?
VB:
Sub Test()
Dim MotCS$, Lignerouge$, LigneLu&
LigneLu = 1
MotCS = "Mot à vérifier"
Lignerouge = Range("A" & LigneLu).Text ' Ligne pour mettre en rouge
' teste
If LTrim(RTrim(Lignerouge)) = MotCS Then
Range("A" & LigneLu).Interior.Color = RGB(225, 94, 41) ' rouge fonc?
Else
Range("A" & LigneLu).Interior.Color = xlNone
End If
End Sub
 
Re

TVulcain
J'avais un peu de temps (pendant que le four préchauffe)
Alors je me suis amusé 😉
Copie ces codes sur une feuille vierge, et lance test1 puis test2
VB:
Sub test1()
Dim Rng As Range, LigneLu&: LigneLu = 1
LeMot = CStr(InputBox("Mot recherché?", "Test", "Forum XLD"))
[A1].Clear: [A1] = LeMot
Set Rng = Range("A" & LigneLu)
'avec la macro paramétrée
VerifierEtColorier Rng, "Forum XLD"
End Sub
Sub test2()
Dim Rng As Range, LigneLu&: LigneLu = 1
LeMot = CStr(InputBox("Mot recherché?", "Test", "Forum XLD"))
[A1].Clear:  [A1] = Date
Set Rng = Range("A" & LigneLu)
'avec la macro paramétrée
VerifierEtColorier Rng, "Forum XLD"
End Sub
Private Sub VerifierEtColorier(r As Range, MotCS$)
r.Interior.Color = IIf(LTrim(RTrim(r.Text)) = MotCS, RGB(225, 94, 41), xlNone)
End Sub
 
Bonjour
merci pour la réponse, oui ma macro fonctionne mais suivant le fichier importé que j'utilise, il arrive que cela ne fonctionne pas.
Je pense que je dois avoir de temps en temps un caractère invisible car après affichage dans une msgbox la variable et la cellule semble identique.
Au travail tous les jours j'ai un nouveau fichier venant d'une exportation depuis un logiciel et le but de cette macro et de mettre en rouge certaines cellules contenant un mot particulier.
je dois avoir un chr(?) mais lequel ?
 
Bonjour TVulcain, JM,

Il y a peut-être des espaces superflus à l'intérieur du texte étudié donc remplacez :
VB:
If LTrim(RTrim(Lignerouge)) = MotCS Then
par :
VB:
If Application.Trim(Lignerouge) = MotCS Then
Et s'il peut y avoir des espaces insécables de code 160 remplacez par :
VB:
If Application.Trim(Replace(Lignerouge, Chr(160), " ")) = MotCS Then
Application.Trim c'est la fonction Excel SUPPRESPACE.

A+
 
Bonjour à tous,
Le problème est toujours présent mais j'ai intégré vos suggestion dans la Macro au cas ou je me retrouve avec un chr(160).

Par contre si je traite dans l'hypothèse d'un retour chariot chr(13) est-ce que l'instruction deviens : chr(13),"" au lieu de chr(160), " "

merci à vous


VB:
If Application.Trim(Replace(Lignerouge, Chr(160), " ")) Like BacCS _
           Or Application.Trim(Replace(Lignerouge, Chr(160), " ")) Like BacOM Then  ' rouge 225, 32, 66
 
Bon ben c'est ok et simplement comme indiqué
Merci à vous

Au faite pour mettre le sujet résolu ?

Code:
If BacCS Like Range("H" & LigneLu) Or BacOM Like Range("H" & LigneLu) Then
            Range("H" & LigneLu).Interior.Color = RGB(225, 94, 41) ' rouge foncé
            Range("A" & LigneLu, "G" & LigneLu).Font.ColorIndex = 3 ' texte rouge
            Rows(LigneLu).Select
            Selection.Font.Bold = True ' en gras
     
End If
 
Bon ben c'est ok et simplement comme indiqué
Merci à vous

Au faite pour mettre le sujet résolu ?

Code:
If BacCS Like Range("H" & LigneLu) Or BacOM Like Range("H" & LigneLu) Then
            Range("H" & LigneLu).Interior.Color = RGB(225, 94, 41) ' rouge foncé
            Range("A" & LigneLu, "G" & LigneLu).Font.ColorIndex = 3 ' texte rouge
            Rows(LigneLu).Select
            Selection.Font.Bold = True ' en gras
    
End If
Hello,
Si dans la condition like il n'y a pas de joker du type * exemple
VB:
if "Thomas" like "Thom*" then
Alors autant utiliser un égale je pense que se sera moins gourmand.

Cordialement
Thomas
 
- 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

Réponses
10
Affichages
470
  • Question Question
Microsoft 365 Macro vba excel
Réponses
6
Affichages
449
Retour