macro de recherche multifeuille

  • Initiateur de la discussion Kro
  • Date de début
K

Kro

Guest
Bonsoir à tous,

Je suis nulle en macros.

J'ai plusieurs classeurs de plusieurs centaines de feuilles chacun.

J'ai joint un exemple de classeur allégé avec 5 feuilles. Les noms des onglets ont été générés par le crawler qui a récupéré les données sur un site web.

J'ai besoin de pouvoir comparer données entre elles.

J'ai donc fait des formules 'rechercheV' pour récupérer sur le premier onglet les données qui me sont utiles. Mais j'aurais besoin d'une macro (par exemple une boucle then next ???) pour récupérer de façon automatique les données dans les onglets suivants.

Quelqu'un aura-t-il la gentillesse de m'aider?

Merci d'avance
 
K

Kro

Guest
oups !

bref l'idée serait d'avoir une macro qui aille change automatiquement le nom de l'onglet pour le remplacer par celui de l'onglet suivant.

je ne suis sans doute pas claire... [file name=tableurlight.zip size=27144]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/tableurlight.zip[/file]
 

Pièces jointes

  • tableurlight.zip
    26.5 KB · Affichages: 22
K

Kro

Guest
Bonsoir Thierry,

Certes je l'avais déjà vu en début d'AM et j'ai admiré le boulot !

Cela étant, pour une néophite totale comme moi, le pb est le nommage et le nombre des onglets (jusqu'à 300 dans un même classeur) que je ne peux gérer en manuel.


C'est pour cette raison que j'ai tellement besoin d'une fonction qui changerait automatiquement le nom de l'onglet dans les formules....

Aurez-vous une solution miracle?
(j'avoue que cela tient de la magie pour moi...)

Merci d'avance,
 

_Thierry

XLDnaute Barbatruc
Repose en paix
RE Bonsoir Kro, Baside, Le Forum

Voici le début du Miracle ;)


Sub TheMultiSheetCopier()
Dim WS As Worksheet
Dim WSCible As Worksheet
Dim L As Integer


Set WSCible = Worksheets('Feuil1')
L = WSCible.Range('B5000').End(xlUp).Row + 1


With WSCible
   
For Each WS In Worksheets
       
If WS.Name <> WSCible.Name And WS.Name <> 'Notes' Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Range('B' & L) = WS.Range('A6')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Range('C' & L) = WS.Range('B8')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Range('C' & L) = WS.Range('B10')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .Range('D' & L) = WS.Range('B11')
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'Etc etc pour les autres cellules....
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; L = L + 1
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
Next WS
End With
End Sub


Je pense que ce sera le plus simple à adapter...
Bonne Soirée
@+Thierry
 
K

Kro

Guest
Waaaaahaaaaaaa ! C'est complètement dingue, merci beaucoup !

j'avoue ne pas comprendre :

Range('D' & L) = WS.Range('B11')
'Etc etc pour les autres cellules....

mais je ne veux surtout pas abuser,

Merci et bonne soirée à vous,
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Kro, Baside, le Forum

Je repasse par ici, mais je pense que tu as du résoudre toi-même ta question ? non ?

Quand j'écris ceci :

With WSCible
   
For Each WS In Worksheets
       
If WS.Name <> WSCible.Name And WS.Name <> 'Notes' Then
            .Range('B' & L) = WS.Range('A6')
            .Range('C' & L) = WS.Range('B8')
            .Range('C' & L) = WS.Range('B10')
            .Range('D' & L) = WS.Range('B11')
           
'Etc etc pour les autres cellules....
           
              L = L + 1
       
End If
   
Next WS
End With

C'est tout simplement pour te montrer la marche à suivre dans mon 'Moteur' (algo), car je n'ai personellement pas le temps d'écrire les adresses individuelles de chaque cellule.

Analyse de la construction du report de Données :
.Range('D' & L) = WS.Range('B11')

La partie Rouge = Cible
.Range('D' & L) =
=> le '.' = Feuille de réception (voir plus Haut le 'With WSCible')
=> le 'Range('D' = Colonne de Réception que tu détermines
=> le & L) = Dernière Ligne Vide
(voir plus Haut L = WSCible.Range('B5000').End(xlUp).Row + 1)


La partie Bleue = Source
WS.Range('B11') =
WS = Feuille en cours de Scan par la Boucle (For Each WS In Worksheets )
Range('B11') = La cellule que tu détermines qui doit être reportée


Voilà c'est tout simple... Enfin pas trop compliqué !!! à toi de faire la suite...

Bon Appétit
@+Thierry
 

Discussions similaires

Réponses
6
Affichages
373

Statistiques des forums

Discussions
312 427
Messages
2 088 307
Membres
103 813
dernier inscrit
mehdifr