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

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

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

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
 
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
 
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
 
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
 
- 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
1
Affichages
2 K
Retour