Probleme curieux dans déclaration de variable

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
 

Staple1600

XLDnaute Barbatruc
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
 

Staple1600

XLDnaute Barbatruc
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
 

TVulcain

XLDnaute Nouveau
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 ?
 

job75

XLDnaute Barbatruc
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+
 

TVulcain

XLDnaute Nouveau
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
 

TVulcain

XLDnaute Nouveau
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
 

ThomasR

XLDnaute Occasionnel
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
 

Discussions similaires

Réponses
5
Affichages
367
Compte Supprimé 979
C
Réponses
16
Affichages
983