Extraire données d'un "like"

Salut à tous,

Je commence à me mettre au VBA, et j'ai un petit soucis avec une fonction... Je cherche à trier des lignes à partir d'un code variable, et à extraire ce même code dans une autre cellule.

Mon code est de la forme A####, avec # un chiffre, j'ai donc utilisé

If Cells(ligne, colonne) Like "*" & "A####" & "*" Then

pour pouvoir trouver les cellules qui contenaient ce code, mais j'aimerais ensuite garder ce code en mémoire, mais je ne sais pas comment le récupérer ou le garder en mémoire à partir des #...

Auriez vous des idées pour moi ?

Merci d'avance

Bonsoir

Je ne suis pas sûre d'avoir compris.

Mais si tu veux garder des valeurs en mémoire, tu dois les mettre dans une variable que tu auras déclarée en Public.

Est-ce cela ??

Teste et dis-moi

Bye

Bonjour Patty, merci de ta réponse !

En fait mon but est de garder uniquement les lignes qui contiennent ce type de numéro A#### (c'est à dire A1234, A8888 etc...), mais aussi de savoir quel est ce code trouvé dans chaque ligne. Sauf que la fonction like ne renvoie que VRAI ou FAUX, je ne sais pas si je peux attribuer le numéro à une variable... En gros, ma fonction devrait donner ça, mais je ne sais pas comment écrire la ligne en commentaire :

For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row

If Cells(ligne, 1) Like "*" & "A####" & "*" Then
'dans ce cas, écrire le numéro A#### dans Cells(ligne , 2)

Else Rows(ligne).Hidden = True

Next

Je ne sais pas si c'est plus clair ?

Bye !

Bonjour

For ligne = 2 To Range("A" & Rows.Count).End(xlUp).Row
    If Cells(ligne, 1) Like "*" & "A####" & "*" Then
        Cells(ligne, 2) = Cells(ligne, 1)
    Else
        Rows(ligne).Hidden = True
    End If
Next

Dis-moi

A+

Le problème c'est qu'il y a du texte en plus du numéro dans chaque cellule... Et il ne me faut que le numéro, pas le reste...

J'ai trouvé cette fonction, mais elle est assez lente, je ne sais pas si il y a moyen de l'optimiser (j'ai plusieurs milliers de lignes à tester...) :

If Cells(ligne, 1) Like "*" & "A####" & "*" Then
    p = 1
    Code= ""
        Do While p <= Len(Cells(ligne, 1)) - 4 And Code= ""
            If Mid(Cells(ligne, 1), p, 5) Like "A####" Then
                Code= Mid(Cells(ligne, 1), p, 5)
            Else: p = p + 1
            End If
        Loop
    Cells(ligne, 3) = Code

Bonjour,

tu as la possibilité de joindre un fichier (anonymisé)

P.

Bonjour Patrick,

Voilà un exemple du fichier ! Finalement le code n'est pas si lent... Si vous voyez un point qui peut être amélioré, je prends avec plaisir, sinon ça ira comme ça

A plus !

9test.xlsm (25.54 Ko)

re tous:)

Ceci irait ?

P.

Sub Extraire()
Dim a, I&
Dim Code
Dim Tblo
Dim t
t = Timer
Application.ScreenUpdating = False
a = [A1].CurrentRegion.Value
[D:D].Clear
ReDim Tblo(1 To UBound(a), 1 To 1)
For I = LBound(a) To UBound(a)
     If a(I, 1) Like "*" & "A####" & "*" Then
      p = 1
      Code = ""
      Do While p <= Len(a(I, 1)) - 4 And Code = ""
         If Mid(a(I, 1), p, 5) Like "A####" Then
            Code = Mid(a(I, 1), p, 5)
            'Debug.Print Mid(a(I, 1), p, 5)
         Else
            p = p + 1
            'Debug.Print Mid(a(I, 1), p, 5)
         End If
      Loop
      Tblo(I, 1) = "Code = " + Code
   End If
Next
[D1].Resize(UBound(Tblo)) = Tblo
MsgBox (Timer - t)
End Sub

Wow, je ne comprends pas grand chose à la fonction, mais elle est parfaite :-O

Je vais essayer de comprendre comment elle est faite, ça va me permettre de découvrir des nouveaux opérateurs !

Merci Patrick

Rechercher des sujets similaires à "extraire donnees like"