Bouton pour executer une recherche sur plusieurs feuilles
Bonjour à tous,
Avant tout, merci a ceux qui m'ont aidé auparavant, il y à quelques mois maintenant!!
Mon problème aujourd'hui est que j'ai un bouton sur mar feuille excel, et il faudrai que, en appuyant dessus cela me fasse une recherche de "Nom" sur les autres feuilles afin d'avoir la ou les personnes correspondant au nom rentrer par la personne.
Mon réel problème et que je ne sais pas ou coder en VB ( Dans la feuille, "dans le bouton").
Je reste continuellement un débutant en Excel car je ne l'utilise que très rarement!
Si vous savez comment je dois faire, je vous en remercie d'avance.
Cordialement,
Kris
-- Ven Juil 16, 2010 10:13 am --
J'ai réussi a écrire un ptit bout de code dans le "(Général)", mais ca ne marche pas!
Sub BtnExec_Clic()
Dim RechNom As String
RechNom = Feuil1.Cells("C6")
If Rechnom = Feuil2.range("D4:D60") Then
Feuil1.Range("G6:J6") = Feuil2.Range("D.Rechnom:D+3)
End if
End Sub
Alors mon erreur est qu'en fait même avec quelque chose écrit dans feuil1.C6, et bien, au niveau de RechNom=.... il n'y à aucune valeur.
Ai-je fais le code au bon endrois?
Ai-je fais une erreur de code(surement)?
Bonjour kris0311,
Peux-tu envoyer un bout de fichier pour que l'on adapte un code ? Car là on connait pas trop la structure de tes données.
Oui bien sur, par contre j'ai supprimer quelques données 'nom, numero de tel...)
Cordialement,
Kris
Re,
Voici une solution :
Sub BtnExec_Clic()
Dim RechNom As String, firstAddress As String
Dim i As Byte, derlign As Long, derLignTemp As Long
Dim c As Range
RechNom = Sheets("Recherche").[C6] 'adresse du nom que l'on recherche
Range("G6:J" & Sheets("Recherche").End(xlUp).Row).ClearContents 'on efface la liste des résultats avant de commencer la recherche
For i = 2 To Sheets.Count 'on boucle sur toutes les feuilles à partir de la 2è
derlign = Sheets(i).Range("A65536").End(xlUp).Row
With Sheets(i).Range("C4:C" & derlign)
Set c = .Find(RechNom, LookIn:=xlValues, LookAt:=xlWhole) 'on effectue la recherche avec la méthode Find
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Sheets("Recherche")
derLignTemp = .Range("G65536").End(xlUp).Row + 1
'on inscrit les résultats de la recherche dans la feuille Recherche
.Range("G" & derLignTemp) = c.Offset(, -1)
.Range("H" & derLignTemp) = c.Value
.Range("I" & derLignTemp) = c.Offset(, 1)
.Range("J" & derLignTemp) = c.Offset(, 2)
End With
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next i
End SubJ'ai mis des commentaires dans le code pour que ça soit plus compréhensible
Bonjour,
Merci bien vba-new, et désole pour ce retard.
Je vais maintenant l'essayer.
Cordialement,
Kris
-- Lun Juil 19, 2010 9:34 am --
Re,
Alors j'ai une erreur au niveau de la pour effacer la liste avant de commencer!!!
Range("G6:J" & Sheets("Recherche").End(xlUp).Row).ClearContents
Erreur 438: Prorpiété ou méthode non gérée par cet objet!
Une idée?
-- Lun Juil 19, 2010 9:46 am --
J' ai voulu tester le reste du programme alors en mettant la ligne d'erreur en commentaire, j'ai pus me rendre compte qu'avec plusieurs personnes du meme nom (ou il n'y a que le tel qui change), il n'affiché qu'une valeur.
Est-ce parce que j'ai supprimé la ligne d'erreur qui devait faire fonctionné avec plusieurs résultats quasi identique?
Un p'tit oubli de ma part. Essaie avec ce code :
Sub BtnExec_Clic()
Dim RechNom As String, firstAddress As String
Dim i As Byte, derlign As Long, derLignTemp As Long
Dim c As Range
derlign = Sheets("Recherche").[G65536].End(xlUp).Row
RechNom = Sheets("Recherche").[C6] 'adresse du nom que l'on recherche
If derlign > 5 Then Range("G6:J" & derlign).ClearContents 'on efface la liste des résultats avant de commencer la recherche
For i = 2 To Sheets.Count 'on boucle sur toutes les feuilles à partir de la 2è
derlign = Sheets(i).Range("A65536").End(xlUp).Row
With Sheets(i).Range("C4:C" & derlign)
Set c = .Find(RechNom, LookIn:=xlValues, LookAt:=xlWhole) 'on effectue la recherche avec la méthode Find
If Not c Is Nothing Then
firstAddress = c.Address
Do
With Sheets("Recherche")
derLignTemp = .Range("G65536").End(xlUp).Row + 1
'on inscrit les résultats de la recherche dans la feuille Recherche
.Range("G" & derLignTemp) = c.Offset(, -1)
.Range("H" & derLignTemp) = c.Value
.Range("I" & derLignTemp) = c.Offset(, 1)
.Range("J" & derLignTemp) = c.Offset(, 2)
End With
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstAddress
End If
End With
Next i
End Sub-- 19 Juil 2010 09:56 --
Si tu parles du nom "Claude" c'est parce qu'il y a un espace superflu à droite du nom sur la feuille PM.kris0311 a écrit :-- Lun Juil 19, 2010 9:46 am --
J' ai voulu tester le reste du programme alors en mettant la ligne d'erreur en commentaire, j'ai pus me rendre compte qu'avec plusieurs personnes du meme nom (ou il n'y a que le tel qui change), il n'affiché qu'une valeur.
Est-ce parce que j'ai supprimé la ligne d'erreur qui devait faire fonctionné avec plusieurs résultats quasi identique?
Pour la recherche, il est important de respecter la casse et faire attention aux espaces en trop.
re,
J'ai une nouvelle erreur, sur la ligne:
derlign = Sheets("Recherche").[G65536].End(xlUp).Row
Qui me dis "Objet requis.
En testant le code sans cette ligne et en corrigeant le petit espace pour "Claude", je n'est toujours que la personne de la première feuille.
Est-ce qu'on travaille sur le même fichier ?
Vois sur le fichier joint. Chez moi ça marche. (clique sur le bouton Exécuter)
Re,
Eh bien en fait je réecrivais ton code sur un autre ordinateur, et j'ai surement dû oublier quelque chose.
Bref avec ton fichier ca marche du tonnerre
Un grand merci à toi de m'avoir aidé.
Cordialement,
Kris