XL 2016 excel VBA : tester présence chaine de caractère et suffixer

Phillip

XLDnaute Occasionnel
Bonjour,

Je soumets un problème sur lequel je m'arrache les cheveux...J'ai un tableau de noms, et pour chacun des noms que je choisis, je voudrais les suffixer. OK, ça marche. Mais si je refais tourner la macro ET que mon nom est déjà suffixé, je ne voudrais rien faire et tester le suivant. Or, mon code, suffixe, suffixe et suffixe, etc...Où est l'erreur ?

VB:
Sub Noms()


'Je cherche la derniere ligne utilises
VDer = Sheets("Essai").Range("a2000").End(xlUp).Row
'je definis ma zone de recherche
Set ZRP = Range(Cells(1, 1), Cells(VDer, 1))


Vchaine = " Gars"
    For Each Nomhomme In ZRP
    'je mets tout en majuscules
Nomhomme.Value = UCase(Nomhomme.Value)

 

'je cherche tous les maurice et les paul
        If Nomhomme.Text Like "*PAUL*" Or _
        Nomhomme.Text Like "*MAURICE*" Then
              
 's'ils sont deja suffixes avec Gars, je ne fais rien
        If InStr(1, NomhommeArchi, "Gars") > 0 Then
        End If
  'sinon, je les suffixe
        Nomhomme.Value = Nomhomme & Vchaine
        End If

    Next Nomhomme
End Sub

merci de votre aide

Cordialement
 

Pièces jointes

  • noms.xlsm
    17.7 KB · Affichages: 4

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Sans avoir ouvert votre classeur :

1 - NomhommeArchi n'est ni déclaré ni valorisé (sans valeur).
Déclarez vos variables, vous aurez moins de peine à trouver ce qui ne va pas.
Eventuellement préfixez-les par une à 3 lettres indiquant leur Type. Exemple
rng pour un range ou plg
str pour un string
vnt pour un variant,
dte pour une date
dbl pour un double
int pour un integer

2 - Instr utilise le mode de comparaison par défaut (binary) A<>a
3 - If condition Then 'Je ne fais rien ...End if
est suivi d'une action toujours éxecutée
Poser la question à l'envers :
If Instr(1,NomHomme.Text,vChaine)= 0 then
Je rajoute
End if
4- attention vChaine = " Gars" et dans Nomhomme.Text = " GARS"

cordialement
 

Phillip

XLDnaute Occasionnel
Bon...très bien..merci du temps passé, mais ça ne marche toujours pas. J'ai remis la condition avec =0
If InStr(1, Nomhomme, vchaine) = 0 Then
VB:
Option Compare Text
Sub Noms()


'Je cherche la derniere ligne utilises
VDer = Sheets("Essai").Range("a2000").End(xlUp).Row
'je definis ma zone de recherche
Set ZRP = Range(Cells(1, 1), Cells(VDer, 1))


vchaine = " GARS"
    For Each Nomhomme In ZRP
    'je mets tout en majuscules
Nomhomme.Value = UCase(Nomhomme.Value)

'je cherche tous les maurice et les paul
        If Nomhomme.Text Like "*PAUL*" Or _
        Nomhomme.Text Like "*MAURICE*" Then
              
 's'ils sont deja suffixes avec Gars, je ne fais rien
        If InStr(1, Nomhomme, vchaine) = 0 Then
        End If
  'sinon, je les suffixe
        Nomhomme.Value = Nomhomme & vchaine
        End If

    Next Nomhomme
End Sub

Je n'ai pas déclaré les variables en effet, mais je ne pense pas que ça pose un problème, en tous cas sur cet exemple très simple que je donne pour le forum, si ?

merci

Cordialement
 

Phillip

XLDnaute Occasionnel
pardon..Mal lu vos réponses

VB:
Option Compare Text
Sub Noms()


'Je cherche la derniere ligne utilises
VDer = Sheets("Essai").Range("a2000").End(xlUp).Row
'je definis ma zone de recherche
Set ZRP = Range(Cells(1, 1), Cells(VDer, 1))


vchaine = " GARS"
    For Each Nomhomme In ZRP
    'je mets tout en majuscules
Nomhomme.Value = UCase(Nomhomme.Value)

'je cherche tous les maurice et les paul
        If Nomhomme.Text Like "*PAUL*" Or _
        Nomhomme.Text Like "*MAURICE*" Then
              
 's'ils sont deja suffixes avec Gars, je les suffixe
        If InStr(1, Nomhomme, vchaine) = 0 Then
        Nomhomme.Value = Nomhomme & vchaine
        End If
  'sinon, je ne fais rien
        Else
        End If

    Next Nomhomme
End Sub

Là, ça marche en effet !

merci !

Cordialement
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,

Si sinon je ne fais rien alors le else est inutile.

Si sinon vous faites quelque chose alors le else doit être entre le If et le End If concerné par la condition.

La où vous l'avez mis c'est la condition :
If Nomhomme.Text Like "*PAUL*" Or _
Nomhomme.Text Like "*MAURICE*" Then
 

Discussions similaires

Statistiques des forums

Discussions
315 060
Messages
2 115 822
Membres
112 592
dernier inscrit
JuliaT