Appel de fichier source macro excel
Résolu/Fermé
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
-
18 janv. 2017 à 10:39
Wizaar Messages postés 10 Date d'inscription mercredi 18 janvier 2017 Statut Membre Dernière intervention 23 janvier 2017 - 23 janv. 2017 à 10:30
Wizaar Messages postés 10 Date d'inscription mercredi 18 janvier 2017 Statut Membre Dernière intervention 23 janvier 2017 - 23 janv. 2017 à 10:30
A voir également:
- Appel de fichier source macro excel
- Fichier rar - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
8 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 janv. 2017 à 13:00
18 janv. 2017 à 13:00
Bonjour Wizaar, bonjour le forum,
Pour éviter toute confusion, je passe par des variables pour nommer classeur source / classeur destination, onglet source et onglet destination.
Comme dans ton code je ne vois aucune ligne correspondant à l'activation d'un classeur ou d'un onglet, je vais avoir du mal a te proposer un code adapté à ton cas. Mais disons que :
- le classeur destination contient la macro
- l'onglet destination soit nommé Feuil1
- le classeur source soit nommé Classeur Source.xlsx
- l'onglet source soit nommé OMTest
(tu adapteras à ton cas...)
Ça donnerait un code du type :
Pour éviter toute confusion, je passe par des variables pour nommer classeur source / classeur destination, onglet source et onglet destination.
Comme dans ton code je ne vois aucune ligne correspondant à l'activation d'un classeur ou d'un onglet, je vais avoir du mal a te proposer un code adapté à ton cas. Mais disons que :
- le classeur destination contient la macro
- l'onglet destination soit nommé Feuil1
- le classeur source soit nommé Classeur Source.xlsx
- l'onglet source soit nommé OMTest
(tu adapteras à ton cas...)
Ça donnerait un code du type :
Private Sub cm1_Click() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Set CD = ThisWorkbook 'définit le classeur destination CD Set OD = CD.Worksheets("Feuil1") 'définit l'onglet destination (à adapter à ton cas) Set CS = Workbooks("Classeur Source.xlsx") 'définit le classeur source CS (nom à adapter à ton cas) - Il faut impérativement que se classeur soit ouvert ! Set OS = CS.Worksheets("OMTest") 'définit l'onglet source OS OD.Range("D8").Value = OS.Range("C9").Value 'plus besoin de sélectionner ni le classeur ni l'onglet, il sont spécifiés dans le code 'autres lignes à adapter... End Sub
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
18 janv. 2017 à 19:53
18 janv. 2017 à 19:53
Re,
Dans la version actuelle de mon code, l'activation du bouton de commande ouvre une fenêtre pour sélectionner le fichier source, ce qui est parfait, j'aimerais seulement pouvoir ne le sélectionner qu'une seule fois et non pour chaque ligne de code.
Pourquoi tu ne fournis pas le code intégral ? Si tu as déjà un code d'ouverture de classeur, juste après l'ouverture, il suffit de définir le classeur source avec la ligne de code :
Puis tu reprends toutes tes lignes...
Sinon, pour rajouter le code d'ouverture, il me faudrait au moins le chemin d'accès complet du dossier où se trouvent tous les fichiers source...
Dans la version actuelle de mon code, l'activation du bouton de commande ouvre une fenêtre pour sélectionner le fichier source, ce qui est parfait, j'aimerais seulement pouvoir ne le sélectionner qu'une seule fois et non pour chaque ligne de code.
Pourquoi tu ne fournis pas le code intégral ? Si tu as déjà un code d'ouverture de classeur, juste après l'ouverture, il suffit de définir le classeur source avec la ligne de code :
Set CS = ActiveWorkbook
Puis tu reprends toutes tes lignes...
Sinon, pour rajouter le code d'ouverture, il me faudrait au moins le chemin d'accès complet du dossier où se trouvent tous les fichiers source...
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
19 janv. 2017 à 10:10
19 janv. 2017 à 10:10
Re !
J'ai bien posté l'intégralité de mon code...
Je ne sais pas pourquoi ça marche, mais ça marche ^^
J'imagine qu'excel reconnait automatiquement un chemin incomplet sur la première commande ou quelque chose comme ça.
Du coup je suis un peu perdu...
Le chemin d'accès au dossier contenant les classeurs source ressemble à
C:\Users\Username\Desktop\User\Documents test
J'attends que ça fonctionne pour le passer sur le serveur commun mais j'imagine qu'il suffira de changer le chemin ensuite par la nouvelle localisation du fichier.
J'ai bien posté l'intégralité de mon code...
Je ne sais pas pourquoi ça marche, mais ça marche ^^
J'imagine qu'excel reconnait automatiquement un chemin incomplet sur la première commande ou quelque chose comme ça.
Du coup je suis un peu perdu...
Le chemin d'accès au dossier contenant les classeurs source ressemble à
C:\Users\Username\Desktop\User\Documents test
J'attends que ça fonctionne pour le passer sur le serveur commun mais j'imagine qu'il suffira de changer le chemin ensuite par la nouvelle localisation du fichier.
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
>
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
19 janv. 2017 à 10:50
19 janv. 2017 à 10:50
Bonjour Wizaar, bonjour le forum,
Si les fichiers source se trouvent dans le même dossier que le fichier destination on n'a pas besoin du chemin d'accès...
Si les fichiers source se trouvent dans le même dossier que le fichier destination on n'a pas besoin du chemin d'accès...
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
>
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
19 janv. 2017 à 10:57
19 janv. 2017 à 10:57
C'est seulement le cas pour les versions test. Les versions finales seront bien dans des dossiers différents sur un serveur commun.
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
>
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
19 janv. 2017 à 11:24
19 janv. 2017 à 11:24
Re,
Le code avec la boîte de dialogue Ouvrir qui permet de sélectionner le fichier source :
Le code avec la boîte de dialogue Ouvrir qui permet de sélectionner le fichier source :
Private Sub cm1_Click() Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim FD As FileDialog 'déclare la variable FD (FileDialog) Dim CA As String 'déclare la varaible CA (Chemin d'accès) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Set CD = ThisWorkbook 'définit le classeur destination CD Set OD = CD.Worksheets("Feuil1") 'définit l'onglet destination (à adapter à ton cas) CA = CD.Path 'définit le chemin d'accès CA du classeur destination Set FD = Application.FileDialog(msoFileDialogOpen) 'définit la variable FD (Fichier Ouvrir) With FD 'prend en compte la variable FD .InitialFileName = CA & "\*.xlsx" 'définit le chemin d'accès et les fichiers ciblés par défaut .AllowMultiSelect = False 'ne permet la sélection que d'un seul fichier If .Show = 0 Then Exit Sub 'si bouton "Annuler", sort de la procédure End With 'fin de la prise en compte de la varaible FD Set FD = Nothing 'vide la variable de la mémoire Set CS = ActiveWorkbook 'définit le classeur source CS Set OS = CS.Worksheets("OMTest") 'définit l'onglet source OS OD.Range("D8").Value = OS.Range("C9").Value 'plus besoin de sélectionner ni le classeur ni l'onglet, il sont spécifiés dans le code 'autres lignes à adapter... End Sub
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
>
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
19 janv. 2017 à 13:12
19 janv. 2017 à 13:12
Ok j'essaie de mettre ça en place cet après-midi.
Merci bien !
Merci bien !
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
20 janv. 2017 à 11:00
20 janv. 2017 à 11:00
Re-bonjour !
Pas eu le temps de tester hier.
Je viens de faire l'essai ce matin !
Quand j'active la macro, après m'avoir demandé de sélectionner le classeur source, elle plante.
Le message d'erreur :
Erreur d’exécution "9" :
L'indice n'appartient pas à la sélection.
Et apparemment c'est cette ligne qui coince :
Set OS = CS.Worksheets("OMtest") 'définit l'onglet source OS
Pourtant l'onglet en question est correctement nommé...
J'ai essayé avec la dénomination CS.Worksheets(1) puisque c'est le premier onglet en partant de la gauche et que j'ai lu quelque part qu'on pouvait l'appeler aussi de cette manière.
Quand je lance la macro avec ce changement, elle ne plante plus, mais je n'ai aucun résultat...
Des idées ?
Pas eu le temps de tester hier.
Je viens de faire l'essai ce matin !
Quand j'active la macro, après m'avoir demandé de sélectionner le classeur source, elle plante.
Le message d'erreur :
Erreur d’exécution "9" :
L'indice n'appartient pas à la sélection.
Et apparemment c'est cette ligne qui coince :
Set OS = CS.Worksheets("OMtest") 'définit l'onglet source OS
Pourtant l'onglet en question est correctement nommé...
J'ai essayé avec la dénomination CS.Worksheets(1) puisque c'est le premier onglet en partant de la gauche et que j'ai lu quelque part qu'on pouvait l'appeler aussi de cette manière.
Quand je lance la macro avec ce changement, elle ne plante plus, mais je n'ai aucun résultat...
Des idées ?
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
20 janv. 2017 à 11:58
20 janv. 2017 à 11:58
Re,
Oui, si tu es sûr que l'onglet est toujours le premier ton changement est correct. Mais malheureusement, sans les fichiers (le destination et au moins un source), je ne pourrai pas t'aider plus que ça...
Oui, si tu es sûr que l'onglet est toujours le premier ton changement est correct. Mais malheureusement, sans les fichiers (le destination et au moins un source), je ne pourrai pas t'aider plus que ça...
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
20 janv. 2017 à 12:08
20 janv. 2017 à 12:08
L'onglet source est bien toujours le premier, pourtant les informations ne sont pas récupérées. Pourtant avec ma première version "à l'arrache" ça fonctionnait ce qui me laisse perplexe...
Le classeur destination : https://ufile.io/ec8b4
Le classeur source : https://ufile.io/c6e41
Le classeur destination : https://ufile.io/ec8b4
Le classeur source : https://ufile.io/c6e41
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
20 janv. 2017 à 12:13
20 janv. 2017 à 12:13
Re,
Je ne pourrai regarder ça que plus tard dans la soirée...
Je ne pourrai regarder ça que plus tard dans la soirée...
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
20 janv. 2017 à 12:16
20 janv. 2017 à 12:16
Pas de problème déjà que tu m'aides je vais pas te presser en plus ;)
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
20 janv. 2017 à 15:18
20 janv. 2017 à 15:18
Désolé mais je n'arrive pas à télécharger tes fichiers. FireFox me bloque l'accès... Regarde avec https://www.cjoint.com/
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
20 janv. 2017 à 15:25
20 janv. 2017 à 15:25
classeur destination : https://www.cjoint.com/c/GAuoyQnvMp6
classeur source : https://www.cjoint.com/c/GAuozEUK7A6
classeur source : https://www.cjoint.com/c/GAuozEUK7A6
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
20 janv. 2017 à 19:25
20 janv. 2017 à 19:25
Bonsoir,
Il y avait en effet une erreur dans mon code qui n'ouvrait pas le classeur source. C'est corrigé, regarde si ça convient. Tu m'as envoyé un fichier source vierge et évidemment la macro récupère des valeurs vides. Pense a pré remplir le fichier source pour récupérer ses données dans la fichier destination...
Le code corrigé :
Il y avait en effet une erreur dans mon code qui n'ouvrait pas le classeur source. C'est corrigé, regarde si ça convient. Tu m'as envoyé un fichier source vierge et évidemment la macro récupère des valeurs vides. Pense a pré remplir le fichier source pour récupérer ses données dans la fichier destination...
Le code corrigé :
Private Sub cm1_Click() 'Rapprochement entre données de l'ordre de mission et de l'état de frais de mission Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim FD As FileDialog 'déclare la variable FD (FileDialog) Dim CA As String 'déclare la varaible CA (Chemin d'accès) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Set CD = ThisWorkbook 'définit le classeur destination CD Set OD = CD.Worksheets("MISSION") 'définit l'onglet destination CA = CD.Path 'définit le chemin d'accès CA du classeur destination Set FD = Application.FileDialog(msoFileDialogOpen) 'définit la variable FD (Fichier Ouvrir) With FD 'prend en compte la variable FD .InitialFileName = CA & "\*.xlsx" 'définit le chemin d'accès et les fichiers ciblés par défaut .AllowMultiSelect = False 'ne permet la sélection que d'un seul fichier If .Show = 0 Then Exit Sub Else .Execute 'si bouton "Annuler", sort de la procédure, sinon ouvre le fichier End With 'fin de la prise en compte de la variable FD Set FD = Nothing 'vide la variable de la mémoire Set CS = ActiveWorkbook 'définit le classeur source CS Set OS = CS.Worksheets("OMtest") 'définit l'onglet source OS 'valeurs fixes OD.Range("D8").Value = OS.Range("C9").Value OD.Range("L8").Value = OS.Range("G9").Value OD.Range("A11").Value = OS.Range("B12").Value OD.Range("D13").Value = OS.Range("C15").Value OD.Range("L13").Value = OS.Range("F15").Value OD.Range("D15").Value = OS.Range("C18").Value OD.Range("L15").Value = OS.Range("F18").Value OD.Range("I70").Value = OS.Range("C29").Value 'valeurs modifiées OD.Range("L3").Value = OS.Range("C6").Value If OD.Range("L3").Value = "Présidence Direction" Then OD.Range("L3").Value = "PDS" ElseIf OD.Range("L3").Value = "Relations extérieures et formation continue" Then OD.Range("L3").Value = "DRE" ElseIf OD.Range("L3").Value = "Etudes" Then OD.Range("L3").Value = "DE" ElseIf OD.Range("L3").Value = "Technique" Then OD.Range("L3").Value = "PDS" Else: OD.Range("L3").Value = "" End If OD.Range("N3").Value = OS.Range("F6").Value If OD.Range("N3").Value = "Atelier Ludwigsburg Paris" Then OD.Range("N3").Value = "FACAD" ElseIf OD.Range("N3").Value = "Financier" Then OD.Range("N3").Value = "FINAN" ElseIf OD.Range("N3").Value = "Relations extérieures" Then OD.Range("N3").Value = "FAEXT" ElseIf OD.Range("N3").Value = "Echanges" Then OD.Range("N3").Value = "FECHA" ElseIf OD.Range("N3").Value = "Festivals" Then OD.Range("N3").Value = "FFEST" ElseIf OD.Range("N3").Value = "Formation Continue" Then OD.Range("N3").Value = "FCONT" ElseIf OD.Range("N3").Value = "1ère Année" Then OD.Range("N3").Value = "F1A" ElseIf OD.Range("N3").Value = "2ème Année" Then OD.Range("N3").Value = "F2A" ElseIf OD.Range("N3").Value = "3ème Année" Then OD.Range("N3").Value = "F3A" ElseIf OD.Range("N3").Value = "4ème Année" Then OD.Range("N3").Value = "F4A" ElseIf OD.Range("N3").Value = "Commun années" Then OD.Range("N3").Value = "FCOA" ElseIf OD.Range("N3").Value = "Distribution Exploitation" Then OD.Range("N3").Value = "FDIST" ElseIf OD.Range("N3").Value = "Recherche" Then OD.Range("N3").Value = "FRECH" ElseIf OD.Range("N3").Value = "Résidence" Then OD.Range("N3").Value = "FRSD" ElseIf OD.Range("N3").Value = "Série TV" Then OD.Range("N3").Value = "FTV" ElseIf OD.Range("N3").Value = "Technique" Then OD.Range("N3").Value = "FINAN" Else: OD.Range("N3").Value = "" End If OD.Range("I54").Value = OS.Range("C23").Value If OD.Range("I54").Value = "Indemnité forfaitaire de repas" Or OD.Range("I54").Value = "Facturé directement à La Fémis (2)" Then OD.Range("I54").Value = "La FEMIS" Else: OD.Range("I54").Value = "" End If OD.Range("I61").Value = OS.Range("F23").Value If OD.Range("I61").Value = "Indemnité forfaitaire de nuitée" Or OD.Range("I61").Value = "Facturé directement à La Fémis (2)" Then OD.Range("I61").Value = "La FEMIS" Else: OD.Range("I61").Value = "" End If OD.Range("I74").Value = OS.Range("F29").Value If OD.Range("I74").Value = "Facturé directement à La Fémis" Then OD.Range("I74").Value = "La FEMIS" Else: OD.Range("I74").Value = "" End If End Sub
Wizaar
Messages postés
10
Date d'inscription
mercredi 18 janvier 2017
Statut
Membre
Dernière intervention
23 janvier 2017
Modifié par Wizaar le 23/01/2017 à 10:30
Modifié par Wizaar le 23/01/2017 à 10:30
Salut !
J'ai mis en place le changement ce matin et tout a l'air de rouler !
Merci beaucoup pour ton aide, c'est une fonction que je réutiliserais ^^
Je clôture le sujet.
Encore merci !
J'ai mis en place le changement ce matin et tout a l'air de rouler !
Merci beaucoup pour ton aide, c'est une fonction que je réutiliserais ^^
Je clôture le sujet.
Encore merci !
18 janv. 2017 à 14:51
Ce que tu me proposes ressemble à ce que j'ai essayé de faire en premier lieu en me basant sur des infos que j'ai trouvé sur les différents forums.
Malheureusement ça ne me convient pas.
Dans ce que tu proposes, le classeur source est défini il me semble.
Or, dans mon cas, le classeur source est différent pour chaque utilisation.
A un Etat de Frais de Mission correspond un Ordre de Mission unique.
Dans la version actuelle de mon code, l'activation du bouton de commande ouvre une fenêtre pour sélectionner le fichier source, ce qui est parfait, j'aimerais seulement pouvoir ne le sélectionner qu'une seule fois et non pour chaque ligne de code.
Donc le code que tu me propose me conviendrais si et seulement si il serait possible de sélectionner le Classeur Source (ou CS dans ton code) manuellement à l'initialisation de la macro.
Existe-t'il une commande pour remplacer la ligne :
Set CS = Workbooks("Classeur Source.xlsx")
ou le choix serait donné à l'utilisateur de sélectionner le classeur source parmi tous les ordres de mission existants ?
Merci d'avance !