XL 2019 récupérer une donnée d'un fichier csv pour le copier vers un autre

Hutchy33

XLDnaute Nouveau
Bonjour,
Je souhaite faire un truc tout basique certainement pour certains mais j'ai pas le résultat voulu.
Je souhaite récupérer le contenu d'une cellule d'un fichier csv pour le copier vers une cellule sur un autre fichier.
J'ai utilisé ce code:
VB:
Sub CopierCellulesVersAutreFichier()
    Dim CheminSource As String
    Dim CheminDestination As String
    Dim FeuilleSource As Worksheet
    Dim FeuilleDestination As Worksheet
   
    ' Spécifiez le chemin complet du fichier source
    CheminSource = "C:\Users\HArnaud\Desktop\écriture form\retour résultats éval QCM\test.csv" '
   
    ' Spécifiez le chemin complet du fichier de destination
    CheminDestination = "C:\Users\HArnaud\Desktop\écriture form\retour résultats éval QCM\test qcm v3.xlsm" '
   
    ' Ouvrez le fichier source
    Workbooks.Open Filename:=CheminSource
   
    ' Spécifiez la feuille source et la feuille de destination
    Set FeuilleSource = Workbooks("test.csv").Sheets("test")
    Set FeuilleDestination = Workbooks("test qcm v3.xlsm").Sheets("resultats")
   
    ' Copiez les cellules de la feuille source vers la feuille de destination
    FeuilleSource.Range("A2").Copy FeuilleDestination.Range("B4")
   
    ' Fermez le fichier source sans enregistrer les modifications
    Workbooks("test.csv").Close SaveChanges:=False
End Sub

Je ne veux récupérer que la valeur de la cellule A2 et pourtant ça me récupère les valeurs de toutes les cellules de la ligne pour venir les copier en B4 de l'autre fichier. Je ne pige pas pourquoi .
Je vous joins les fichiers si quelqu'un à un peu de temps à y accorder s'il vous plait.
Merci beaucoup.
 
Dernière modification par un modérateur:

Cousinhub

XLDnaute Barbatruc
Re-,
Dans le fichier joint, je mixe 2 méthodes :
- Power Query pour importer les données du csv
- Un code pour créer autant de fiches qu'il y a de candidats, avec report de leur évaluation et données admin
Les onglets sont nommés par leur index (pour éviter toute erreur de nommage d'onglet genre "L'Huiller"), certains caractères étant interdits..
On peut très largement modifier le final, mais déjà, si ça te sied.
Bonne journée
 

Pièces jointes

  • QCM CDT V3.xlsm
    38.1 KB · Affichages: 1

Hutchy33

XLDnaute Nouveau
Re-,
Dans le fichier joint, je mixe 2 méthodes :
- Power Query pour importer les données du csv
- Un code pour créer autant de fiches qu'il y a de candidats, avec report de leur évaluation et données admin
Les onglets sont nommés par leur index (pour éviter toute erreur de nommage d'onglet genre "L'Huiller"), certains caractères étant interdits..
On peut très largement modifier le final, mais déjà, si ça te sied.
Bonne journée
merci j'ai juste mis en test le code j'ai un retour erreur en pj mais j'ai pas approfondi le truc.
 

Pièces jointes

  • Capture.JPG
    Capture.JPG
    17.7 KB · Affichages: 6

Cousinhub

XLDnaute Barbatruc
Re-,
Le code, tu l'as mis dans ton fichier?
ça ne marchera pas, parce que tu n'as pas de requête Power Query
Il faut essayer à partir du mien (en l'enregistrant dans le répertoire contenant ton fichier csv)
Pour configurer (à faire 1 seule fois) PQ, fais cette opération :
- Dans le ruban "Données", clique sur "Obtenir des données", puis "Options de requête"

1696410338413.png


Et dans la fenêtre qui s'ouvre, tu sélectionnes "Confidentialité" à gauche, et valides "Toujours ignorer les paramètres......"

1696410423603.png


Cette opération n'est à faire qu'une seule fois pour toute...
 

Hutchy33

XLDnaute Nouveau
Re-,
Le code, tu l'as mis dans ton fichier?
ça ne marchera pas, parce que tu n'as pas de requête Power Query
Il faut essayer à partir du mien (en l'enregistrant dans le répertoire contenant ton fichier csv)
Pour configurer (à faire 1 seule fois) PQ, fais cette opération :
- Dans le ruban "Données", clique sur "Obtenir des données", puis "Options de requête"

Regarde la pièce jointe 1180281

Et dans la fenêtre qui s'ouvre, tu sélectionnes "Confidentialité" à gauche, et valides "Toujours ignorer les paramètres......"

Regarde la pièce jointe 1180282

Cette opération n'est à faire qu'une seule fois pour toute...
merci beaucoup ça à l'air pas mal, je me penche plus dessus à partir de 15h et je te fais un retour plus approfondi
 

Hutchy33

XLDnaute Nouveau
Re-,
Le code, tu l'as mis dans ton fichier?
ça ne marchera pas, parce que tu n'as pas de requête Power Query
Il faut essayer à partir du mien (en l'enregistrant dans le répertoire contenant ton fichier csv)
Pour configurer (à faire 1 seule fois) PQ, fais cette opération :
- Dans le ruban "Données", clique sur "Obtenir des données", puis "Options de requête"

Regarde la pièce jointe 1180281

Et dans la fenêtre qui s'ouvre, tu sélectionnes "Confidentialité" à gauche, et valides "Toujours ignorer les paramètres......"

Regarde la pièce jointe 1180282

Cette opération n'est à faire qu'une seule fois pour toute...
Bonjour CousinHub!
Honnêtement ton code marche très bien, depuis hier aprem j'essaie de le déchiffrer mais j'ai pas toutes les notions pour notamment sur la fonction QueryTable sur la quelle j'ai fait des recherches mais j'ai pas tout pigé :) J'ai voulu faire une petite modification du code pour faire en sorte que chaque onglets soit nommé: Prénom+NOM_evalCDT au lieu d'un numéro incrémenté (pour par la suite faire un export de chaque onglet en pdf et qui sera nommé Prénom+NOM_evalCDT.pdf). Peux-tu stp m'indiquer dans ton code où je dois faire la modif
 

Cousinhub

XLDnaute Barbatruc
Bonjour,
Comme je te l'ai dit hier, pour le moment, je nommais les onglets par leur index, car certains caractères sont interdits dans le nommage des onglets / \ ? * : [ ]
Et le nombre de caractères est limité à 31
Comment récupères-tu "evalCDT"?
Pour la fonction QueryTable : la ligne de code met à jour la requête Power Query présente dans le fichier...
Pour la visualiser, tu tapes sur Alt + F12 et tu as accès à l'éditeur PQ
A gauche, les requêtes, et à droite, les étapes.
1696493190502.png

La fonction CheminFichier permet de récupérer le nom et l'emplacement du fichier (inscrit dans la cellule A1 par la validation de Application.GetOpenFilename)
Dans la requête T_Final, j'importe donc ce fichier, je prends la 1ère ligne en En-Tête, j'ajoute un Index (mais les 4 étapes intermédiaires pourront être supprimées si on opte pour un nommage Nom+Prénom_evalCDT)
Au final, il faut bien "borner" ce nommage.
PS, pour la fin de ton projet (exporter en pdf), je ne te serai d'aucune aide, il existe moult exemples sur ce site
Bonne journée
 

Hutchy33

XLDnaute Nouveau
Bonjour,
Comme je te l'ai dit hier, pour le moment, je nommais les onglets par leur index, car certains caractères sont interdits dans le nommage des onglets / \ ? * : [ ]
Et le nombre de caractères est limité à 31
Comment récupères-tu "evalCDT"?
Pour la fonction QueryTable : la ligne de code met à jour la requête Power Query présente dans le fichier...
Pour la visualiser, tu tapes sur Alt + F12 et tu as accès à l'éditeur PQ
A gauche, les requêtes, et à droite, les étapes.
Regarde la pièce jointe 1180360
La fonction CheminFichier permet de récupérer le nom et l'emplacement du fichier (inscrit dans la cellule A1 par la validation de Application.GetOpenFilename)
Dans la requête T_Final, j'importe donc ce fichier, je prends la 1ère ligne en En-Tête, j'ajoute un Index (mais les 4 étapes intermédiaires pourront être supprimées si on opte pour un nommage Nom+Prénom_evalCDT)
Au final, il faut bien "borner" ce nommage.
PS, pour la fin de ton projet (exporter en pdf), je ne te serai d'aucune aide, il existe moult exemples sur ce site
Bonne journée
Bonjour,
Merci pour ta réponse si rapide. Dans le nommage des feuilles la fin du nom _evalCDT sera en dur pour le reste il faudrait donc récupérer le Prénom+NOM dans le csv.
Pour l'export pdf oui c'est bon merci j'ai la solution qu'il me faut, c'est juste le nommage des onglets que je ne parviens pas à faire. J'ai bien vu que le nommage se fait à cette ligne de code ci:
.Name = LoRF.DataBodyRange(1, I)

C'est surement les valeurs antre parenthèses que je dois modifier non?
En tout cas merci encore pour ton aide et passe une bonne journée également.
 

Cousinhub

XLDnaute Barbatruc
Re-,
Oui, c'est à ce niveau
LoRF est le Tableau Structuré (TS) issu de la requête (en vert dans l'onglet "Base"), et défini dans cette ligne de code :
VB:
Set LoRF = Range("T_Final").ListObject

Pour travailler en VBA sur des TS, il est préférable d'utiliser les instructions spécifiques à cet objet
Tu peux en voir un excellent résumé sous ce lien
Tu y découvriras notamment l'instruction DataBodyRange et tout ce qu'on peut y faire
PS, ça fait plaisir de participer à un fil où le demandeur cherche vraiment à le faire par lui-même, en plus d'être gratifiant pour lui, pour nous, c'est motivant
 

Hutchy33

XLDnaute Nouveau
Re-,
Oui, c'est à ce niveau
LoRF est le Tableau Structuré (TS) issu de la requête (en vert dans l'onglet "Base"), et défini dans cette ligne de code :
VB:
Set LoRF = Range("T_Final").ListObject

Pour travailler en VBA sur des TS, il est préférable d'utiliser les instructions spécifiques à cet objet
Tu peux en voir un excellent résumé sous ce lien
Tu y découvriras notamment l'instruction DataBodyRange et tout ce qu'on peut y faire
PS, ça fait plaisir de participer à un fil où le demandeur cherche vraiment à le faire par lui-même, en plus d'être gratifiant pour lui, pour nous, c'est motivant
Merci pour le lien qui effectivement m'a permis de comprendre un peu plus ton code!
J'ai un gros soucis et je ne comprends pas pourquoi j'ai un retour d'erreur maintenant avec le code alors que j'ai rien modifié en particulier.
Après modification du code pour changer le nom de chaque feuille j'ai procédé à un test avec tout d'abord un fichier avec simplement un seul participant, impeccable tout fonctionnait très bien.
Deuxième test avec cette fois un fichier avec plusieurs participants, j'ai eu un retour d'erreur normale car un même participant avait fait plusieurs fois le qcm donc le code ne pouvait pas créer le nom des feuilles avec le même nommage. J'ai modifié le fichier csv et supprimer les doublons puis relancer mon test. Mais depuis j'ai une erreur au niveau d'une des tables, le code ne parvient pas à transformer une donnée...j'ai pas tout compris!
C'est hallucinant des fois les erreurs qui arrivent sans trop comprendre pourquoi.
fichiers joint avec deux fichiers test.
 

Pièces jointes

  • V3.zip
    44.1 KB · Affichages: 3

Cousinhub

XLDnaute Barbatruc
Re-,
Comme tu as mis le code dans l'Open du ThisWorkbook, si l'onglet actif est "Modèle", le nom et l'adresse du fichier csv est donc copié dans la cellule A1 de cet onglet
Dans ton code, modifie ainsi :
VB:
....
....
Sheets("Base").Range("A1").Value = Fich
....
...
 

Discussions similaires

Statistiques des forums

Discussions
312 209
Messages
2 086 259
Membres
103 167
dernier inscrit
miriame