macro de recherche multifeuille

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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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

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,
 
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
 
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,
 
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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

D
  • Question Question
Réponses
5
Affichages
246
Didierpasdoué
D
Retour