Aide sur macro

Bonjour au Forum

J'ai récupéré une macro qui me permet d'importer plusieurs onglets sur un même classeur

Maintenant , mon problème , et que ce n'est plus une importation d'onglet sur un même classeur , mais une importation de 3 fichiers ,qui ce trouve sur le C , sur un quatrième Fichier ( idem sur C ) et la je n'arrive pas a trouver

De plus , j'aimerais , si cela est possible , de pouvoir aussi récupérer le nom de l'onglet et la date de l'importation

Si quelqu'un a une solution , je suis preneuse

Je vous remercie par avance pour l'aide

Souhaite une bonne journée a toute et tous

Cordialement

Nathalie

20suivi-c.xlsm (50.58 Ko)

Bonjour le forum

Quelqu'un peut il m'aider sur mon problème , car je n'arrive pas a trouver la solution

Merci a tous pour votre aide

Cordialement

Nathalie

bonjour,

Question trop mal posée, trop vague. On ne sait même pas quelle est la question et le fichier n'apporte aucune précision.

Ce qui se conçoit bien s'énonce clairement !

A+

Bonjour Galopin

Je vais essayé d'être plus clair sur mon problème

Voila , j'ai sur le Commun, 3 fichiers qui ce nomme Suivi a, suivi b et suivi c , ils sont alimentés toutes la journée par des personnes

A la fin de la journée , et pour éviter d'ouvrir ces 3 fichiers pour récupération des données , j'aimerais que sur un 4eme Fichier qui s'appelle Importation , l'ensemble des 3 fichier remontent en automatique , avec la date de l'importation et le nom de l'onglet, sans écraser l'historique

Je sais cela a l'air complexe , c'est pour cela que je demande de l'aide

En attente de te lire

Cordialement

Nathalie

Bonjour Galopin

Je te joint un fichier explicatif concernant ma demande

En espérant que tu puisses m'aider

Te remercie par avance pour le temps que tu passes sur ma demande

Te souhaites une bonne journée

Cordialement

Nathalie

16explicatif.xlsx (16.79 Ko)

Effectivement formulé comme ça c'est beaucoup plus clair.

Je vais te pondre ça rapidement.

Important :

Les classeurs "source" (JHA, LVA, DLA) sont ils vidés tous les matins ou faut-il reprendre les données à partir des dernières données importées la veille ?

Pour reformuler la question, peut-on se contenter d'importer les données qui comportent la date du jour par exemple ?

Non , il faut reprendre les données a partir des dernières données importées de la veille des trois classeurs "source", sans les écrasées dans le fichier Importation , pour garder tout l'historique

Merci encore pour ton implication

Nathalie


oui , qui comporte la date du jour

Nathalie

Nota : Il sera supposé que les classeurs "sources ne comportent qu'une seule feuille.

Sinon préciser le nom de la feuille source pour chaque classeur source.

Nota2 : Faire une macro sans ouvrir le classeur source me parait bien compliqué pour cet usage.

J'envisage de faire cela en ouvrant chaque classeur en mode ReadOnly, ce qui ne durera que quelques secondes et évitera tout problème de disponibilité.

Il faut toutefois que les classeurs sources ne soient pas protégés !!!

Oui un seul onglet par classeur, et non pas de protection sur classeur

Nathalie

Il y a quand même d'autres questions....

Pourquoi mettre une date d'importation si c'est la date du jour...

Et si ce n'est pas la date du jour, ça devient un fouillis inextricable pour ne pas employer un expression populaire plus imagée...

Si on suppose qu'on importe d'autres dates que la date du jour même, ça devient extrêmement compliqué : cela suppose qu'on importe quoi ? Tout depuis la date demandée ? Seulement la date demandée ? Et ça suppose alors qu'on fait une absolue confiance à l'opérateur pour ne pas importer de doublons... Parce que si en plus il faut vérifier qu'on n'importe pas de doublons...

Ok , on met par défaut la date du jour de l'importation dans le fichier Importation

Ensuite , le plus important pour moi , est de pouvoir récupérer ces données tous les jours , dans un seul fichier

Merci

Nathalie

Cette macro fait ce que tu demandes :

Sub Importer()
Dim WsC As Worksheet, WsS As Worksheet
Dim iRC, aFSrc, ext$, fich$, a, i, k, kk, x
Application.ScreenUpdating = False
Set WsC = ThisWorkbook.Worksheets("Recap")
aFSrc = ("JHA,LVA,DLA")  'nom des fichiers source
ext = ".xlsm"            'extension
For i = 0 To 2
   iRC = WsC.Range("A1").CurrentRegion.Rows.Count + 1 'la ligne cible
   fich = Split(aFSrc, ",")(i) & ext                  'le nom du fichier
   Workbooks.Open fich, ReadOnly:=True    'Ouverture en lecture seule
Set WsS = ActiveWorkbook.Worksheets(1)
   With WsS
   a = .Range("A1").CurrentRegion.Value
   kk = UBound(a)    'dernière ligne
   For k = 1 To kk   'première ligne
      If a(k, 3) = Date Then Exit For
   Next
   Erase a
   a = .Range("A" & k & ":G" & kk).Value
   For x = LBound(a) To UBound(a)
      a(x, 6) = Date
      a(x, 7) = WsS.Name
      WsC.Range("A" & iRC).Resize(UBound(a), 7) = a
   Next
   Erase a
   End With
   ActiveWorkbook.Close
Next
End Sub

Nota : DAns la ligne

aFSrc = ("JHA,LVA,DLA")  'nom des fichiers source

Il faut remplacer par le véritable nom de tes fichiers

puis... (ligne suivante) renseigner l'extension de tes fichiers. Mois j'ai mis ".xlsm" mais si tes fichiers sources sont des ".xlsx" il faut modifier.

L'importation se fait en mode value. le formatage est ce qui complique le plus la chose...

Si tu veux absolument des quadrillages, du gras, des alignements spéciaux : YAKA formater toute tes colonnes aux petits oignons !

A+

fichier XLS ET ok pour "JHA", "LVA" et "DLA"

Si ensuite je veux renommer ou ajouter un nouveau classeur cela est il possible dans ta Macro ( suite a ton explication du fonctionnement , car débutante en VBA

En attente de ta réponse

Nathalie

Revoir ma réponse précédente : YAKA renommer les lignes comme indiquées...

L'importation étant instantanée j'ai pas mis de message de fin...

A+

Je viens de mettre la macro dans le fichier Recap , et je te joint le résultat

Je dois être blonde , car les fichiers ne ce sont pas ouvert en lecture seule et le résultat ne reprend qu'une ligne

Peux tu me dire ou est mon erreur

Et encore un HYPER HYPER HYPER GRAND MERCI

En attente de te lire

Nathalie

11recap.xlsm (21.40 Ko)
10dla.xlsm (20.98 Ko)
8lva.xlsm (21.25 Ko)
8jha.xlsm (23.47 Ko)

Galopin

Et oui encore moi , en plus du problème de récupération , quand je referme le classeur Recap , et que je le re ouvre , j'ai un message d erreur , voir pièce jointe

Nathalie

La macro n'importe que les lignes du jour concerné... Elle ne reprend pas les jours précédents...

Il y a néanmoins une ligne vide qui doit être due je pense au fait qu'il n'y a qu'une ligne à importer dans tes fichiers.

De même tu aurais surement une erreur s'il n'y avait aucune ligne à importer...

Je peux réparer ces problèmes (une seule ligne ou pas de lignes du tout) mais il me semble impossible d'automatiser si je dois récupérer plusieurs jours surtout avec des fichiers sources identiques.

Dans ce cas il me faudrait beaucoup plus de détails sur le contenu réel des fichiers sources.

C'est l'inconvénient des fichiers trop "bidonnés" : Ils ne donnent aucune indication au programmeur sur ce qu'il doit faire.

une douzaine de UT1, UT2

une ligne de zzz zzzz1 zzzz2 zzzz3 zzzz4

une page ou une colonne de toto, titi, tata

ou des colonnes de données plus ou moins vaguement incrémentées ou non ne donnent aucune idée de la réalité du travail attendu.

Tu as en pièce jointe les fichiers que j'ai utilisés pour mes essais.

Seules les lignes de ces fichiers avec la date d'aujourd'hui sont importées : Celles d'hier sont censées avoir été traitées hier...

Les noms de fichiers peuvent être modifiés comme indiqués précédemment.

Chez moi le nom de l'onglet et le nom de fichiers sont identiques mais cela n'a aucune importance.

Toutefois c'est le nom de l'onglet qui est retenu pour la colonne 7

A+

[Edit] Il faudra que tu me dise s'il y a la possibilité de n'avoir qu'une ligne (voire aucune dans un fichier... Afin que j'installe une gestion d'erreur. Mais il est inutile que je me fatique si dans la pratique ce cas n'existe pas...

11suivi-c-vg.xlsm (35.15 Ko)
7dla.xlsm (13.13 Ko)
9lva.xlsm (13.16 Ko)
6jha.xlsm (13.08 Ko)

Le contenu des fichiers sources est identiques en intitulé des colonnes

Ensuite , j'ai mis UT1 , c'est un exemple , ,mais dans cette colonne c'est toujours un destinataire , il peut revenir plusieurs fois , si plusieurs Facture , soit le même jour , soit un jour diffèrent, et tu peux avoir plusieurs destinataire

Chaque personne mette a jour leur fichier ( d'où le nom des fichiers ) , tout au long de la journée , d ou ma demande d'importer tous pour m'éviter d'ouvrir chaque fichier et de faire un copier coller

Je comprend mieux ta macro , on ne peux faire que l'extraction du jour , par contre est il possible de pouvoir la faire a n'importe quel moment , plutôt qu'une fois par jour , sans écraser ce qui a été importer et ce rajoute a la suite

Ensuite le but de ce fichier , c'est de pouvoir envoyer un état des factures par destinataires

Je sais je demande beaucoup , mais si j'arrive a mettre cela en place, je vais gagner énormément de temps

Mais une GRAND MERCI POUR TA PATIENCE ET TON AIDE

En attente de ta réponse

Cordialement

Nathalie

Je précise que avec ces fichiers s'il n'y a qu'une ligne à importer ça se passe normalement.

Je viens de tester s'il n'y a aucune ligne à la date du jour et dans ce cas il y a une erreur que je vais corriger : La macro importe la dernière enregistrement du fichier ce qui est bien sur anormal = une demi ligne qui ne comporte que la date : je revoie ça illico.

Pour ta question et un relevé plusieurs fois par jour, je vais répondre : NON !

En fait tes fichiers comportent un gros défaut (qui sont le propre de tous les débutants...)

Il n'y a pas d'index à tes listes. donc on ne peut jamais savoir quelle ligne à été importée ou pas

Si chaque ligne était indexé avec un index unique, ça ne poserait aucun problème, mais là tu veux que je me repère sur quoi pour savoir si la ligne a été importée ou pas ? Il va falloir quasiment que j'examine toutes les lignes de toutes les colonnes pour savoir si cette ligne à déjà été importée... ou pas ! Ou alors il faudrait que je pose un "flag" pour marquer la dernière ligne importée... Mais dans ce cas adieu la lecture seule !

As tu la possibilité de poser une colonne iD (index) avec incrémentation automatique dans tes fichiers sources ? Comment se fait la saisie des fichiers sources ? Par Userform ou directement sur la feuille ?

La, je sèche...

A+

la saisie ce fait directement sur le classeur , pas par un useform ( je ne sais pas faire ), mais je suis preneuse

Ensuite , je peux rajouter en colonne f une numérotation ( formule Excel )

Cela est il possible pour toi avec ces informations

Cordialement

Nathalie

Rechercher des sujets similaires à "aide macro"