Rechercher une ligne à partir d'une cellule

Bonjour,

j'ai un petit problème en macro VBA !!

j'aimerais chercher (et trouver) une ligne dans un tableau dont la 1ere cellule est la meme que dans le tableau d'un autre classeur.

exemple :

J'ai 3 classeurs ouverts : class1, class2 et class3

class1 est celui dans lequel je vais modifier des valeurs manuellement et dans class2 et class3 les valeurs modifiées de class1 vont s'y répercuter dans des cellules et des lignes différentes.

donc :

  • comment, dans class1, lire la cellule B2 qui contient 1234 par exemple et la chercher dans class2 (puis class3) afin de définir la ligne dont 1234 est la 1ere cellule ?
  • une fois que cette ligne a été trouvé il faut que je copie/colle différentes cellules de class1 dans les cellules "jumelles" de class2 et class3.

Merci d'avance pour votre aide précieuse.

PS : excel 2010

Bonjour.

Dis moi si j'ai bien compris:

LigneCherche= workbook("class2.xls").Sheets("Feuil").Cells.Find(What:=(activesheets.range("B2").value).Row

J'ai pas tester il y a surement des erreurs.

Salut,

j'ai l'impression que tu as compris mais moi je ne comprends pas bien ton code :

LigneCherche= workbook("class2.xls").Sheets("Feuil").Cells.Find(What:=(activesheets.range("B2").value).Row

car comment va t-il reconnaitre ma ligne dans l'autre classeur ??

Merci

Bonjour,

Désoler c'était très brouillon... voici un code qui marche :

Sub chercher()
Dim Wb As Workbook
Set Wb = Workbooks("Classeur2.xlsx")
Dim LigneCherche
LigneCherche = Wb.Sheets("Feuil1").Cells.Find(What:=Range("B2").Value).Row
Range("A1").Value = LigneCherche
End Sub

Donc il va chercher dans classeur2 la valeur inscrite dans la cellule B2 de classeur1, puis va inscrire dans A1 la ligne trouvée.

En fait la macro se trouve dans le class1 "temoin" c'est à dire celui ou se trouvent les valeurs que je modifient et surtout la cellule temoin qui va me permettre de localiser la ligne correspondante dans les classeurs 2 et 3.

Une fois que la ligne est localisee, je fais un copier de B5 de classeur 1 et je la colle dans E3 de class2 et F5 de class3.

E3 est donc une cellule de class2 / ligne 3, et F5 est une cellule de class3 / ligne 5

Ces lignes ont été trouvée par le code que je cherche.

Cordialement.

Essais ce code dans ton classeur1 témoin:

Sub chercher()
Dim class2 As Workbook
Dim class3 As Workbook
Set class2 = Workbooks("Classeur2.xlsx")
Set class3 = Workbooks("Classeur3.xlsx")
Dim ligneclass2
Dim ligneclass3
ligneclass2 = class2.Sheets("Feuil1").Cells.Find(What:=Range("B2").Value).Row
ligneclass3 = class3.Sheets("Feuil1").Cells.Find(What:=Range("B2").Value).Row
class2.Sheets("Feuil1").Range("E" & ligneclass2).Value = Range("B5").Value
class3.Sheets("Feuil1").Range("F" & ligneclass3).Value = Range("B5").Value
End Sub

Par contre il renvoi une erreur si il ne trouve pas, dis moi si ça pose problème dans ce cas il devra falloir prendre en compte cette erreur...

tu as mis 2 fois cette ligne c'est normal ??

ligneclass3 = class2.Sheets("Feuil1").Cells.Find(What:=Range("B2").Value).Row

et c'est dans class1 qu'on cherche la cellule qui nous trouve la ligne de class2 et 3

Quelle histoire !!!!

Re oups c'était une erreur... je vais corriger et refaire car j'avais pas compris que c'était dans la class1 qu'on recherche....

-- 01 Juin 2011, 15:41 --

J'ai pas tout saisi en faite...

Dans ton class1 tu as des numéros de ligne dans tes cellules?

Je comprends que le probleme n'est pas simple (surtout a expliquer) !!

dans mes cellules j'ai juste des valeurs

Merci pour ton aide en tout cas, c super cool !!!

Bonjour

J'y vais de ma solution, mais c'est grâce à Samas qui a déblayé le terrain

Sub chercher()
Dim WsCl2 As Worksheet
Dim WsCl3 As Worksheet
Dim Cel As Range

Set WsCl2 = Workbooks("Classeur2.xlsx").Sheets("Feuil1")
Set WsCl3 = Workbooks("Classeur3.xlsx").Sheets("Feuil1")
  With WsCl2
    Set Cel = .Cells.Find(what:=Range("B2"), LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      '
      ' Recopie des cellules du Classeur2  vers Classeur1
      '
      Range("D2") = Cel.Offset(0, 1)
    Else
      '
      ' Référence inexistante dans Classeur2
      '
      MsgBox "Valeur " & Range("B2") & " non trouvée dans " & vbCr & _
              WsCl2.Parent.Name & vbCr & WsCl2.Name
    End If
  End With
  With WsCl3
    Set Cel = .Cells.Find(what:=Range("B2"), LookIn:=xlValues, lookat:=xlWhole)
    If Not Cel Is Nothing Then
      '
      ' Recopie des cellules du Classeur3 vers Classeur1
      '
      Range("F2") = Cel.Offset(0, 1)
    Else
      '
      ' Référence inexistante dans Classeur3
      '
      MsgBox "Valeur " & Range("B2") & " non trouvée dans " & vbCr & _
              WsCl3.Parent.Name & vbCr & WsCl3.Name
    End If
  End With
End Sub

Merci Banzai64 !!

Tout d'abord je tiens à préciser que je pratique le vba depuis 15 jours.....

Le truc c'est que je copie de classeur 1 vers Classeur 2 et classeur 3.

de plus la partie "reference inexistante" est sympa mais ne sert à rien dans mon cas.

comme je suis newbie, est-ce que dans ton code je peux copier n'importe quelle cellule de class1 et la coller dans n'importe quelle colonne mais sur la ligne (trouvée dans class1) de class2 et class3 ??

Merci.

Bonjour

Une fois la ligne trouvée dans Classeur2 ou dans Classeur3 tu peux copier ce que tu veux dans le sens que tu veux

Classeur2 --> Classeur1 ou Classeur1 --> Classeur2

ou

Classeur3 --> Classeur1 ou Classeur1 --> Classeur3

C'est à toi de choisir

Merci à tous pour votre aide !!

j'ai réussi en adaptant ce code :

Sheets("Feuil1" ).Select ' selectionne la feille contenant les items

toto = InputBox("truc à rechercher :" ) ' boite de dialogue pour entrer une donnée

Cells.Find(What:=toto, After:=ActiveCell, LookIn:=xlFormulas, LookAt _

:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _

False, SearchFormat:=False).Activate ' fonction rechercher

ActiveCell.Offset(0, 1).Select ' déplace la selection d'une case a droite

Selection.Copy ' copie la donnée de la case

Sheets("Feuil2" ).Select ' selectionne la feille 2

Range("C10" ).Select ' positionne le curseur ( au hazard tu le mets ou tu veux )

ActiveSheet.Paste ' active la fonction coller

Application.CutCopyMode = False

(merci à chacha)

Rechercher des sujets similaires à "rechercher ligne partir"