VBA problème boucle et/ou recherche

Signaler
Messages postés
9
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
18 janvier 2011
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
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 A
Sheets("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

13 réponses

Messages postés
78
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
21 juin 2010
1
Voici un bout de code qui te permet de rechercher tes données et de les mettres en collection. A toi après d'utiliser la collection pour mettre tes données dans une autre feuille :)

Sub recherche(ByVal ValueToFind As String, ByVal PlageToFind As String)
Dim collectionOfFindItem As New Collection

If ValueToFind "" Or PlageToFind "" Then
    MsgBox "La string a chercher ou la plage de recherche n'est pas définie", vbExclamation
    Exit Sub
End If

On Error GoTo ERR_BOX

Set collectionOfFindItem = Nothing

With Worksheets(1).Range(PlageToFind)
    
    Set c = .Find(ValueToFind, LookIn:=xlValues)
    
    firstAddress = c.Address
    
    If firstAddress <> "" Then
    
        collectionOfFindItem.Add (c.Address & "=" & c.Value)
        
        Do
            Set c = .FindNext(c)
            If c.Address <> "" Then collectionOfFindItem.Add (c.Address & "=" & c.Value)
        Loop Until c Is Nothing Or c.Address = firstAddress
                  
    End If
   
End With

ERR_BOX:
Dim ex As ErrObject
MsgBox ex.Number & " : " & ex.Description

End Sub

Cdrlt,

BAZ187REM
Messages postés
9
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
18 janvier 2011

Merci !!
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
petit1986 ayant écrit :
que toutes les valeurs trouvée soit copier dans une autre feuille


est-on bien certain, baz187rem, qu'il faille là utiliser ou passer par une collection ?



____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Messages postés
2
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
9 décembre 2009


[^^confus3]

[^^!1]
Messages postés
2
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
9 décembre 2009

[^^!1]
[^^!1]
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour, Alexandria,
T'est-il possible d'exprimer de manière détaillée la raison de tes smileys (ils ne me "parlent" pas suffisamment.
Je t'écoute ...


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Messages postés
78
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
21 juin 2010
1
Bah je trouve ca sympa. J'adore les collections. Au moins t'évite comme dans son exemple de changer de feuille a tout va. Tu traites ta feuille, tu met ton résultat en collection puis après tu affiches ce que tu as dans ta collection dans ta nouvelle feuille.

Enfin bon c'est mon point de vue... Je rappelle que dans son cas ca fontionnais pas... et moi j'ai tout mis dans une collection qui fonctionne
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Pour fonctionner, çà fonctionne, bien évidemment... (personne n'a dit le contraire )

Imagine maintenant une collection d'une dizaine de millier de membres !
Et qui a parlé de chager une feuille à tout va ? ===>>> toi seul ! (alors qu'un simple tableau dynamique, utilisé une seule fois, suffit).
Mais bon. Le demandeur est satisfait ? Toi également ? N'en parlons donc plus ...

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Messages postés
78
Date d'inscription
vendredi 23 mars 2007
Statut
Membre
Dernière intervention
21 juin 2010
1
Ha bon on peut faire des tableaux dynamique en vba ? En meme temps on pourrait passer par des hash table j'aurai fait cette partie la qu'a une collection toute bete.

En ce qui concerne le changement de fueille ce n'ai pas moi qui en ai parler dans la demande d'aide puique cette dernière n'a pas été formulée par mes soins.

Bref toi aussi tu peux contribuer... Donne nous ta solution :) Je suis preneur de tout exemple.

je rappelle qu'en meme temps j'aide dans la limite du possible les gens sur mon temps de travail (c'est pas sérieux lol) et que je ne passe pas à coté des demandes qui n'ont jamais eu de réponses (meme si je suis pas a l'aise sur certains sujet)

j'ai consacré 10 minutes sur cette aide peut etre que j'aurai du m'abstenir...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Ha bon on peut faire des tableaux dynamique en vba ?

Pardi ! (étonnante ta question !)
J'ajoute une question à ta place, maintnant :
"Peut-on charger dans une feuille, d'un seul coup (et donc sans boucle) le contenu d'un tableau dynamique ?"
Et la réponse est également : pardi ! (et de la manière la plus élémentaire)

Mais c'est au demandeur, que j'exposerai ces choses-là, s'il en émet le souhait
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Messages postés
9
Date d'inscription
vendredi 6 novembre 2009
Statut
Membre
Dernière intervention
18 janvier 2011

Non mais les gars, merci d'avoir passé du temps sur mon pb !!
Je suis également preneur de toute "inovation" à ma culture Excel !
Donc si ya des idées qui divergent complètement de mon idée de départ, je prend !!
Après je fait le tri de ce qui me semble le mieux adapté à ma problématique et mes compétences...
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Il ne s'agit pars d'une "innovation", petit1986, mais de l'utilisation plus rationnelle de VBA et d'Excel (en te rappelant qu'une feuille Excel est en soi un tableau dynamique elle-même )


Comment procéder pour te faire comprendre certains mécanismes ?
Par un exemple, peut-être ...
Ainsi, tiens :

Sub Bouton1_Clic()
 Dim tablo() As Variant, plage2 As Range
 ReDim tablo(1)
 tablo(0) = 117242
 ajoutons tablo, "ajout1"
 ajoutons tablo, 8888
 ajoutons tablo, "ajout3"
 Feuil2.Activate
 Range(Cells(1, 1), Cells(1, UBound(tablo) + 1)) = tablo
End Sub
Private Sub ajoutons(tablo As Variant, quoi As Variant)
  ReDim Preserve tablo(UBound(tablo) + 1)
  tablo(UBound(tablo)) = quoi
End Sub



Tu mets ton bouton sur la feuille feuil1 et cliques dessus ===>> regarde ce qui se passe sur la feuille 2 (tu devrais comprendre l'essentiel)

Tu remarques une sub que j'ai appêlée ajoutons, n'est-ce pas ?
Comme tu le vois, elle rajoute des articles au tableau dynamique tablo..
Tu devine tout le reste : au lieu d'alimenter une collection, tu ajoutes tout simplement des valeurs au tableau dynamique tablo (par tes findnext).
In fine : tu actives la feuille Feuil2 et y injecte, où tu veux et d'un seul coup, le contenu de tablo.
Voilà tout ...
____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Ah oui !
Je t'ai dit ce qu'il fallait pour insérer à l'horizontale dans la feuille2
Si tu préfères étaler à la verticale (c'est un tout petit peu différent) tu dis, bien sûr ...

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !