Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1076 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ligne de commande avec éléments à concaténer ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Ligne de commande avec éléments à concaténer ?

n°2323389
licpegpon
Posté le 31-10-2018 à 17:33:11  profilanswer
 

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.

mood
Publicité
Posté le 31-10-2018 à 17:33:11  profilanswer
 

n°2323395
MaybeEijOr​Not
but someone at least
Posté le 31-10-2018 à 19:54:16  profilanswer
 

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 :
  1. =INDIRECT("'"&cellule_du_chemin&"["&cellule_nom_du_fichier&"]Nom_de_la_Feuille'!C12" )


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2323397
licpegpon
Posté le 31-10-2018 à 21:42:02  profilanswer
 

Bonsoir,
 
En effet,  erreur d aiguillage de ma part.  :pt1cable:  
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

n°2323412
MaybeEijOr​Not
but someone at least
Posté le 31-10-2018 à 22:56:30  profilanswer
 

MaybeEijOrNot a écrit :

Je tenterai :

Code :
  1. =INDIRECT("'"&cellule_du_chemin&"["&cellule_nom_du_fichier&"]Nom_de_la_Feuille'!C12" )



 
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.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2323416
licpegpon
Posté le 31-10-2018 à 23:14:34  profilanswer
 

Je teste tout cela dès la reprise (pont). Encore merci....
Cdlt.
Jérôme

n°2323509
licpegpon
Posté le 04-11-2018 à 19:26:08  profilanswer
 

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.

n°2323510
licpegpon
Posté le 04-11-2018 à 20:12:45  profilanswer
 

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.

n°2323512
MaybeEijOr​Not
but someone at least
Posté le 04-11-2018 à 22:54:16  profilanswer
 

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.


Message édité par MaybeEijOrNot le 04-11-2018 à 22:54:38

---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2323516
licpegpon
Posté le 05-11-2018 à 07:14:34  profilanswer
 

Pouvez vous m indiquer où trouver les programmes vba ? Merci bcp par avance.
Cdlt.
Jérôme

n°2323588
MaybeEijOr​Not
but someone at least
Posté le 05-11-2018 à 20:13:28  profilanswer
 

Allez c'est gratuit pour aujourd'hui :
 

Code :
  1. Sub Macro_Indirect_with_file_closed()
  2.     With ActiveWorkbook.ActiveSheet
  3.         .Cells(7, 3).Formula = "='" & .Cells(2, 3).Value & "\[" & .Cells(3, 3).Value & "]" & .Cells(4, 3).Value & "'!" & .Cells(5, 3).Value
  4.     End With
  5. End Sub


 
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.


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
mood
Publicité
Posté le 05-11-2018 à 20:13:28  profilanswer
 

n°2323591
licpegpon
Posté le 05-11-2018 à 20:28:34  profilanswer
 

Un grand merci. J y regarde à tête reposée dès demain.  
Cdlt.
Jérôme

n°2323651
licpegpon
Posté le 06-11-2018 à 13:40:55  profilanswer
 

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.

n°2323657
MaybeEijOr​Not
but someone at least
Posté le 06-11-2018 à 14:58:34  profilanswer
 

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 :
  1. Sub Macro_Indirect_with_file_closed()
  2. Dim path As String, filename As String, sheetname As String, cellname As String
  3.     With ActiveWorkbook.ActiveSheet
  4.         path = .Cells(2, 3).Value
  5.         filename = .Cells(3, 3).Value
  6.         sheetname = .Cells(4, 3).Value
  7.         cellname = .Cells(5, 3).Value
  8.         .Cells(6, 3).Formula = "='" & path & "\[" & filename & "]" & sheetname & "'!" & cellname
  9.         .Cells(7, 3).Formula = "='" & path & "\[" & filename & "]" & sheetname & "'!" & .Cells(6, 3).Value
  10.     End With
  11. End Sub


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
n°2323663
licpegpon
Posté le 06-11-2018 à 15:39:49  profilanswer
 

Merci beaucoup....
 
Cdlt.
Jérôme


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Ligne de commande avec éléments à concaténer ?

 

Sujets relatifs
[ReactJS] Mettre un site en ligneObtenir une variable (commande for) help
[Perl] Utiliser LibXML pour concatener plusieurs fichiers XMLAffichage "commande" PrestaShop impossible
Suppression de ligne Excel[DOS] supprimer espace en fin de ligne
[PHP / JS] Récupérer ligne txtJQuery: filtrer des éléments.
regrouper éléments XSLAvec la commande echo >> choisir une ligne précise a editer
Plus de sujets relatifs à : Ligne de commande avec éléments à concaténer ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR