Macro recherche puis enregistrer dans un nouveau classeur

walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012 - 2 avril 2012 à 08:39
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012 - 11 avril 2012 à 11:38
Bonjour, J'ai besoin de votre aide...

J'ai une très grande base de données que j'ai besoin de traiter..
Il s'agit d'une liste qui répertorie quantités d'informations, dates expédiés, date retour , ville client ...
je voudrais rechercher a l'aide d'une inputbox puis copier toutes les lignes dont une seule cellule contient un mot précis, puis les enregistrer vers un autre classeur avec le nom de la recherche effectuée .


Bref je vois pas trop comment m'y prendre..
Si vous avez des idées.
Merci

29 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
2 avril 2012 à 08:48
Bonjour,
Sois plus précis :
je voudrais rechercher a l'aide d'une inputbox puis copier toutes les lignes dont une seule cellule contient un mot précis

ce "mot précis" est-il toujours dans une colonne connue ou peut-il se trouver dans n'importe quelle colonne ? (car c'est loin d'être pareil).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
2 avril 2012 à 09:08
Bonjour merci d'avoir répondu aussi vite donc ce mot précis il peut se trouver dans n'importe quelle colonne , a partir de ce mot quand la recherche et effectuée je voudrai qu'il copie toutes les lignes contenant ce mot puis il enregistre les lignes dans un nouveau classeur au nom du mot rechercher , voila j’espère être plus précis .
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
2 avril 2012 à 10:24
Il te suffit alors d'utiliser la méthode Find (Range.Find), en itération, telle qu'exposée dans ton aide VBA (l'exemple d'utilisation qui y est montré est quasiment ce que tu cherches à faire).
et : pour chaque cellyule correspondante :
--- lire sa propriété Row
--- puis lire la ligne entière (entirerow) et :
-- utiliser la méthode Copy (avec son argument destination), à lire dans ton aide en ligne, où elle est également assortie d'un exemple. Il te faudra définir la ligne de destination de la feuille d'accueil, de sorte à ce qu'elle soit la ligne juste après la dernière remplie. Bien == >>
Pour cela : intéresse-toi à specialcells(xlCellTypeLastCell).

Voilà de quoi commencer à t'y mettre d'abord seul .
Reviens avec ton code d'essai si encore difficulté après ces lectures de ron aide VBA.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
2 avril 2012 à 10:44
donc j'ai commence par faire l'inputbox mais je bloque pour la fonction (range.find) je n'est pas d'aide dans VBA

voici le code que j'ai fait , il permet de lancer l'inputbox
Sub RechercheX()
cherch = InputBox("Tapez le mot recherché")
If cherch = "" Then Exit Sub

End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
2 avril 2012 à 11:07
je n'est pas d'aide dans VBA

Installe-la donc d'urgence.
Nul (même les plus avancés) ne sauraient valablement développer sans cette aide !
Il est impératif que tu l'installes donc.
Regarde la dernière phrase de ma signature
A plus (quand tu l'auras installée et lue, cette aide).


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
2 avril 2012 à 11:29
Je voulais l'installer mais je suis en entreprise et je ne suis pas Administrateur donc je peut rien faire mais j'ai réussi a mon avis voici le code pouvez vous me dire si le début et correcte
Sub Recherche()
cherch = InputBox("Tapez le mot recherché")
If cherch = "" Then Exit Sub
With Worksheets(1).Range(Find)
    Set c = .Find(2, LookIn:=xlValues)
    If Not c Is Nothing Then
        Do
         With Worksheets(1).EntireRow
          With Worksheets("Sheet1").Range("A1:z500").Copy _
    Destination:=Workbooks("name.xls").Worksheets("Sheet1").Activate
    
End With

End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
2 avril 2012 à 11:47
Ca ne l'est pas.
Mais, surtout : cela met on ne peut plus en évidence des carences fondamentales.
Désolé, mais sans ton aide VBA ===>> tu ne peux t'en sortir (et je ne serai pas là pour simplement remplacer son absence).
Bonne chance.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
2 avril 2012 à 11:53
OK, bon je vais voir merci pour les astuces .
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
2 avril 2012 à 14:34
donc voila j'ai adapter une macro trouver par contre la fin je n'arrive plus a comprendre il faut que je crée un nouveau classeur .




Sub LignesMotRecheche()
Dim S As Workbooks
Dim rep
Dim R As Range
Dim var
Dim dep&
Dim i&
Dim j&
Dim k&
Dim cpt&
Dim T()
Dim A$
Dim B$
rep = Application.InputBox("Tapez le mot à rechercher", "Lignes contenant le mot recherché")
If rep False Or rep "" Then Exit Sub
B$ = LCase(rep)
Set R = ActiveSheet.UsedRange
dep& = R.Row
var = R
For i& = 1 To UBound(var, 1)
  For j& = 1 To UBound(var, 2)
    A$ = LCase(Trim(var(i&, j&))) 'commodité d'écriture
    If InStr(1, A$, B$) > 0 Then
      cpt& = cpt& + 1
      ReDim Preserve T(1 To UBound(var, 2) + 1, 1 To cpt&)
      T(1, cpt&) = i& + dep& - 1
      For k& = 1 To UBound(var, 2)
        T(k& + 1, cpt&) = var(i&, k&)
      Next k&
      Exit For
    End If
  Next j&
Next i&
If cpt& = 0 Then
  MsgBox "Aucune occurence de ''" & rep & "'' n'a été trouvée."
  Exit Sub
Else
  Set S = books.news(before:=ActiveSheet)

  R = Application.WorksheetFunction.Transpose(T)
End If
End Sub
0
Utilisateur anonyme
2 avril 2012 à 17:14
Bonjour,


Une chose élémentaire si on n'a pas l'aide installée, un moteur de recherche.

Et puis, tu pourras dire, de ma part, à ton Service de Dictature Informatique qu'ils sont juste des ... (Demander au capitaine Haddock pour avoir la liste complète)
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
3 avril 2012 à 10:31
ok sympa
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
10 avril 2012 à 11:33
Salut donc a partir de ce que tu ma fournis , j'ai réussi a crée une macro qui fait se que je voulais , le seul problème et que je n'arrive pas a l’étendre a plusieurs feuilles et aussi a la coller sur d'autres classeur ,je ne comprends pas pourquoi , si tu pouvez y jeter un coup d’œil cdlt .

Sub UNI()



Dim NoDoub As New Collection
Dim item, recherche
Dim cel As Range, value

 value = Application.InputBox("Valeur à rechercher :", Type:=1 + 2)
  If Len(value) 0 Or value False Then Exit Sub
With Application.Worksheets("Restitution qualité 2")

On Error Resume Next
    For Each cel In .Range("c2:c" & .Range("c" & Rows.Count).End(xlUp).Row)
        NoDoub.Add cel.value, CStr(cel.value)
    Next cel
On Error GoTo 0
    
    
End With
Dim article
Dim i As Long
Application.ScreenUpdating = False
Sheets.Add after:=Sheets(Sheets.Count)
With Application.Worksheets("Restitution qualité 2")
    .Range("A1:Z1").Copy Sheets(Sheets.Count).Range("A1")
    For i = 2 To .Range("c" & Rows.Count).End(xlUp).Row
        If .Range("c" & i) = value Then
            .Range("a" & i & ":Z" & i).Copy Sheets(Sheets.Count).Range("A" & Sheets(Sheets.Count).Range("A" & Rows.Count).End(xlUp).Row + 1)
        End If
    Next
End With
ActiveSheet.Move
On Error Resume Next 'cas si le fichier existe déjà
ActiveWorkbook.SaveAs value & ".xls"

Application.ScreenUpdating = True
End Sub
0
Utilisateur anonyme
10 avril 2012 à 17:37
Bonjour,

Pour passer toutes les feuilles d'un classeur on peut boucler de cette façon:

For each sheet as worksheet in activeworkbook.sheets
    if sheet.name = "Hector" then
        Range("a1").value = "Hector 'Toe' Blake"
    elseif sheet.name = "Pierre"
        Range("a1").value = "Bye Bye le con à Gauthier"
    else
    end if
next
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
10 avril 2012 à 17:49
salut , j'ai tester de l'incorporer mais sa fonctionne pas , sympa le commentaire ^^.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
10 avril 2012 à 18:19
Tiens tiens, Marc !
Tu serais journaliste ("des fois"...hé hé!) que cela ne m'étonnerait pas
Mais je te donne raison: J. Martin était mieux que ce ... (ton adjectif)..., qui n'a rien trouvé de mieux que de faire appel à un entraîneur anglophone (et ne parlant que l'anglais). Quelle drôle d'idée.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
10 avril 2012 à 18:29
Un petit cadeau quand-même pour toi :



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
11 avril 2012 à 10:30
Bonjour veuillez svp supprimer ce poste , car il ya des personnes qui viennent y foutre la merde cdlt .
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
11 avril 2012 à 10:41
Salut, walyddu59
Tu n'as pas un peu l'impression de ce que tu es quelque peu à côté de la plaque ?
Un minimum de connaissances en VBA t'aurait permis de corriger le code de cmarcotte.
Regarde ce que fait ceci :

Dim she As Worksheet
For Each she In ActiveWorkbook.Sheets
    MsgBox sh.Name
Next


je te laisse le soin de mettre les expressions conditionnelles de ton choix à la place du msgbox, hein, quand-même ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
walyddu59 Messages postés 53 Date d'inscription jeudi 29 mars 2012 Statut Membre Dernière intervention 9 juin 2012
11 avril 2012 à 10:46
salut, ucfoutu

si je m'inscris sur un site d'aide c'est pourquoi a ton avis , au lieu de juger constamment mon niveaux ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 209
11 avril 2012 à 10:46
Et ce qui n'est vraiment pas sérieux, mais alors pas du tout :
donc j'ai commence par faire l'inputbox mais je bloque pour la fonction (range.find) je n'est pas d'aide dans VBA

Relis ce que je t'en ai dit plus haut, s'il te plait, car on ne risque pas (et toi encore moins) de développer sérieusement dans de telles conditions, sauf à te mettre en mesure de te contenter de copier/coller ce que l'on écrirait à ta place, hein ...



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
Rejoignez-nous