Importer données de plusieurs onglet et classeurs

bonjour à tous,

Je voudrais me servir d'une ancienne macro dont je me sers et l'adapter pour un autre travail à la différence que je passe de 1 à 39 onglets.

Cette macro me sert à récupérer de plusieurs classeurs des données et les retraiter dans un classeur Synthèse.

Comment adapter cette macro à la différence que la récupération des données se fait dans plusieurs onglets.

Voici la macro

Sub import()

Dim Synthese As ThisWorkbook, fichier As String, i As Integer

Dim tablo

Dim tablo1

Application.ScreenUpdating = False

ReDim tablo(0, 1 To 29)

ReDim tablo1(0, 1 To 1)

i = 6

j = 6

Set Synthese = ThisWorkbook

'indiquer le chemin d'acces où sont placés les fichiers export

fichier = Dir("C:\Users\ccachelin.WERFENGROUP\Desktop\Hémostase\Suivi Coût Patient\Mise en place\Coût Patient Commande Produits\Test avec synthèse\2013 nouveau modèle\*.xls")

Do While fichier <> ""

If fichier <> Synthese.Name Then

'indiquer le chemin d'accès où est placé le fichier de Synthèse

Workbooks.Open Filename:="C:\Users\ccachelin.WERFENGROUP\Desktop\Hémostase\Suivi Coût Patient\Mise en place\Coût Patient Commande Produits\Test avec synthèse\2013 nouveau modèle\" & fichier

'lecture des données

With Sheets("Contrôle Année 1")

tablo(0, 1) = .[B4]

tablo(0, 2) = .[C4]

tablo(0, 3) = .[D4]

tablo(0, 4) = .[E4]

tablo(0, 5) = .[H12]

tablo(0, 6) = .[J12]

tablo(0, 7) = .[N12]

tablo(0, 8) = .[P12]

tablo(0, 9) = .[T12]

tablo(0, 10) = .[V12]

tablo(0, 11) = .[Z12]

tablo(0, 12) = .[AB12]

tablo(0, 13) = .[AF12]

tablo(0, 14) = .[AH12]

tablo(0, 15) = .[AL12]

tablo(0, 16) = .[AN12]

tablo(0, 17) = .[AR12]

tablo(0, 18) = .[AT12]

tablo(0, 19) = .[AX12]

tablo(0, 20) = .[AZ12]

tablo(0, 21) = .[BD12]

tablo(0, 22) = .[BF12]

tablo(0, 23) = .[BJ12]

tablo(0, 24) = .[BL12]

tablo(0, 25) = .[BP12]

tablo(0, 26) = .[BR12]

tablo(0, 27) = .[BV12]

tablo(0, 28) = .[BX12]

tablo1(0, 1) = .[CE12]

End With

'Ecriture des données

Synthese.Sheets("fonction de recherche").Range("A" & i & ":AB" & i) = tablo

i = i + 1

Synthese.Sheets("fonction de recherche").Range("AG" & j) = tablo1

j = j + 1

Workbooks(fichier).Close

Else

MsgBox "Un fichier porte le même nom que le fichier de synthèse", vbInformation

End If

fichier = Dir

Loop

End Sub

Merci d'avance pour votre aide

Merci

Bonjour

D'après ce que tu dis tu vas chercher les informations dans les 39 feuilles du classeur que tu ouvres

Fais une boucle simple (à condition que ce sont les 39 premières pages)

Sans test

'.
'.
'lecture des données
For K = 1 to 39
With Sheets(K)               '"Contrôle Année 1")
tablo(0, 1) = .[B4]
tablo(0, 2) = .[C4]
'.
'.
tablo(0, 28) = .[BX12]
tablo1(0, 1) = .[CE12]

'End With

'Ecriture des données

Synthese.Sheets("fonction de recherche").Range("A" & i & ":AB" & i) = tablo
i = i + 1
Synthese.Sheets("fonction de recherche").Range("AG" & j) = tablo1
j = j + 1
End With
Next K

Merci Banzai,

Je vais essayer de l'adapter car effectivement j'ai 40 feuilles dont la 34ème que je ne veux pas prendre en compte.

Bonjour

Toujours à tester

'.
'.
'lecture des données
For K = 1 to 40
If K <> 34 then
With Sheets(K)               '"Contrôle Année 1")
tablo(0, 1) = .[B4]
tablo(0, 2) = .[C4]
'.
'.
tablo(0, 28) = .[BX12]
tablo1(0, 1) = .[CE12]

'End With

'Ecriture des données

Synthese.Sheets("fonction de recherche").Range("A" & i & ":AB" & i) = tablo
i = i + 1
Synthese.Sheets("fonction de recherche").Range("AG" & j) = tablo1
j = j + 1
End With
End If
Next K

cela fonctionne mais j'ai quand même une difficulté si le nombre de feuille n'est jamais le même dans les différents fichiers y a t il une autre solution ? car for K = 1 to ... ne fonctionne pas si le nombre de feuille est aléatoire

Bonjour

Oui on peut savoir

Mais si 40 ou 100 feuilles cela sera toujours la 34 qui sera évitée ?

Et si moins de 34 pas de feuille évitée ?

A la place de

For K = 1 to 40

Écrire

For K = 1 to Sheets.Count

en fait la feuille à éviter est toujours placer en dernier !!!???

Bonjour

D'après mes dernières investigations sur un nombre important de fichiers la feuille 34 n'est pas toujours la dernière, seulement quand le fichier testé n'a que 34 feuilles

Changes la ligne correspondante

For K = 1 to Sheets.Count - 1

et bien sur supprimes le If K <> 34 then et leEnd If associé

super j'ai testé ça fonctionne merci banzai

Rechercher des sujets similaires à "importer donnees onglet classeurs"