Appel de fichier source macro excel
Résolu
Wizaar
Messages postés
10
Date d'inscription
Statut
Membre
Dernière intervention
-
Wizaar Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Wizaar Messages postés 10 Date d'inscription Statut Membre Dernière intervention -
Bonjour !
Voila je travaille sur un remplissage automatique de formulaire par les informations d'un autre formulaire. Le formulaire source est un Ordre de Mission et je cherche à récupérer les informations servant à établir l’État de Frais de Mission.
Avec mes quelques connaissances j'ai crée un bouton ActiveX pour faire le rapprochement des deux ayant comme code ce qui suit :
Private Sub cm1_Click()
'Rapprochement entre données de l'ordre de mission et de l'état de frais de mission
'valeurs fixes
Application.ActiveSheet.Range("D8").Value = "=OMtest!$C$9"
Application.ActiveSheet.Range("L8").Value = "=OMtest!$G$9"
Application.ActiveSheet.Range("A11").Value = "=OMtest!$B$12"
Application.ActiveSheet.Range("D13").Value = "=OMtest!$C$15"
Application.ActiveSheet.Range("L13").Value = "=OMtest!$F$15"
Application.ActiveSheet.Range("D15").Value = "=OMtest!$C$18"
Application.ActiveSheet.Range("L15").Value = "=OMtest!$F$18"
Application.ActiveSheet.Range("I70").Value = "=OMtest!$C$29"
'valeurs modifiées
Application.ActiveSheet.Range("L3").Value = "=OMtest!$C$6"
If Application.ActiveSheet.Range("L3").Value = "Présidence Direction" Then
Application.ActiveSheet.Range("L3").Value = "PDS"
ElseIf Application.ActiveSheet.Range("L3").Value = "Relations extérieures et formation continue" Then
Application.ActiveSheet.Range("L3").Value = "DRE"
ElseIf Application.ActiveSheet.Range("L3").Value = "Etudes" Then
Application.ActiveSheet.Range("L3").Value = "DE"
ElseIf Application.ActiveSheet.Range("L3").Value = "Technique" Then
Application.ActiveSheet.Range("L3").Value = "PDS"
Else: Application.ActiveSheet.Range("L3").Value = ""
End If
Application.ActiveSheet.Range("N3").Value = "=OMtest!$F$6"
If Application.ActiveSheet.Range("N3").Value = "Atelier Ludwigsburg Paris" Then
Application.ActiveSheet.Range("N3").Value = "FACAD"
ElseIf Application.ActiveSheet.Range("N3").Value = "Financier" Then
Application.ActiveSheet.Range("N3").Value = "FINAN"
ElseIf Application.ActiveSheet.Range("N3").Value = "Relations extérieures" Then
Application.ActiveSheet.Range("N3").Value = "FAEXT"
ElseIf Application.ActiveSheet.Range("N3").Value = "Echanges" Then
Application.ActiveSheet.Range("N3").Value = "FECHA"
ElseIf Application.ActiveSheet.Range("N3").Value = "Festivals" Then
Application.ActiveSheet.Range("N3").Value = "FFEST"
ElseIf Application.ActiveSheet.Range("N3").Value = "Formation Continue" Then
Application.ActiveSheet.Range("N3").Value = "FCONT"
ElseIf Application.ActiveSheet.Range("N3").Value = "1ère Année" Then
Application.ActiveSheet.Range("N3").Value = "F1A"
ElseIf Application.ActiveSheet.Range("N3").Value = "2ème Année" Then
Application.ActiveSheet.Range("N3").Value = "F2A"
ElseIf Application.ActiveSheet.Range("N3").Value = "3ème Année" Then
Application.ActiveSheet.Range("N3").Value = "F3A"
ElseIf Application.ActiveSheet.Range("N3").Value = "4ème Année" Then
Application.ActiveSheet.Range("N3").Value = "F4A"
ElseIf Application.ActiveSheet.Range("N3").Value = "Commun années" Then
Application.ActiveSheet.Range("N3").Value = "FCOA"
ElseIf Application.ActiveSheet.Range("N3").Value = "Distribution Exploitation" Then
Application.ActiveSheet.Range("N3").Value = "FDIST"
ElseIf Application.ActiveSheet.Range("N3").Value = "Recherche" Then
Application.ActiveSheet.Range("N3").Value = "FRECH"
ElseIf Application.ActiveSheet.Range("N3").Value = "Résidence" Then
Application.ActiveSheet.Range("N3").Value = "FRSD"
ElseIf Application.ActiveSheet.Range("N3").Value = "Série TV" Then
Application.ActiveSheet.Range("N3").Value = "FTV"
ElseIf Application.ActiveSheet.Range("N3").Value = "Technique" Then
Application.ActiveSheet.Range("N3").Value = "FINAN"
Else: Application.ActiveSheet.Range("N3").Value = ""
End If
Application.ActiveSheet.Range("I54").Value = "=OMtest!$C$23"
If Application.ActiveSheet.Range("I54").Value = "Indemnité forfaitaire de repas" Or Application.ActiveSheet.Range("I54").Value = "Facturé directement à La Fémis (2)" Then
Application.ActiveSheet.Range("I54").Value = "La FEMIS"
Else: Application.ActiveSheet.Range("I54").Value = ""
End If
Application.ActiveSheet.Range("I61").Value = "=OMtest!$F$23"
If Application.ActiveSheet.Range("I61").Value = "Indemnité forfaitaire de nuitée" Or Application.ActiveSheet.Range("I61").Value = "Facturé directement à La Fémis (2)" Then
Application.ActiveSheet.Range("I61").Value = "La FEMIS"
Else: Application.ActiveSheet.Range("I61").Value = ""
End If
Application.ActiveSheet.Range("I74").Value = "=OMtest!$F$29"
If Application.ActiveSheet.Range("I74").Value = "Facturé directement à La Fémis" Then
Application.ActiveSheet.Range("I74").Value = "La FEMIS"
Else: Application.ActiveSheet.Range("I74").Value = ""
End If
End Sub
Actuellement j'obtiens bien le résultat que je veux.
Par contre, je dois sélectionner le fichier source dans la fenêtre d'ouverture de fichier pour chaque ligne de code.
Le fichier source étant toujours le même pour chaque ligne, j'aimerais un moyen de ne le sélectionner qu'une seule fois au début et qu'il serve de référence pour toutes les lignes suivantes !
Merci d'avance de votre aide.
Voila je travaille sur un remplissage automatique de formulaire par les informations d'un autre formulaire. Le formulaire source est un Ordre de Mission et je cherche à récupérer les informations servant à établir l’État de Frais de Mission.
Avec mes quelques connaissances j'ai crée un bouton ActiveX pour faire le rapprochement des deux ayant comme code ce qui suit :
Private Sub cm1_Click()
'Rapprochement entre données de l'ordre de mission et de l'état de frais de mission
'valeurs fixes
Application.ActiveSheet.Range("D8").Value = "=OMtest!$C$9"
Application.ActiveSheet.Range("L8").Value = "=OMtest!$G$9"
Application.ActiveSheet.Range("A11").Value = "=OMtest!$B$12"
Application.ActiveSheet.Range("D13").Value = "=OMtest!$C$15"
Application.ActiveSheet.Range("L13").Value = "=OMtest!$F$15"
Application.ActiveSheet.Range("D15").Value = "=OMtest!$C$18"
Application.ActiveSheet.Range("L15").Value = "=OMtest!$F$18"
Application.ActiveSheet.Range("I70").Value = "=OMtest!$C$29"
'valeurs modifiées
Application.ActiveSheet.Range("L3").Value = "=OMtest!$C$6"
If Application.ActiveSheet.Range("L3").Value = "Présidence Direction" Then
Application.ActiveSheet.Range("L3").Value = "PDS"
ElseIf Application.ActiveSheet.Range("L3").Value = "Relations extérieures et formation continue" Then
Application.ActiveSheet.Range("L3").Value = "DRE"
ElseIf Application.ActiveSheet.Range("L3").Value = "Etudes" Then
Application.ActiveSheet.Range("L3").Value = "DE"
ElseIf Application.ActiveSheet.Range("L3").Value = "Technique" Then
Application.ActiveSheet.Range("L3").Value = "PDS"
Else: Application.ActiveSheet.Range("L3").Value = ""
End If
Application.ActiveSheet.Range("N3").Value = "=OMtest!$F$6"
If Application.ActiveSheet.Range("N3").Value = "Atelier Ludwigsburg Paris" Then
Application.ActiveSheet.Range("N3").Value = "FACAD"
ElseIf Application.ActiveSheet.Range("N3").Value = "Financier" Then
Application.ActiveSheet.Range("N3").Value = "FINAN"
ElseIf Application.ActiveSheet.Range("N3").Value = "Relations extérieures" Then
Application.ActiveSheet.Range("N3").Value = "FAEXT"
ElseIf Application.ActiveSheet.Range("N3").Value = "Echanges" Then
Application.ActiveSheet.Range("N3").Value = "FECHA"
ElseIf Application.ActiveSheet.Range("N3").Value = "Festivals" Then
Application.ActiveSheet.Range("N3").Value = "FFEST"
ElseIf Application.ActiveSheet.Range("N3").Value = "Formation Continue" Then
Application.ActiveSheet.Range("N3").Value = "FCONT"
ElseIf Application.ActiveSheet.Range("N3").Value = "1ère Année" Then
Application.ActiveSheet.Range("N3").Value = "F1A"
ElseIf Application.ActiveSheet.Range("N3").Value = "2ème Année" Then
Application.ActiveSheet.Range("N3").Value = "F2A"
ElseIf Application.ActiveSheet.Range("N3").Value = "3ème Année" Then
Application.ActiveSheet.Range("N3").Value = "F3A"
ElseIf Application.ActiveSheet.Range("N3").Value = "4ème Année" Then
Application.ActiveSheet.Range("N3").Value = "F4A"
ElseIf Application.ActiveSheet.Range("N3").Value = "Commun années" Then
Application.ActiveSheet.Range("N3").Value = "FCOA"
ElseIf Application.ActiveSheet.Range("N3").Value = "Distribution Exploitation" Then
Application.ActiveSheet.Range("N3").Value = "FDIST"
ElseIf Application.ActiveSheet.Range("N3").Value = "Recherche" Then
Application.ActiveSheet.Range("N3").Value = "FRECH"
ElseIf Application.ActiveSheet.Range("N3").Value = "Résidence" Then
Application.ActiveSheet.Range("N3").Value = "FRSD"
ElseIf Application.ActiveSheet.Range("N3").Value = "Série TV" Then
Application.ActiveSheet.Range("N3").Value = "FTV"
ElseIf Application.ActiveSheet.Range("N3").Value = "Technique" Then
Application.ActiveSheet.Range("N3").Value = "FINAN"
Else: Application.ActiveSheet.Range("N3").Value = ""
End If
Application.ActiveSheet.Range("I54").Value = "=OMtest!$C$23"
If Application.ActiveSheet.Range("I54").Value = "Indemnité forfaitaire de repas" Or Application.ActiveSheet.Range("I54").Value = "Facturé directement à La Fémis (2)" Then
Application.ActiveSheet.Range("I54").Value = "La FEMIS"
Else: Application.ActiveSheet.Range("I54").Value = ""
End If
Application.ActiveSheet.Range("I61").Value = "=OMtest!$F$23"
If Application.ActiveSheet.Range("I61").Value = "Indemnité forfaitaire de nuitée" Or Application.ActiveSheet.Range("I61").Value = "Facturé directement à La Fémis (2)" Then
Application.ActiveSheet.Range("I61").Value = "La FEMIS"
Else: Application.ActiveSheet.Range("I61").Value = ""
End If
Application.ActiveSheet.Range("I74").Value = "=OMtest!$F$29"
If Application.ActiveSheet.Range("I74").Value = "Facturé directement à La Fémis" Then
Application.ActiveSheet.Range("I74").Value = "La FEMIS"
Else: Application.ActiveSheet.Range("I74").Value = ""
End If
End Sub
Actuellement j'obtiens bien le résultat que je veux.
Par contre, je dois sélectionner le fichier source dans la fenêtre d'ouverture de fichier pour chaque ligne de code.
Le fichier source étant toujours le même pour chaque ligne, j'aimerais un moyen de ne le sélectionner qu'une seule fois au début et qu'il serve de référence pour toutes les lignes suivantes !
Merci d'avance de votre aide.
A voir également:
- Appel de fichier source macro excel
- Fichier bin - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Fichier epub - Guide
- Nommez une application d'appel vidéo ou de visioconférence - Guide
- Fichier rar - Guide
8 réponses
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
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...
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.
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
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 ?
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...
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
Désolé mais je n'arrive pas à télécharger tes fichiers. FireFox me bloque l'accès... Regarde avec https://www.cjoint.com/
classeur destination : https://www.cjoint.com/c/GAuoyQnvMp6
classeur source : https://www.cjoint.com/c/GAuozEUK7A6
classeur source : https://www.cjoint.com/c/GAuozEUK7A6
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
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 !