Rechercher un mot au milieu d'une cellule Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
M
MojitoDu75
Membre habitué
Membre habitué
Messages : 70
Inscrit le : 3 mai 2016
Version d'Excel : 2016

Message par MojitoDu75 » 26 février 2019, 15:06

Bonjour,

J'ai une colonne contenant du texte dans chaque cellule comme suit :
Nom:Prénom:Poste
Je split les valeurs de ma cellule comme suit :

valeur = Split(Sheets("BaseDeDonnées").Cells(i,"A"),":")
Je cherche à trouver un MOT précis dans cette cellule pour le POSTE.
Exemple : TOTO:TOTO1:FACTEUR

j'ai donc comme code :
for i = 2 to 100
valeur = Split(Sheets("BaseDeDonnées").Cells(i,"A"),":")
if range(valeur(2)).value LIKE "*FACTEUR" then
valeur(2) = "Courrier"
end if
next i
Le problème c'est que si ma valeur(2) est différent de "FACTEUR", mon code bug, et si j'ajoute un error resume next, il rentre dans ma boucle IF meme si le mot facteur n'y est pas...
Je pense que mon if n'est pas bien correcte et je cherche le morceau de code pour cette fonction ;)

Merci de votre aide !
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'713
Appréciations reçues : 333
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 26 février 2019, 15:16

Bonjour,

à tester,
If Not IsError(Application.Find("FACTEUR", range(valeur(2)))) Then 
Vive ces nouvelles saisons qui nous colorent.
isabelle
M
MojitoDu75
Membre habitué
Membre habitué
Messages : 70
Inscrit le : 3 mai 2016
Version d'Excel : 2016

Message par MojitoDu75 » 26 février 2019, 15:18

nan la méthode range a echoué...
En fait j'ai l'impression qu'il bug car je fais un range sur une valeur et non une cellule, je tente un autre truc je vois si ca marche
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'317
Appréciations reçues : 390
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 26 février 2019, 15:19

Bonjour,

Si c'est un mot précis comme dit :
if valeur(2) = "FACTEUR" then
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
i20100
Passionné d'Excel
Passionné d'Excel
Messages : 5'713
Appréciations reçues : 333
Inscrit le : 16 mars 2017
Version d'Excel : 2010

Message par i20100 » 26 février 2019, 15:26

re

si valeur(2) n'est pas une adresse,
If Not IsError(Application.Find("FACTEUR", valeur(2))) Then 
Vive ces nouvelles saisons qui nous colorent.
isabelle
M
MojitoDu75
Membre habitué
Membre habitué
Messages : 70
Inscrit le : 3 mai 2016
Version d'Excel : 2016

Message par MojitoDu75 » 26 février 2019, 15:43

Hello problème réglé ! :)

J'ai changé de méthode, j'ai collé ma valeur dans une cellule d'une feuille de test
Test = "FACTEUR"
                    Sheets("test").Activate
                    Cells(1, 1).value = valeur(2)
                    Cells(1, 1).Select
                    If ActiveCell.Text Like "*FACTEUR*" Then
                        valeur(2) = "BLABLBALBALBAL"
                    End If
:btres:
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'906
Appréciations reçues : 395
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 26 février 2019, 15:46

Bonjour,

Je ne vois pas très bien l'intérêt du "Range" dans l'histoire ?

Tu as plusieurs possibilités pour faire ce que tu souhaites. La plus simple à mon avis, c'est de séparer tes données dans des colonnes différentes grâce à "Données" --> "Convertir" et choisir un séparateur personnalisé ":". Tu peux ensuite utiliser "Rechercher et remplacer" dans la colonne appropriée pour remplacer "FACTEUR" par "Courrier".

Une autre possibilité à tester (non exhaustive) :
Sub RemplacerMetier()

Dim i As Integer, valeur() As String

With Sheets("BaseDeDonnées")
    For i = 2 To 100
        valeur = Split(.Range("A" & i), ":")
        If valeur(2) = "FACTEUR" Then 'cas où FACTEUR n'est pas contenu dans un texte plus long, sinon utiliser Like "*FACTEUR*", qui est sensible à la casse
            valeur(2) = "Courrier"
            For j = LBound(valeur) To UBound(valeur)
                .Range("A" & i) = .Range("A" & i) & ":" & valeur(j)
            Next j
        End If
    Next i
End With

End Sub
PS : si le mot FACTEUR n'est pas présent dans les autres parties de ta cellule (Nom, Prénom), il suffit de faire :
.Range("A" & i)=Replace(.Range("A" & i), "FACTEUR", "Courrier")
Aussi possible sans VBA avec "Rechercher et remplacer"...
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
Avatar du membre
Pedro22
Passionné d'Excel
Passionné d'Excel
Messages : 3'906
Appréciations reçues : 395
Inscrit le : 26 janvier 2017
Version d'Excel : 2010 FR
Version de Sheets : FR
Téléchargements : Mes applications

Message par Pedro22 » 26 février 2019, 15:49

Aussi, avec un petit fichier exemple, je pourrais te faire des propositions pour n'utiliser que des formules, sans passer par VBA.
Merci de prendre 30 sec pour lire la charte du forum.
Quelques conseils : ici
Répondre Sujet précédentSujet suivant
  • Sujets similaires
    Réponses
    Vues
    Dernier message