VBA boucle ou sélection multiple

Petit1986 -  
 Petit1986 -
Bonjour,
Je cherche à utiliser la fonction "recheche" d'Excel et que toutes les valeurs trouvée soit copier dans une autre feuille. Mais j'ai des petits souci de boucle... Aidez moi SVP !!
Ci dessous le code :

Sub recherche()
'
' recherche Macro
'
On error Goto message_box
Cells.Find(What:="blablabla", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate 'fonction recherche
ActiveCell.Copy
Sheets("Feuil3").Select
Range("A1").Select
ActiveSheet.Paste
Sheets("Feuil1").Select 'copie et colle le résultat contenant blablabla

Do Until Cells.FindNext(After:=ActiveCell).Value <> Sheets("Feuil3").Range("A1").Value
'en théorie çà doit faire, jusqu'à ce que la valeur trouver soit égale à la première
ActiveCell.Copy
Sheets("Feuil3").Select
Cells.Find(What:="", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
, SearchFormat:=False).Activate
ActiveSheet.Paste 'copie et colle dans la première cellule vide de la colonne ASheets("Feuil1").Select
Loop 'fait la boucle pour tout trouver

'mais çà, çà marche pas !!

message_box: Dim Msg, Style, Title, Help, Ctxt, Response, MyString
Msg = "Il n'y a pas d'éléments comprenant la valeur souhaitée ou ERREUR" ' Définit le message.
Style = vbDefaultButton2 ' Définit les boutons.
Title = "Information " ' Définit le titre.
Help = "DEMO.HLP" ' Définit le fichier d'aide.
Ctxt = 1000 ' Définit le contexte de la rubrique.
' Affiche le message.
Response = MsgBox(Msg, Style, Title, Help, Ctxt)

End Sub

Merci de m'aider, parce que çà fait un petit moment que je cherche sans réussite !!
PS : je crois que vous l'aurez remarqué, je débute...
Merci
Bye
Petit1986
Configuration: Windows XP Internet Explorer 7.0

3 réponses

  1. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    tu mélanges la source et le but.
    Essaie ça!
    Attention les données en feuille 3 ne sont pas effacées et viennent s'ajouter dans la colonne A

    Sub recherche()
    '
    ' recherche Macro
    '
    On Error GoTo message_box
    Sheets("feuil1").Select
    
    'Cells.Find(What:="blablabla", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate 'fonction recherche
    'ActiveCell.Copy
    
    With Worksheets("feuil1").Range("a1:a500")
        Set c = .Find("blablabla", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Copy
                Sheets("feuil3").Select
                Range("A65535").End(xlUp).Offset(1, 0).Select
                ActiveSheet.Paste
                Sheets("feuil1").Select
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    
    
    message_box: Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = "Il n'y a pas d'éléments comprenant la valeur souhaitée ou ERREUR" ' Définit le message.
    Style = vbDefaultButton2 ' Définit les boutons.
    Title = "Information " ' Définit le titre.
    Help = "DEMO.HLP" ' Définit le fichier d'aide.
    Ctxt = 1000 ' Définit le contexte de la rubrique.
    ' Affiche le message.
    Response = MsgBox(Msg, Style, Title, Help, Ctxt)
    
    End Sub
    0
    1. Petit1986
       
      Merci de ta réponse, mais çà ne marche pas !

      il me met directement sur le message d'erreur...

      Je creuse encore, mais si t'as d'autres idées, je suis preneur...

      Mais merci de ta réponse
      0
  2. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    j'avais laissé le message pour te faire plaisir, mais de cette manière la macro
    ne passera jamais dans le message car la boucle infinie est traitée avec le contrôle de la première adresse
    et les vides sont exclus saauf si ce que tu recherche n'existe pas.

    donc 1°) la macro fonctionne ( je vérifie ce que je post)
    2°) tu aurais pu vérifié le résultat en feuille 3 à partir de laligne A2 avant de dire " ça marche pas"
    3°) il est normal que le message se soit affiché, j'ai ajouté une ligne noté en gras
    4°) Note que tu peux remplacer "blablabla par une variable.

    Sub recherche()
    '
    ' recherche Macro
    '
    On Error GoTo message_box
    Sheets("feuil1").Select
    
    
    With Worksheets("feuil1").Range("a1:a500")
        Set c = .Find("blablabla", LookIn:=xlValues)
        If Not c Is Nothing Then
            firstAddress = c.Address
            Do
                c.Copy
                Sheets("feuil3").Select
                Range("A65535").End(xlUp).Offset(1, 0).Select
                ActiveSheet.Paste
                Sheets("feuil1").Select
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> firstAddress
        End If
    End With
    GoTo fin
    
    message_box: Dim Msg, Style, Title, Help, Ctxt, Response, MyString
    Msg = "Il n'y a pas d'éléments comprenant la valeur souhaitée ou ERREUR" ' Définit le message.
    Style = vbDefaultButton2 ' Définit les boutons.
    Title = "Information " ' Définit le titre.
    Help = "DEMO.HLP" ' Définit le fichier d'aide.
    Ctxt = 1000 ' Définit le contexte de la rubrique.
    ' Affiche le message.
    Response = MsgBox(Msg, Style, Title, Help, Ctxt)
    
    fin:
    
    s = MsgBox("Tout s'est bien passé!", vbOKOnly, "Sortie du programme")End Sub
    0
  3. Bidouilleu_R Messages postés 1209 Statut Membre 296
     
    Oups!
    j'ai oublié la ligne en gras

    Goto Fin

    et bien sur

    Fin:
    end sub
    0
    1. Petit1986
       
      Merci,
      J'ai failli remettre, "çà marche pas !!" mais ayant plus de doute sur mes capacité que sur les tiennes, j'ai creusé un peu et essayé de comprendre parce que je pense bien que tu vérifies tes post !
      Mais oui, çà marche !
      C'est juste que j'avais besoin d'adapter la macro à ma problèmatique car en effet je ne cherche pas "blablabla" mais bien une variable !!
      Merci encore
      A+
      Bye
      0