copier et coller ligne particulère

tessteur_tt

XLDnaute Nouveau
Bonjour,


Mon programme permet de rechercher un mot dans plusieurs feuilles excel.
Lorsque le mot a été trouvé, je voudrais pouvoir copier la ou les lignes ou apparait ce mot, et coller dans une feuille appelée "Resultats" à la ligne no_ligne_remplissage.

Merci de votre aide, c'est urgent
 

tessteur_tt

XLDnaute Nouveau
Re : copier et coller ligne particulère

Merci de ton aide Robert. C'est urgent parce que il faut que j'aille voir mon chef dans pas longtemps du tout ...

Voici mon code pour l'instant :


Private Sub Rechercher_Click()

Dim annee As String
Dim i As Integer
Dim j As Integer
Dim no_ligne_max As Integer
Dim no_ligne_remplissage As Integer
Dim mot As String

mot = TextBox1.Value

annee = 2008

no_ligne_remplissage = 2

While annee < 2014

Sheets(annee).Activate
no_ligne_max = Range("A65536").End(xlUp).Select

For i = 2 To no_ligne_max
For j = 1 To 11
If Cells(i, j).Value = mot Then
' copie la ligne
' et la colle dans l'onglet résultats à la ligne no_ligne_remplissage
'incrémenter no_ligne_remplissage = no_ligne_remplissage + 1
'sortir de la boucle qui incrémente j de 1 à 11 Endloop
End If
j = j + 1
Next
i = i + 1
Next

annee = annee + 1
Wend

'fermer la fenetre de recherche
'activer l'onglets résultats

End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : copier et coller ligne particulère

Bonjour Tessteur_tt, bonjour le forum,

Juste une remarque ta variable annee ne doit pas, il me semble, être déclaré comme String...
Ton code modifié (pas sûr d'avoir bien compris car sans fichier exemple j'ai pas testé...) :
Code:
Private Sub Rechercher_Click()
Dim annee As Integer
Dim i As Integer
Dim j As Integer
Dim no_ligne_max As Integer
Dim no_ligne_remplissage As Integer
Dim mot As String

mot = TextBox1.Value
annee = 2008
no_ligne_remplissage = 2
While annee < 2014
    With Sheets(annee)
        no_ligne_max = .Range("A65536").End(xlUp).Select
        For i = 2 To no_ligne_max
            For j = 1 To 11
                If .Cells(i, j).Value = mot Then
                    ' copie la ligne et la colle dans l'onglet résultats à la ligne no_ligne_remplissage
                    .Rows(j).Copy Sheets("résultats").Cells(no_ligne_remplissage, 1)
                    'incrémenter no_ligne_remplissage = no_ligne_remplissage + 1
                    no_ligne_remplissage = no_ligne_remplissage + 1
                    Exit For 'sortir de la boucle qui incrémente j de 1 à 11 Endloop
                End If
                j = j + 1
            Next
            i = i + 1
        Next
    End With
    annee = annee + 1
Wend
Unload Me 'fermer la fenetre de recherche
Sheets ("resultat") 'activer l'onglets résultats
End Sub
 

tessteur_tt

XLDnaute Nouveau
Re : copier et coller ligne particulère

Merci beaucoup l'ami.

Toutefois, ils me mettent plein de messages d'erreur. Je vais essayer de t'expliquer mieux.

En fait dans mon fichier excel j'ai 2 useform. Une me permettant de saisir des données qui vont ensuite se placer dans mes différentes feuilles excel nommées "2008" jusqu'à "2013".
ça je l'ai fait.

Maintenant je voudrais à partir de l'autre Useform que j'ai crée, pouvoir lorsque je saisi dans la TextBox1 un mot et lorsque j'appui sur un bouton Recherche nommé "Rechercher", que ça cherche dans TOUTES mes feuilles du classeur excel donc "2008" "2009" "2010" "2011" "2012" "2013", ce mot que j'aurais donc tapé dans le TextBox1. Et en fonction du mot que j'aurais tapé, cela va copier la ou les lignes ou apparait ce mot là et que celà copie la ou les lignes dans une autre feuille nommée "Resultats".

J'espère avoir été clair :s

Merci beaucoup Robert
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : copier et coller ligne particulère

Bonjour Tessteur_tt, bonjour le forum,

Tu vois, si tu avais envoyé un fichier on aurait perdu beaucoup moins de temps !
Une nouvelle proposition (non testée évidemment...) avec la methode Find qui évite une double boucle qui ralentit l'exécution du code :
Code:
Private Sub Rechercher_Click()
Dim mot As String 'déclare la variable mot
Dim annee As Integer 'déclare la variable annee
Dim o_année As String 'déclare la variable o_année (Onglet Année)
Dim dl As Integer 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim r As Range 'déclare la variable r (Recherche)
Dim pa As String 'déclare la variable pa (Première Adresse)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

mot = TextBox1.Value 'définit la variable mot
annee = 2008 'définit la variable annee
While annee < 2014 'boucle tant qu'annee est inférieur à 2014
    o_année = CStr(annee) 'définit la variable o_année
    With Sheets(o_annee) 'prend en compte l'onglet o_année
        dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne éditée de la colonne A de l'onglet o_année
        Set pl = .Range("A1:K" & dl) 'définit la plage pl (colonnes A à K)
        Set r = pl.Find(mot, , xlValues, xlWhole) 'définit la recherche r (Recherche "mot" dans la plage pl)
        If Not r Is Nothing Then 'condition : si il existe au moins une occurrence trouvée
            pa = r.addresse 'définit l'adresse de la première occurence trouvée
            Do 'exécute
                With Sheets("resultat") 'prend en compte l'onglet "resultat"
                    'définit la cellule de destination (A2, si A2 est vide, sinon la première ligne vide de la colonne A)
                    Set dest = IIf(.Cells(2, 1) = "", .Cells(2, 1), .Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
                End With 'fin de la prise en compte de l'onglet "resultat"
                Rows(r).Copy dest 'copie la ligne de l'occurrence trouvée et la colle dans dest
                Set r = pl.FindNext(r) 'redéfinit la recherche r (occurrence suivante)
            Loop While Not r Is Nothing And r.Address <> pa 'boucle tant qu'il existe des occurrences ailleurs qu'en pa
        End If 'fin de la condition
    End With 'fin de la prise en compte de l'onglet o-année
    annee = annee + 1 'incrémente la variable annee
Wend 'boucle
Unload Me 'fermer la fenetre de recherche
Sheets ("resultat") 'activer l'onglets résultats
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : copier et coller ligne particulère

Bonjour Tessteur_tt, bonjour le forum,

Alors désolé mais je ne peux plus rien pour toi...

[Edition]
En relisant je viens de voir une erreur (qui n'a rien à voir avec les . et les sheets...)
pa=r.address
e. Supprime le e
Code:
pa = r.Address
et ça devrait marcher...
 
Dernière édition:

Discussions similaires