Ligne de commande avec éléments à concaténer ? - VB/VBA/VBS - Programmation
Marsh Posté le 31-10-2018 à 19:54:16
Bonjour,
Voyant un signe égal, je suppose que tu parles de formules Excel et non de VB/VBA/VBS... Ce n'est pas vraiment la bonne place du sujet du coup car ce n'est plus un problème de programmation.
Je tenterai :
Code :
|
Marsh Posté le 31-10-2018 à 21:42:02
Bonsoir,
En effet, erreur d aiguillage de ma part.
En fait je voudrais éviter, si possible de résoudre cela par une macro.
Que devient la ligne de commande si les différentes infos (chemin, nom de fichier, ...) proviennent de plusieurs cellules situées dans des onglets différents ? Pour le chemin je dois en fait concatener deux cellules de deux onglets différents. Même philosophie pour les autres données (nom de fichier, ...).
Un grand merci par avance.
Cdlt.
Jérôme
Marsh Posté le 31-10-2018 à 22:56:30
MaybeEijOrNot a écrit : Je tenterai :
|
Qu'en est-il ?
{cellule_du_chemin} et {cellule_nom_du_fichier} sont à remplacer par les cellules, ex :
B8
ou
'Feuil1'!A17
Ne pas oublier de remplacer {Nom_de_la_Feuille} par le nom de la feuille qui est à écrire littéralement.
Marsh Posté le 31-10-2018 à 23:14:34
Je teste tout cela dès la reprise (pont). Encore merci....
Cdlt.
Jérôme
Marsh Posté le 04-11-2018 à 19:26:08
Bonjour,
J'ai testé votre commande avec des fichiers bidons.
J'ai pour cela :
1- Créé un fichier "ferme.xlsx" dans le dossier "C:\Documents and Settings\Jérôme\Bureau\ANDREU"
2- Dans le fichier "ferme.xlsx" (onglet "Feuil1" ) j'ai noté en cellule A1 la valeur 10, en cellule A2 la valeur 100, en cellule A3 la valeur 1200, en cellule A4 la valeur 15000 et enfin en cellule A5 la valeur 56789.
3- Une fois ces valeurs enregistrées dans ce fichier je l''ai fermé.
4- Ensuite j'ai créé sur le bureau (dossier "C:\Documents and Settings\Jérôme\Bureau" ) le fichier "tutu.xlsx".
5- Dans la cellule B1 (onglet Feuil1) j'ai noté --> C:\Documents and Settings\Jérôme\Bureau\ANDREU
6- Dans la cellule C4 (même onglet) j'ai tapé la commande --> =INDIRECT("'"&B1&"["&ferme.xlsx&"]Feuil1'!A1" ).
Dans la cellule C4 j'ai le texte --> #NOM?
Pouvez-vous m'aider à résoudre ma problématique ?
Pour mémoire : je souhaite récupérer d'un fichier fermé (j'insiste sur le mot "fermé" ) la valeur d'une cellule.
Un grand merci par avance.
Cordialement.
Marsh Posté le 04-11-2018 à 20:12:45
Autre façon de faire :
J'ai essayé la ligne de commande suivante qui fonctionne très bien :
='I:\NDT\31-10-2018\IDS\ID4840\[Entry_form_ID4840.xlsm]ADD_INFOS'!$C7
Avec :
1- I:\NDT\31-10-2018\IDS\ID4840\ --> dossier dans lequel se trouve le fichier fermé.
2- Entry_form_ID4840.xlsm --> nom du fichier fermé.
3- ADD_INFOS --> onglet du fichier fermé où se trouve la valeur que je veux récupérer
4- C7 --> cellule où se trouve la valeur.
J'ai testé et cela fonctionne !! sauf que je voudrais que le nom du dossier (point 1) soit une donnée provenant d'une cellule (par exemple cellule G4 onglet "feuil2" du fichier Entry_form_ID4840.xlsm ; idem pour le nom du fichier ; en fait je voudrais que toutes les valeurs indiquées en 1- 2- 3- et 4- proviennent de cellules identifiées.
Des suggestions ??
Cdlt.
Jérôme.
Marsh Posté le 04-11-2018 à 22:54:16
Je viens de faire le test, si vous tapez tout bien avec la fonction INDIRECT vous êtes censé obtenir #Ref. En effet, la fonction INDIRECT ne fonctionne pas avec un fichier fermé.
Il existe des solutions en VBA et probablement en SQL.
Marsh Posté le 05-11-2018 à 07:14:34
Pouvez vous m indiquer où trouver les programmes vba ? Merci bcp par avance.
Cdlt.
Jérôme
Marsh Posté le 05-11-2018 à 20:13:28
Allez c'est gratuit pour aujourd'hui :
Code :
|
Il suffit d'adapter en fonction du besoin. Ici, "Cells(7, 3)" indique que la cellule de la 7ème ligne et 3ème colonne et donc la cellule C7, c'est la cellule dans laquelle sera affichée la valeur récupérée.
De la même manière, "Cells(2, 3)" indique la cellule qui contient le chemin vers le fichier fermé (sans mettre de "\" à la fin du chemin). "Cells(3, 3)" est la cellule avec le nom du fichier fermé (en mettant bien l'extension du fichier). "Cells(4, 3)" est la cellule qui contient le nom de la feuille. Et "Cells(5, 3)" et la cellule qui contient le nomme de la cellule dans laquelle le résultat doit être récupéré.
Il faut lancer la macro à la main à chaque modification, des options existent pour lancer une macro avec un raccourci ou automatiquement, je vous laisse chercher sur les internets.
Marsh Posté le 05-11-2018 à 20:28:34
Un grand merci. J y regarde à tête reposée dès demain.
Cdlt.
Jérôme
Marsh Posté le 06-11-2018 à 13:40:55
Bonjour,
J'ai testé la macro de MaybeEijOrNot. Ca marche du premier coup !! Chapeau l'artiste.
J'aurais cependant des adaptations à faire.
Je voudrais modifier la macro pour que la totalité du tableau (fichier titi.xlsm, onglet Feuil 1) soit rempli. Il faut donc faire une boucle ….. ? Je ne sais pas comment m'y prendre....
Rappel de la macro :
Sub Macro_Indirect_with_file_closed()
With ActiveWorkbook.ActiveSheet
.Cells(7, 3).Formula = "='" & .Cells(2, 3).Value & "\[" & .Cells(3, 3).Value & "]" & .Cells(4, 3).Value & "'!" & .Cells(5, 3).Value
End With
End Sub
Si je prends le cas de la cellule C6 du fichier titi.xlsm (ID4353) il me faut l’info « PROGRAM ». Celle-ci se trouve dans le fichier « Entry_Form_ID4353.xlsm » onglet « ADD_INFOS » cellule C7. Pour ce cas on a la correspondance suivante :
• "Cells(7, 3)" --> cellule dans laquelle sera affichée la valeur récupérée --> C6 onglet Feuil1 (fichier titi.xlsm)
• "Cells(2, 3)" --> cellule qui contient le chemin vers le fichier fermé (sans mettre de "\" à la fin du chemin) --> D3 onglet Feuil 2 (fichier titi.xlsm)
• "Cells(3, 3)" --> cellule avec le nom du fichier fermé (en mettant bien l'extension du fichier) -->E3 onglet feuil 2 (fichier titi.xlsm)
• "Cells(4, 3)" --> cellule qui contient le nom de la feuille -->F3 onglet Feuil 2 (fichier titi.xlsm)
• "Cells(5, 3)" --> cellule qui contient le nom de la cellule dans laquelle le résultat doit être récupéré -->C7 onglet ADD_INFOS du fichier « Entry_Form_ID4353.xlsm ».
Je voudrais joindre les fichiers à ce message mais je ne sais pas comment faire ?
Cdlt.
Jérôme.
Marsh Posté le 06-11-2018 à 14:58:34
Il suffit de récupérer dans un premier temps la valeur de la cellule qui contient le nom de la cellule dans laquelle le résultat doit être récupéré. Puis ajouter cette valeur au lien :
Code :
|
Marsh Posté le 31-10-2018 à 17:33:11
Bonjour,
J’utilise la formule ci-dessous pour récupérer d’un fichier fermé (j’insiste, fichier fermé) la valeur d’une cellule :
=‘D:\Users\jmassol\Desktop\IDS\ID4840[Entry_form_ID4840.xlsm]NDT_Delivery’!C12
Quelques explications :
1. “D:\Users\jmassol\Desktop\IDS\ID4840” correspond au dossier dans lequel se trouve le fichier fermé.
2. “Entry_form_ID4840.xlsm” correspond au nom du fichier fermé dans lequel je veux récupérer une valeur.
3. “NDT_Delivery” correspond à l’onglet dans lequel se trouve la valeur à récupérer.
4. “C12” correspond à la cellule dans laquelle se trouve la valeur à récupérer.
Cette formule fonctionne très bien cependant je souhaiterais :
1- A la place d’un chemin entré en “dur” (“D:\Users\jmassol\Desktop\IDS\ID4840”), insérer le chemin du dossier qui se trouve dans une cellule, Supposons que le chemin soit écrit dans la cellule R15 (onglet “Feuil2”).
Comment dois-je modifier la ligne de commande si le chemin global est la concaténation de 2 cellules de deux onglets différents ? --> mon cas.
2- Même question pour le nom du fichier. En effet la liste des fichiers apparait dans une colonne. En réalité le nom du fichier doit être la concaténation de deux cellules de deux onglets différents.
Des suggestions ? J'ai essayé avec "concaténer" et cela ne fonctionne pas. J'ai l'impression que le " ' " juste après le " = " est la cause du problème. Sauf que si je supprime le " ' " la commande ne fonctionne pas.
Merci par avance.
Cdlt.
Jérôme.