Importer des données de plusieurs fichiers, sous condition

Bonjour à tous,

Voilà cela fait quelques jours que je me suis mis au VBA, j'ai pu récolter beaucoup d'informations sur le forum mais je bloque encore sur ce code.

Voici mon problème:

Mon doc principal doit récupérer des données de plusieurs fichiers situés dans un même répertoire. Il faut récupérer les données des mêmes cellules pour tous les fichiers, mais à une condition: qu'une cellule spécifique (B26) contienne quelque chose (à l'heure actuelle mon code importe même lorsque les cellules sont vides du coup cela me met plein de 0 dans mon tableau..).

Les données récoltées dans un fichier doivent être collées dans mon fichier principal par ligne (exemple: données du fichier 1 collées en A13, B13 ,C13) et ainsi de suite (exemple: données du fichier 2 collées en A14, B14 ,C14..).

Enfin dans l'idéal, j'aimerai que la macro n'aille chercher qu'une seule fois les données d'un même fichier, car j'ai mis une mise a jour toutes les N minutes, et je ne veux pas importer plusieurs fois les mêmes données.

Voici mon code (l'import des données fonctionne mais pas la condition):

Sub exportdonnées()

Dim lig As Integer, p As String, nomfich As String

Application.ScreenUpdating = False 'fige l'écran (pour accélérer)

Range("A13:D65536").ClearContents 'efface la plage de restitution

lig = 13 'restitution à partir de la ligne 13

p = ThisWorkbook.Path & "\"

nomfich = Dir(p & "*.xls") '1er fichier du dossier

While nomfich <> ""

If nomfich <> ThisWorkbook.Name And "[" & nomfich & "]Article_Livrable et Prestations!B26" <> "" Then

Cells(lig, 1).Formula = "='" & p & "[" & nomfich & "]Article_Livrable et Prestations'!G17"

Cells(lig, 2).Formula = "='" & p & "[" & nomfich & "]Article_Livrable et Prestations'!B26"

Cells(lig, 3).Formula = "='" & p & "[" & nomfich & "]Article_Livrable et Prestations'!D4"

Cells(lig, 4).Formula = "='" & p & "[" & nomfich & "]Article_Livrable et Prestations'!B20"

lig = lig + 1

Else: Exit Sub

End If

nomfich = Dir 'fichier suivant du dossier

Wend

End Sub

J'espère que j'ai été assez clair dans la description du problème.

Un grand merci par avance pour votre aide!!

Bonjour,

Ce serait mieux avec un fichier exemple

Merci pour ta réponse M12.

Voilà mon Fichier principal (Tableau dates) devant regrouper les données importées et 3 exemples de fichier pouvant se trouver dans le répertoire.

23fichier-3.xlsx (111.32 Ko)
28fichier-2.xlsx (111.23 Ko)
34fichier-1.xlsx (111.09 Ko)
33tableau-dates.xlsm (184.45 Ko)

Pas de solution possible ..?

Quelqu'un aurait-il un début de piste ? ça m'aiderait vraiment beaucoup..!!

Bonjour,

Ouvre ton fichier TABLEAU DATES.XLSM et tu verras pourquoi tu n'as pas de réponse (BUG !)

Merci de ta réponse M12 je ne m'en été pas rendu compte.

Voilà le fichier Tableau Dates censé récupérer les données de chaque fichier du dossier:

25tableau-dates.zip (15.17 Ko)

Bonjour,

regarde si cela te convient (j'ai fait une suppression de ligne sur les (ZERO) de la colonne B en fin de procédure)

53tableau-dates.xlsm (28.86 Ko)

Bonjour M12,

Super!! ça fonctionne comme je le souhaitais! Je vais pouvoir l'adapter à ma problématique.

Merci pour ta réactivité M12

Re-Bonjour M12,

J'ai un souci lors de l'import des données:

J'ai adapté ton code à mon code d'actualisation de macro (toutes les minutes), et maintenant lorsque les données sont importées, elles ne sont pas seulement importées sur ce classeur, elles sont aussi importées sur les classeurs qui sont ouverts au même moment mais qui n'ont rien à voir avec cette macro...

Et quelques fois un autre problème se produit: le format du tableau de destination n'est pas respecté et des données sont collées au bon endroit mais sans respecter la mise en page de destination..


Voici le tableau avec la macro en question

22tableau-dates.xlsm (31.98 Ko)

Bonjour,

Si les classeurs qui ne devraient prendre les données de la macro sont dans le même répertoire, c'est logique

comme je t'ai précisé : le fichier Tableau Dates récupére les données de chaque fichier du même dossier

Comment faire pour que cela ne se produise pas ?? sortir le Tableau Dates du dossier ?

re,

Il me semble que la procèdure, je l'avais placé sur la feuille DATES et non sur un module ?

Bonjour M12,

Je l'ai placé sur un module car je ne trouvais aucune autre solution pour pouvoir faire fonctionner le code d'actualisation de la macro (chaque minute)...

Bonjour M12,

Tu ne sais pas comment je pourrai faire fonctionner ces deux codes ensemble..?

Merci pour ton aide

Re,

Donc tu mets mon code dans la feuil DATE

tes codes pour le Timer dans un module

et pour le lancement de la macro de la feuille

Sheets("Dates").exportdonnées

Je crois qu'on est pas loin ça marche sauf quand j'ouvre un autre classeur excel n'ayant rien à voir, ça me met le message suivant :

'Erreur d'exécution 1004': la méthode 'Sheets' de l'objet'_ Global' à échoué

J'ai peut être mal compris ton explication, j'ai mis:

  • mon code exportdonnées sur ma feuille Dates
  • le code suivant dans ThisWorkbook :
Private Sub Workbook_open()
    Call Sheets("Dates").exportdonnées
End Sub

- le code timer suivant dans le module :

Sub Actualiser()
    ' Définit l'intervalle avec l'heure actuelle
       uneheure = TimeSerial(Hour(Time), Minute(Time) + 1, Second(Time))
            ' Appel récursif
           Application.OnTime uneheure, "Actualiser"
            Call Sheets("Dates").exportdonnées
End Sub

Sub auto_open()
       Actualiser
End Sub

Sub auto_close()
     On Error Resume Next
     Application.OnTime uneheure, Procedure:="Actualiser", Schedule:=False
End Sub

Re,

C'est pas dans ThisWorkbook

mais dans le module où tu as

Sub Actualiser()
    ' Définit l'intervalle avec l'heure actuelle
       uneheure = TimeSerial(Hour(Time), Minute(Time) + 1, Second(Time))
            ' Appel récursif
           Application.OnTime uneheure, "Actualiser"
            Call exportdonnées
End Sub

tu remplaces le Call exportdonnées par Sheets("Dates").exportdonnées

Je viens de tester en mettant dans le code actualiser du module :

Sheets("Dates").exportdonnées

Ou

Call Sheets("Dates").exportdonnées

Dans les deux cas ça fonctionne une première fois puis si j'ouvre un autre classeur à coté, ça ne fonctionne plus, ça me le message suivant cette fois ci : Erreur d'exécution '9': L'indice n'appartient pas à la sélection

On doit pas être loin c'est frustrant...!

Re,

ci-joint un dossier qui fonctionne chez moi

Bon le module du TIMER n'est pas le même mais teste

11fic-tranfert.rar (191.76 Ko)

re,

Bon je pense avoir trouvé le problème.

Si tu ouvres un autre classeur quand le Timer est en route, il prend le classeur que tu utilises pour la MàJ

copie et remplace le module qui vient de mon dernier envoi par celui-ci

Sub ExecuterTimer()
    ' Ici on affiche un msg toutes les 10 s
     MsgBox "Coucou", vbOKOnly, "Timer"
    Workbooks("tableau Dates.xlsm").Activate

    Sheets("Dates").exportdonnées
    HeureExecution = Now + TimeSerial(0, 0, Interval)
    Application.OnTime HeureExecution, "ExecuterTimer"
End Sub
Rechercher des sujets similaires à "importer donnees fichiers condition"