Vérifier plusieurs string avec des conditions différentes

Bonjour à toutes et à tous,

J'ai besoin du moyen le plus pratique pour mon cas ci-dessous.

J'ai 5 bases de données à vérifier dans 5 feuilles différentes et dans lesquelles je dois checker si un bout de texte apparaît...

les conditions de texte sont tout le temps les mêmes à vérifier et je trouve bête de les récrire à chaque fois et en suite j'aimerai le type d'article pour la suite du code.

Voici un petit exemple ci-dessous :

Sub CheckString()

Dim wb As Workbook, Data As Worksheet

Set wb = Workbooks("classeur1")
Set Data = wb.Sheets("Data")

'Base 1

For x = 1 To 4

value = Data.Cells(x, 1).value

If value Like "*frigo*" Or value Like "*réfrigérateur*" Then

Data.Cells(x, 1).value = value & "1"

Article = "Frigo"

ElseIf value Like "*plaque*" Or value Like "*induction*" Then

Data.Cells(x, 1).value = value & "2"

Article = "plaque"

End If

'du code....

'Base 2

value = Data.Cells(x, 1).value

If value Like "*frigo*" Or value Like "*réfrigérateur*" Then

Data.Cells(x, 1).value = value & "1"

Article = "Frigo"

ElseIf value Like "*plaque*" Or value Like "*induction*" Then

Data.Cells(x, 1).value = value & "2"

Article = "plaque"

End If

'du code....

'Base 3

value = Data.Cells(x, 1).value

If value Like "*frigo*" Or value Like "*réfrigérateur*" Then

Data.Cells(x, 1).value = value & "1"

Article = "Frigo"

ElseIf value Like "*plaque*" Or value Like "*induction*" Then

Data.Cells(x, 1).value = value & "2"

Article = "plaque"

End If

'du code....

'Base 4

value = Data.Cells(x, 1).value

If value Like "*frigo*" Or value Like "*réfrigérateur*" Then

Data.Cells(x, 1).value = value & "1"

Article = "Frigo"

ElseIf value Like "*plaque*" Or value Like "*induction*" Then

Data.Cells(x, 1).value = value & "2"

Article = "plaque"

End If

Next x

End Sub

bonjour, comme ça ?

Sub CheckString()

     Dim wb As Workbook, Data As Worksheet, iBase

     Set wb = Workbooks("classeur1")

     For iBase = 1 To 4
          Select Case iBase
               Case 1: Set Data = wb.Sheets("Data1")
               Case 2: Set Data = wb.Sheets("Data2")
               Case 3: Set Data = wb.Sheets("Data3")
               Case 4: Set Data = wb.Sheets("Data4")
               Case Else: MsgBox "erreur": Exit Sub
          End Select

          For X = 1 To 4

               value = Data.Cells(X, 1).value

               If value Like "*frigo*" Or value Like "*réfrigérateur*" Then

                    Data.Cells(X, 1).value = value & "1"

                    Article = "Frigo"

               ElseIf value Like "*plaque*" Or value Like "*induction*" Then

                    Data.Cells(X, 1).value = value & "2"

                    Article = "plaque"

               End If
          Next
     Next

End Sub

Bonjour,

c'est vraiment comme ça que je l'imaginais !

As-tu une idée de comment combiner avec ce code un Range.find et un FindNext ?

Car avec un même numéro je dois rechercher la 1ère occurence que je dois tester au conditions puis tous les FindNext...

D'avance merci de ton retour.

Re,

Est-il possible de mettre qu'une seule fois les conditions pour la 1ère occurrences trouvées et que les conditions restent pour le FindNext ?

Car dans mon cas je dois répéter 2x toutes les conditions...

En tout cas merci pour ton "Case Select" qui m'a permis de bien mieux comprendre cette fonction !

voici un exemple :

Dim wb As Workbook

Set wb = Workbooks("Classeur1")
Set Saisie = wb.Sheets("Saisie")

For iBase = 1 To 4

Select Case iBase

Case 1: Set Data = wb.Sheets("Base1")
Case 2: Set Data = wb.Sheets("Base2")
Case 3: Set Data = wb.Sheets("Base3")
Case 4: Set Data = wb.Sheets("Base4")

End Select

Set lRow = Data.Range("A" & Rows.Count).End(xlUp)
lRow = lRow.Row

For x = 1 To lRow

VE = Saisie.Cells(x, 1).value

With Data.Range("A1:A" & lRow)

Debug.Print "Range : " & "iBase : " & iBase & " " & Data.Range("A1:A" & lRow).Address

Set Find = .Find(VE, LookIn:=xlValues)

If Not Find Is Nothing Then

'Ici mettre les conditions

Data.Cells(x, 2).value = "y"

 Do

                Set Find = .FindNext(Find)

                'Ici mettre les conditions

                Data.Cells(x, 2).value = "y"

            Loop While Not Find Is Nothing
        End If
    End With

Next x

Next

MsgBox ("END")

End Sub

bonjour,

alors on doit vérifier chaque plage 4 fois, une fois pour chaque mot et on rassemble ces cellules dans 2 plages UN1 et UN2

Sub Vincent()
     Dim UN1 As Range, UN2 As Range, aArr, sFA, s

     Set wb = ThisWorkbook
     aArr = Array("frigo", "refrigérateur", "plaque", "induction")     'les 4 mots à trouver

     For iBase = 1 To 4

          Select Case iBase

               Case 1: Set Data = wb.Sheets("Base1")
               Case 2: Set Data = wb.Sheets("Base2")
               Case 3: Set Data = wb.Sheets("Base3")
               Case 4: Set Data = wb.Sheets("Base4")

          End Select

          With Data
     '****************************************************************************
     'UN1= plage avec les 2 premiers mots, UN2 = plage avec les 2 derniers mots sans les 2 premiers mots
     '****************************************************************************
               Set UN1 = Nothing: Set UN2 = Nothing     'RAZ ces 2 plages avec ces mots
               Set c = .Range(.Range("A1"), .Range("A" & Rows.Count).End(xlUp)).Offset(, 1)     'plage en colonne B à vérifier
               For x = 0 To UBound(aArr)     'boucle les 4 mots
                    sFA = ""     'RAZ first address
                    Set c1 = c.Find(aArr(x), lookat:=xlPart)     'première cellule avec ce mot
                    If Not c1 Is Nothing Then
                         fa = c1.Address     'addresse première cellule
                         Do     'boucle
                              If x <= 1 Then     'pour les 2 premiers mots
                                   Set UN1 = Union(c1, IIf(UN1 Is Nothing, c1, UN1))     'plage avec toutes les cellules qui contiennent un des 2 premiers mots
                              Else
                                   b = UN1 Is Nothing
                                   If Not b Then b = Intersect(UN1, c1) Is Nothing
                                   If b Then Set UN2 = Union(c1, IIf(UN2 Is Nothing, c1, UN2))     'exclure que la cellules aussi contient un des 2 premiers mots
                              End If
                              Set c1 = c.Find(aArr(x), lookat:=xlPart, after:=c1)
                         Loop While c1.Address <> fa
                    End If
               Next
          End With

          s = ""
          If Not UN1 Is Nothing Then
               s = s & vbLf & "plage avec les 2 premier mots : " & UN1.Address
               UN1.Offset(, 11).Value = "Valeur1"     'colonne M est 11 colonnes vers droite >> mettez "valeur1" dans ces cellules
          End If

          If Not UN2 Is Nothing Then
               s = s & vbLf & "plage avec les 2 dernier mots : " & UN2.Address
               UN2.Offset(, 11).Value = "valeur2"
          End If

          If Len(s) Then MsgBox Mid(s, 2), vbInformation, UCase(Data.Name) Else MsgBox "rien", vbInformation, UCase(Data.Name)

     Next
End Sub

Re,

Merci pour ta réponse rapide !

c’est dans ces moments là que je me rends compte que j’ai un niveau moyen en VBA Ahahah.

je pense à avoir saisi le truc, par contre imaginons que j’ai plus que 4 mots ?

Par exemple : j’ai 15 articles à vérifier et pour chacun de ces articles il peut avoir (plusieurs conditions) en fonction du texte codifié de l’article…

Exemple:

FrigoArray(….

PlaqueArray(..

RobinetArray (« robinet, mitigeur)

Jusqu’à 15-20 array.. (le nombre de possibilités de recherche par array peut être totalement différent en fonction de l’article..)

c’est toujours possible?

autre méthode :

on a un tableau avec tous les mots dans sa premiere colonne et le texte que vous voulez voire dans sa 2ième colonne. Quand on inspecte la formule, on vera un "MAX" là-dedans, donc s'il y a plusieurs matches, le mots qui se trouve le plus en bas sera le résultat. Donc il faut trier le tableau de cette manière que les mots les plus important se trouvent en bas.

Maintenant avec une formule on peut faire des recherches. Il faut savoir que ce sont des formules matricielles qui consomment beaucoup du processeur. Donc c'est mieux de limiter le nombre de ces formules. On peut faire cela, en remplaçant la formule par sa valeur.

Le nombre de lignes dans ce tableau n'est pa limité, mais augmentera le temps de recalculation.

2vincent.xlsm (50.88 Ko)
Sub Vincent2()
     With Sheets("blad1")
          Set c = .Range("B1").Resize(1000)     'une plage de 1.000 cellules

          With c
               .FormulaR1C1 = "=""aaaaaaatekst"" & TEXT(RANDBETWEEN(1,99),""00"") & ""bbbbbb"""     'un texte aleatoire dans ces 1.000 cellules
               .Value = .Value     'remplacer la formule par sa valeur
          End With

          With c.Offset(, 5)     '5 colonnes vers droite
               .Formula2R1C1 = "=IFERROR(INDEX(Tabel1[reponse],1/(1/MAX(ISNUMBER(SEARCH(Tabel1[texte],RC[-5]))*ROW(Tabel1[texte])))-ROW(Tabel1[[#Headers],[reponse]])),""?"")"     'formule
     ' .Value = .Value   '>>>>> plus tard remplacer la formule par sa valeur
          End With
     End With
End Sub

Bonjour,

merci de ton retour.

J'ai essayé et ça marche, je vais partir sur ta solution.

Je te remercie encore ! Bien joué !

Rechercher des sujets similaires à "verifier string conditions differentes"