XL 2016 Importation de donnée d'un fichier vers un autre

scoubidou35

XLDnaute Occasionnel
Bonjour à tous,
Je suis depuis ce WE à essayer de comprendre pourquoi mon code ne veux pas fonctionner donc je vous sollicite une fois de plus.

Je veux pouvoir importer des données dans mon fichier 'MONFICHIERS' à partir d'un fichier que j'aurai choisi moi même (les noms changes d'une année sur l'autre mais la structure du fichier lui reste toujours la même).

J'aimerai récupéré les colonnes 1 et 13 dans 'Fichier avec données à importer' et les copier dans 'MONFICHIERS' respectivement dans les colonnes B et A
J'arrive à ouvrir le fichier de mon choix mais après il y a un bug et rien n'est transféré.

Il faut en plus mais je ne suis pas encore penché dessus que l'information de la colonne 13 soit modifié pour la colonne A pour n'avoir qu'une partie de l'info :
exemple : dans la colonne 13 j'ai 20200504-152600-TEST_2020LMTA19_1_1_7.spc mais je veux que dans la colonne A de 'MONFICHIERS' n'apparaisse seulement 2020LMTA19_1_1_7

Je reste dispo pour toutes informations complémentaires bien sûre.

Merci d'avance pour l'aide
 

Pièces jointes

  • Fichier avec données à importer.xlsx
    18.5 KB · Affichages: 36
  • MONFICHIERS.xlsm
    35 KB · Affichages: 11
Solution
Bonjour,

Voici une macro d'extraction avec une connexion ADODB au fichier choisit. Fichier qui n'est donc point ouvert par excel.

C'est la requête SQL qui fait le travail de nettoyage des chaînes.

Bien-sûr tout peut être amélioré, les lignes ajoutées au lieu d'être remplacées etc..

Cordialement

herve62

XLDnaute Barbatruc
Supporter XLD
Bonsoir
Pas évident ton Pb !!
Ta méthode est bizarre ? , récupération de code je suppose ?
là j'ai "cassé" pour passer autrement , il y a un résultat mais aussi ton fichier de data est étrange ( row figées entre 2 et 41 ???) pas de données correspondantes entre A & M au début ??? mais enfin ......!!!!
A toi d'ajuster maintenant !!
 

Pièces jointes

  • Copy_hdv1.xlsm
    38.3 KB · Affichages: 11

scoubidou35

XLDnaute Occasionnel
Bonsoir
Pas évident ton Pb !!
Ta méthode est bizarre ? , récupération de code je suppose ?
là j'ai "cassé" pour passer autrement , il y a un résultat mais aussi ton fichier de data est étrange ( row figées entre 2 et 41 ???) pas de données correspondantes entre A & M au début ??? mais enfin ......!!!!
A toi d'ajuster maintenant !!


Bonjour herve62,
le fichier data est étrange car j'ai repris rapidement la structure du vrai fichier et je n'ai rempli que quelques lignes pour exemples :confused: pour être le plus précieux possible.
Et en fait il n'y a pas de donnée en A et M car en fait il s'agit d'une base internationale (il y a plusieurs pays à le compléter) et moi c'est FR pour France.
Je viens de regarder ton fichier et j'ai retranscris ton code sur mon fichier mère et sa marche mais il y a un petit souci. Comment inverser l'ordre des colonnes copié. J'ai essayé des choses mais mis à part décaler vers le bas et/ou vers la droite dans mon tableau je n'arrive pas à inverser.
En fait pour l'instant, ton code copie les données des colonnes A et M dans le fichier data et les transpose dans les colonnes A et B de ton fichier mais j'aimerai par exemple que M6 soit en A2 et A6 et B2 dans le fichier xlms. J'espère qu'avec mon exemple tu arriveras à me comprendre ;)
Merci encore
 

scoubidou35

XLDnaute Occasionnel
Je viens de trouver je pense la solution. Par contre je viens de m'apercevoir que si ne veux importer que les datas (fichiers avec données à importer) pour la France 'FR' il faut obligatoirement que j'aille dans le fichier data pour filtrer.
Il y a t'il moyen de filtrer automatiquement par exemple en rajoutant une liste déroulante des pays dans MONFICHIERS?
 

Pièces jointes

  • Fichier avec données à importer.xlsx
    16.2 KB · Affichages: 3
  • MONFICHIERS.xlsm
    37.2 KB · Affichages: 4

scoubidou35

XLDnaute Occasionnel
Pour la colonne A de MONFICHIERS j'ai besoins des caractères à partir du 22ème caractère jusqu'au point du .spc

ex : 20200504-152600-TEST_2020LMTA19_1_1_7.spc je voudrais 2020LMTA19_1_1_7
je pensais utiliser la fonction MID sauf que pour certaines lignes, j'ai par exemple 20200504-152600-TEST_2020LMTA19_1_1_10.spc qui doit donner 2020LMTA19_1_1_10 soit un caractère de plus. Comment peut on remédier au problème et où je dois la mettre dans le code?
Merci
 

scoubidou35

XLDnaute Occasionnel
Bon j'ai continué à bosser sur le fichier. Pour mon problème posé ci-dessus. J'ai réussi en parti à résoudre le problème en remplaçant le .spc par rien cela devrait normalement me permettre d'utiliser la fonction MID mais ça ne fonctionne pas et je ne comprends pas mon erreur :(
 

Pièces jointes

  • Fichier avec données à importer.xlsx
    16.2 KB · Affichages: 4
  • MONFICHIERS.xlsm
    38.2 KB · Affichages: 6

Hasco

XLDnaute Barbatruc
Repose en paix
bonjour,

Puisque vous avez excel 2016, voyez dans le classeur joint ce qu'il est possible de faire avec PowerQuery (inclus dans votre version).

Avant d'actualiser le tableau de la feuille 'PowerQuery' inscrivez en B1 le chemeint vers le fichier source des données.

Cordialement
 

Pièces jointes

  • MONFICHIERS.xlsm
    52.6 KB · Affichages: 7

scoubidou35

XLDnaute Occasionnel
bonjour,

Puisque vous avez excel 2016, voyez dans le classeur joint ce qu'il est possible de faire avec PowerQuery (inclus dans votre version).

Avant d'actualiser le tableau de la feuille 'PowerQuery' inscrivez en B1 le chemeint vers le fichier source des données.

Cordialement

Bonjour Roblochon
En effet, j'ai 'PowerQuery' mais c'est un outil que je ne maitrise pas faute de connaissance. Le résultat obtenu dans le tableau est bien ce que je recherche mais comme la source change en fonction du pays et de l'année. Je voulais savoir si on peut assembler 'PowerQuery' dans le VBA

Pour être plus clair, peut on sélectionner la source avec le code VBA et continuer avec PowerQuery ensuite?

Merci pour la piste ;-)
 

Hasco

XLDnaute Barbatruc
Repose en paix
Re,
Pour être plus clair, peut on sélectionner la source avec le code VBA et continuer avec PowerQuery ensuite?

Oui c'est possible de renseigner la cellule nommée FICHIER par vba, voici une macro de sélection de fichier :
VB:
Sub SelectionEmplacementFichier()
    Dim NomFichier As Variant

    NomFichier = Application.GetOpenFilename( _
                 "Fichiers Excel (*.xlsx;*.xlsm), *.xlsx;*.xlsm,Tous les fichiers (*.*),*.* ", 1, _
                 "Sélectionnez le fichier source des données", , False)

    If NomFichier <> False Then ThisWorkbook.Sheets("PowerQuery").Range("FICHIER") = NomFichier
End Sub

Il suffira ensuite de rafraîchir le tableau. Je vous laisse chercher....

PS : la cellule nommée FICHIER peut être sur une autre feuille, l'important est qu'elle soit nommée FICHIER (pour l'exemple réalisé ici)

Bonne soirée
 

cp4

XLDnaute Barbatruc
Bonsoir scoubidou35:), Herve62;), Roblochon;),

un essai avec possibilité de vider le tableau ou ajouter à la suite. J'espère que ça répond à tes attentes.

Bonne soirée.
 

Pièces jointes

  • MONFICHIERS - Copie.xlsm
    40.8 KB · Affichages: 8

scoubidou35

XLDnaute Occasionnel
Bonsoir scoubidou35:), Herve62;), Roblochon;),

un essai avec possibilité de vider le tableau ou ajouter à la suite. J'espère que ça répond à tes attentes.

Bonne soirée.
Bonjour cp4
Je viens d'ouvrir ton fichier pour regarder et je viens de m'apercevoir qu'il manque un caractère pour les codes échantillons (ex. lignes 9,10,11,etc...) j'ai rajouté un caractère dans la formule MID du code ainsi j'ai mon code complet mais pour les plus long et avec un point pour les codes ayant un caractère de moins.
Je pensai pouvoir corriger avec le code suivant :
Selection.Replace What:=".", Replacement:=" ", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Mais ca ne fonctionne pas je pense que c'est à cause de la boucle mais j'en pas sûr, je ne maîtrise pas assez encore les boucles.

En tout cas, mis à pars cela c'est bien plus que ce que demandais au départ mais il vrai que l'option pour vider le tableau est vraiment bien.

Merci beaucoup pour le taf.
 

scoubidou35

XLDnaute Occasionnel
Re,


Oui c'est possible de renseigner la cellule nommée FICHIER par vba, voici une macro de sélection de fichier :
VB:
Sub SelectionEmplacementFichier()
    Dim NomFichier As Variant

    NomFichier = Application.GetOpenFilename( _
                 "Fichiers Excel (*.xlsx;*.xlsm), *.xlsx;*.xlsm,Tous les fichiers (*.*),*.* ", 1, _
                 "Sélectionnez le fichier source des données", , False)

    If NomFichier <> False Then ThisWorkbook.Sheets("PowerQuery").Range("FICHIER") = NomFichier
End Sub

Il suffira ensuite de rafraîchir le tableau. Je vous laisse chercher....

PS : la cellule nommée FICHIER peut être sur une autre feuille, l'important est qu'elle soit nommée FICHIER (pour l'exemple réalisé ici)

Bonne soirée

Merci Roblochon pour la piste en effet ca répond également à ma question mais il faut que durant l'hiver quand l'activité sera moins importante que je fasse des recherches sur internet pour apprendre à utiliser PowerQuery car je pourrai bien en avoir besoins pour un autre projet.
Merci encore pour le temps passé et l'aide fourni. Bonne journée
 

scoubidou35

XLDnaute Occasionnel
Bonsoir scoubidou35:), Herve62;), Roblochon;),

un essai avec possibilité de vider le tableau ou ajouter à la suite. J'espère que ça répond à tes attentes.

Bonne soirée.

Je crois avoir trouvé la solution avec le code suivant :

Tfinal(1, j) = Replace(Tsource(i, 13), ".spc", " ")
Tfinal(1, j) = Mid(Tfinal(1, j), 22, 17) 'scan file name col13

C'est bien cela qu'il faut faire?
 

cp4

XLDnaute Barbatruc
Je crois avoir trouvé la solution avec le code suivant :

Tfinal(1, j) = Replace(Tsource(i, 13), ".spc", " ")
Tfinal(1, j) = Mid(Tfinal(1, j), 22, 17) 'scan file name col13

C'est bien cela qu'il faut faire?
edit:
Je me suis aperçu ce matin que le code plante si le fichier des données est déjà ouvert.
J'ai rajouté une récupération de la chaine en une seule ligne.
ci-joint fichier.
 

Pièces jointes

  • MONFICHIERS - V2.xlsm
    40.4 KB · Affichages: 5
Dernière édition:

Hasco

XLDnaute Barbatruc
Repose en paix
Bonjour,

Voici une macro d'extraction avec une connexion ADODB au fichier choisit. Fichier qui n'est donc point ouvert par excel.

C'est la requête SQL qui fait le travail de nettoyage des chaînes.

Bien-sûr tout peut être amélioré, les lignes ajoutées au lieu d'être remplacées etc..

Cordialement
 

Pièces jointes

  • MONFICHIERS Adodb.xlsm
    38.8 KB · Affichages: 9

Discussions similaires

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla