FORUM Aideonline
  Aide Logiciels - Aide Générale

  [RESOLU] macro Rechercher une ligne à partir d'une cellule

 

18 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] macro Rechercher une ligne à partir d'une cellule

n°4472
hebus888
Posté le 31-05-2011 à 15:59:56  profilanswer
 

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


Message édité par hebus888 le 09-06-2011 à 15:29:37
n°4475
chacha
Vieux geek blasé
Profil : Expert
Posté le 31-05-2011 à 22:43:12  profilanswer
 

  Ya mille façons de faire ça en VBA  :wahoo:  
   
 activer  le classeur et la feuille en question
xlApp = New Excel.Application  
xlBook = xlApp.Workbooks.Open("lecteur:\Chemin\toto.xlsx" )  
xlSheet1 = xlBook.Worksheets("feuil1" )  
xlSheet2 = xlBook.Worksheets("feuil2" )  
 etc... nombre de feuille  
xlSheet.Visible = True  
xlApp.Visible = False  
xlApp.DisplayAlerts = False  
 
' Definir  une variable  >>>  lire la valeur de la cellulle ou tu as fait l'entrée  
xlSheet2.Range("C1" ).Value = xlSheet1.Range("A1" ).Value  
 D'autres methodes sont possibles  >> avec    activecell
 
 activer la feuille en question >>> Workbooks(" toto.xls" ).Activate
 
Sélectionner une feuille   >>>>Sheets(" celle que tu veux " ).Select
 
 
 routine de recherche/    selectionner / activer  
  routines de déplacement Sélectionner des cellules :  
- cellule simple : Range("A1" ).Select
- cellules contigües : Range("A1:D5" ).Select
- cellules non contigües : Range("A1,B2:B4,D5" ).Select
 
Dépacements entre cellules : ActiveCell.Offset(13, 14).Select
 
 et routine pour copier  
 
 
 
  Bon je ne vais pas te l'ecrire  :sweat:  on imagine que tu connais VBA quand meme   :whistle:  
 
 
 
 
 


---------------
 Ben .... il est ou le bon vieux temps ou il fallait forcer pour clocker??  
 Rien n'est vrai mais tout est bien expliqué
n°4477
hebus888
Posté le 01-06-2011 à 13:47:54  profilanswer
 

Salut,
 
en fait je me suis mis au vba et aux macros depuis 15 jours et franchement je galère !!!
 
J'ai compris la 1ère partie de ton explication mais je bloque ici :
 
' Definir  une variable  >>>  lire la valeur de la cellulle ou tu as fait l'entrée  
xlSheet2.Range("C1" ).Value = xlSheet1.Range("A1" ).Value  
 
 
D'autres methodes sont possibles  >> avec    activecell  
 
et là :
routine de recherche/    selectionner / activer  
  routines de déplacement Sélectionner des cellules :  
- cellule simple : Range("A1" ).Select
- cellules contigües : Range("A1:D5" ).Select
- cellules non contigües : Range("A1,B2:B4,D5" ).Select
 
Dépacements entre cellules : ActiveCell.Offset(13, 14).Select
 
 et routine pour copier  
 
En fait j'ai pas bien compris comment tu recherche la cellule qui va indiquer la ligne concernée dans les autres tableaux, dsl !!
 
Cordialement.

n°4480
chacha
Vieux geek blasé
Profil : Expert
Posté le 01-06-2011 à 14:51:50  profilanswer
 

Si j'ai bien compris ce que tu veux faire je  vais  te donner la logique possible
 
  Activecell  c'est ta cellule active  au  moment ou tu saisis ta donnée .  
 Il faut definir une variable  qui est la valeur de cette cellule .  >>  déclarer ta variable : Dim toto  
 toto = range("A1" ).Value  
 ensuite avec la commande rechercher  pointer  sur le classeur qui contient cette donnée  ActiveSheet.Columns(1).Cells.Find(what:=toto)
 ensuite  avec les commandes  de déplacement que je t'ai donné tu pointe sur la cellule comprenant la  données que tu veux copier   tu la copie  et la stocke en variable ensuite tu déplace ton pointeur et du affecte cette variable a la cellule que tu veux  ou tu veux .
   
 
  Tu peux entrer directement ta case a chercher dans une boite de dialogue  >> toto = InputBox("taper la valeur à rechercher :" )
  [:laripette:7]


---------------
 Ben .... il est ou le bon vieux temps ou il fallait forcer pour clocker??  
 Rien n'est vrai mais tout est bien expliqué
n°4522
hebus888
Posté le 08-06-2011 à 16:51:01  profilanswer
 

bonjour et désolé pour le retard dans ma réponse mais ct un long weekend :)
Si toto = range("A1" ).Value  comment fait on, dans l'autre tableau pour coller une valeur dans une cellule qui aura pour colonne la lettre D par exemple, et pour ligne, la valeur stockée dans toto ???
autrement dit comment toto peut il remplacer un numéro de ligne (row) ?
 
En attente de réponses....Merci.


Message édité par hebus888 le 08-06-2011 à 16:56:19
n°4523
chacha
Vieux geek blasé
Profil : Expert
Posté le 08-06-2011 à 20:08:59  profilanswer
 

[:laripette:7]  [:laripette:7]   toto est une variable   c'est la valeur que tu dois rechercher  dans ton autre feuille , il te faut une variable car tu ne vas pas mettre les données tout le temps dans la meme case  
 ensuite   il y a des  precedures de selection/ deplacement  de cellule active  une fois  que tu as trouvé la cellule contenant cette valeur  
  ensuite  il y a des procedure pour affecter une variable " toto "  a une cellule  ou alors  Il y a des formules de  copier coller en VBA  >>>>  
 Sheets("ta feuille" ).Select
    Range(" adresse  de la cellule  que tu veux " ).Select
    ActiveSheet.Paste
peux pas faire plus a moins d'écrire ta macro    mais faut que t'aprenne  serieusement le VBA  parce que je n'ecris pas les  macros car  il y a 36000 façons de faire  et je ne connais pas ta logique ni tes feuilles et je ne suis pas sur de comprendre ce que tu veux vraiment faire  
 .
   
 
 


---------------
 Ben .... il est ou le bon vieux temps ou il fallait forcer pour clocker??  
 Rien n'est vrai mais tout est bien expliqué
n°4524
chacha
Vieux geek blasé
Profil : Expert
Posté le 08-06-2011 à 22:54:18  profilanswer
 

 :hello:   Un truc tout simple   >>>  http://chagjgj.free.fr/Divers/testaol.xls
 Un classeur avec 2 feuilles  ( feuille 1 et 2 )
 Des données  dans la feuille 1  en colonnes   A B C D
 truc1  saucisse poire       camenbert
 truc2 caca    boudin pouetpouet
 
  tu cherches truc 1  une fois trouvé  tu déplaces le curseur  sur la donnée a coté  tu la copie   et tu  actives la feuille 2   pour la coller  
 Sub chacha sennuie()
 
 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
    ' ya mieux mais c'est simple a comprendre comme ça   ;)  mais je ne vois pas trop a quoi peut servir ton truc  si c'est ça  :p  
End Sub
 
 [:laripette:7]  
 
 


---------------
 Ben .... il est ou le bon vieux temps ou il fallait forcer pour clocker??  
 Rien n'est vrai mais tout est bien expliqué
n°4525
hebus888
Posté le 09-06-2011 à 11:48:24  profilanswer
 

Génial, ça fonctionne !!!
Merci beaucoup Chacha !
 
Encore une petite question :
Workbooks.Open Filename:="W:\Recette\Suivi\SYNTHESE-BUDGETAIRE-PAR-UNITE\" & Range("C7" ).Value & ".xls"
J'aimerais rajouter .xlsm en plus de .xls car j'ai les deux sortes d'extension.
faut-il écrire ".xls"&"xlsm"  ????
 
 
j'essaye de mieux t'expliquer :  
j'ai 3 classeurs qui sont liés par des macros, c'est à dire que les valeurs des uns s'inscrivent dans les autres par le biais de macros.
en fait il s'agit juste d'inverser les copies. le classeur 1 copie dans classeur 2 et 3 et ensuite je change les valeurs de classeur 2 qui les copient dans classeurs 1 et 3.
C'est plus clair comme ça ???

n°4526
chacha
Vieux geek blasé
Profil : Expert
Posté le 09-06-2011 à 15:00:38  profilanswer
 

 Tu ne peux pas  gerer deux fichiers différents par un appel de procedure
  C'est l'un ou l'autre  
  Il t'apartient  de definir dans la macro a quel moment  on appelle l'un ou l'autre
  sinon faut gerer ça dans une boucle de test peut etre , mais apres ça deviendra complexe  :sweat:  


---------------
 Ben .... il est ou le bon vieux temps ou il fallait forcer pour clocker??  
 Rien n'est vrai mais tout est bien expliqué
n°4527
hebus888
Posté le 09-06-2011 à 15:28:31  profilanswer
 

ok, bon j’arrête là et encore un grand merci !!

n°4528
chacha
Vieux geek blasé
Profil : Expert
Posté le 09-06-2011 à 16:33:28  profilanswer
 

  Il faut penser a mettre une boucle de gestion d'erreur  >> On error resume  sinon en cas d'erreur (de saisie  par exemple )  l'instruction  rechercher plantera


---------------
 Ben .... il est ou le bon vieux temps ou il fallait forcer pour clocker??  
 Rien n'est vrai mais tout est bien expliqué
mood
Google
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM Aideonline
  Aide Logiciels - Aide Générale

  [RESOLU] macro Rechercher une ligne à partir d'une cellule

 

Copyright © 2009 - Groupe LDLC.com - Vente Matériel Informatique