XL 2013 Ouvrir fichier source

coline741

XLDnaute Junior
Bonjour le forum,

Fort mari de ne pas trouver de solution simple par une petite macro sympa. Honteux et confus je vous soumets ici le problème.

Le fichier joint comporte une liste de jazzmen avec un lien pour chacun (en l'occurence, colone G ici)

Si par exemple, je sélectionne Bill Evans en G5, le lien apparait: ='E:\music1\bill evans\[Bill Evans Discography.xls]Feuil3'!$C$4574

Le but de la macro est d'ouvrir le fichier "Bill Evans Discography.xls" , à l'emplacement Feuil3'!$C$4574

C'est tout.

La feuille Macro1(non active) fonctionne toujours mais rame sur des disques externes de 3 téras ou plus.

Thank you in advance for your assistance.
 

Pièces jointes

  • Music_find.xls
    76.5 KB · Affichages: 9
Solution
Bonsoir,
désolé, le taf me laisse que peu de temps ...
Donc j'ai pas chargé ton fichier mais dans le code précédent (remis ci-dessous) tu "select" une plage d'un onglet sur d'une destination.

Peut-être est-ce là qu'il faut voir pour sélectionner la bonne plage au bon endroit :)

VB:
Sub test()
Dim Fichier$, Fich, Plage$, Onglet$, Destination As Workbook
    strQuote = Chr(34)
    Fichier = ThisWorkbook.Sheets("Feuil1").Range("G5").FormulaLocal
    Fich = Split(Fichier, "'")
    Plage = Right(Fich(1), Len(Fich(1)) - InStr(1, Fich(1), "]", vbTextCompare))
    Fich(1) = Replace(Left(Fich(1), InStr(1, Fich(1), "]", vbTextCompare) - 1), "[", "")
    Plage = Plage & Fich(2)
    Onglet = Left(Plage, InStr(1, Plage, "!"...

patricktoulon

XLDnaute Barbatruc
bonsoir
La feuille Macro1(non active) fonctionne toujours mais rame sur des disques externes de 3 téras ou plus.
plus les disks sont grand plus le swap d’échange est long
les gros disks c'est bon pour le stockage pas l'exploitation
et pour peu que tes ports usb soit mal paramétrés ça devient un torture les latence d'attente
déjà 1 terra c'est bien trop grand pour les config windows actuelles alors 3 tera c'est mort

c'est ça le soucis avec les config matériel
on vous vent des machines soit disant de course sauf que de série aucun organe n'est 100% compatible avec d'autres du coup ben avoir une becane rapide releve de la chance ou d'un budget conséquent
 

coline741

XLDnaute Junior
bonsoir

plus les disks sont grand plus le swap d’échange est long
les gros disks c'est bon pour le stockage pas l'exploitation
et pour peu que tes ports usb soit mal paramétrés ça devient un torture les latence d'attente
déjà 1 terra c'est bien trop grand pour les config windows actuelles alors 3 tera c'est mort

c'est ça le soucis avec les config matériel
on vous vent des machines soit disant de course sauf que de série aucun organe n'est 100% compatible avec d'autres du coup ben avoir une becane rapide releve de la chance ou d'un budget conséquent
Merci Patrick, mais ce n'est pas une réponse ! Je m'attendais à une macro vba pour évoluer dans ce langage

PS je peux brancher 3 disques soit 8 téras. Ma pôvre macro à base des fonctions XL ne mets pas plus de 3 secondes. Alors c'est pas mort. Repose en paix
 

Gégé-45550

XLDnaute Accro
Bonjour le forum,

Fort mari de ne pas trouver de solution simple par une petite macro sympa. Honteux et confus je vous soumets ici le problème.

Le fichier joint comporte une liste de jazzmen avec un lien pour chacun (en l'occurence, colone G ici)

Si par exemple, je sélectionne Bill Evans en G5, le lien apparait: ='E:\music1\bill evans\[Bill Evans Discography.xls]Feuil3'!$C$4574

Le but de la macro est d'ouvrir le fichier "Bill Evans Discography.xls" , à l'emplacement Feuil3'!$C$4574

C'est tout.

La feuille Macro1(non active) fonctionne toujours mais rame sur des disques externes de 3 téras ou plus.

Thank you in advance for your assistance.
Bonjour,
Quel type de tableur utilisez-vous pour faire fonctionner la macro (?) de la feuille Macro1 ?
VB:
SELECTION
=ERREUR(FAUX)
=SELECTION.CELLULES(9;;1)
=LIRE.FORMULE(CELLULE.ACTIVE())
=STXT(B5;3;CHERCHE("[";B5)-2)
=INFORMATIONS("repertoire")
=REPERTOIRE(B5)
=STXT(LIRE.FORMULE(CELLULE.ACTIVE());3;CHERCHE("[";LIRE.FORMULE(CELLULE.ACTIVE()))-2)
=STXT(LIRE.FORMULE(CELLULE.ACTIVE());1;CHERCHE("]";LIRE.FORMULE(CELLULE.ACTIVE())))
=LIRE.FORMULE(CELLULE.ACTIVE())
=SUBSTITUE(B11;"=-";"=")
=NBCAR(B12)
=TROUVE("!";B12;1)
=STXT(B12;3;TROUVE("!";B12;1)-3)
=DROITE(B12;B13-B14)
=SELECTION.ATTEINDRE(""&B12&"")
=STXT(B12;3;TROUVE("]";B12;1)-3)
=SUBSTITUE(B18;"[";"")
=SUBSTITUE(B19;"";"")
=REPERTOIRE(B20)
=SI(ESTERREUR(B17);OUVRIR(B20);RETOUR())
=SELECTIONNER(""&B16&"")
=RETOUR()
 

coline741

XLDnaute Junior
Bonjour,
Quel type de tableur utilisez-vous pour faire fonctionner la macro (?) de la feuille Macro1 ?
VB:
SELECTION
=ERREUR(FAUX)
=SELECTION.CELLULES(9;;1)
=LIRE.FORMULE(CELLULE.ACTIVE())
=STXT(B5;3;CHERCHE("[";B5)-2)
=INFORMATIONS("repertoire")
=REPERTOIRE(B5)
=STXT(LIRE.FORMULE(CELLULE.ACTIVE());3;CHERCHE("[";LIRE.FORMULE(CELLULE.ACTIVE()))-2)
=STXT(LIRE.FORMULE(CELLULE.ACTIVE());1;CHERCHE("]";LIRE.FORMULE(CELLULE.ACTIVE())))
=LIRE.FORMULE(CELLULE.ACTIVE())
=SUBSTITUE(B11;"=-";"=")
=NBCAR(B12)
=TROUVE("!";B12;1)
=STXT(B12;3;TROUVE("!";B12;1)-3)
=DROITE(B12;B13-B14)
=SELECTION.ATTEINDRE(""&B12&"")
=STXT(B12;3;TROUVE("]";B12;1)-3)
=SUBSTITUE(B18;"[";"")
=SUBSTITUE(B19;"";"")
=REPERTOIRE(B20)
=SI(ESTERREUR(B17);OUVRIR(B20);RETOUR())
=SELECTIONNER(""&B16&"")
=RETOUR()
Bonjour,

J'utilise XL 2013. Ce n'est pas du VBA. Je cherche à remplacer cette macro réalisée à partir des fonctions excel par du VBA. Actuellement je patine avec Workbooks.Open Filename:= ?

? = 'E:\music1\bill evans\[Bill Evans Discography.xls]Feuil3'!$C$4574 si je sélectionne Bill Evans en G5.

Avec ma vieille macro =LIRE.FORMULE(CELLULE.ACTIVE()) donne le résultat calculé
='E:\music1\bill evans\[Bill Evans Discography.xls]Feuil3'!L4574C3

Comment faire ça en VBA ,
 

coline741

XLDnaute Junior
Bonjour, je nesuis pas sûr d'avoir tout compris.
Est-ce ça que vous voulez ?
VB:
Sub test()
Dim Fichier$
Fichier = ThisWorkbook.Sheets("Feuil1").Range("G5").FormulaLocal
Debug.Print Fichier
End Sub
Cordialement,
Bonsoir Gégé,

Que fait "Fichier = ThisWorkbook.Sheets("Feuil1").Range("G5").FormulaLocal"
J'ai lancé la macro, mais il ne se passe rien !

Je radote : Mais que fait ma vieille macro ?

Je me positionne n'importe où en colonne G. (dans l'exemple en G5)
Je lance la macro.
La macro récupère seule l'information, ouvre le fichier correspondant (ex: Bill Evans Discography.xls)
Le curseur va se positionner en Feuil3' en $C$4574 de ce fichier.

Voilà c'est tout.

Je cherche depuis quelques jours une solution en vba alors que j'utilise ma vieille macro depuis 20 ans (et oui !, j'ai commencé avec Excel 1.5)

Merci l'Ami
 

Gégé-45550

XLDnaute Accro
Bonsoir Gégé,

Que fait "Fichier = ThisWorkbook.Sheets("Feuil1").Range("G5").FormulaLocal"
J'ai lancé la macro, mais il ne se passe rien !

Je radote : Mais que fait ma vieille macro ?

Je me positionne n'importe où en colonne G. (dans l'exemple en G5)
Je lance la macro.
La macro récupère seule l'information, ouvre le fichier correspondant (ex: Bill Evans Discography.xls)
Le curseur va se positionner en Feuil3' en $C$4574 de ce fichier.

Voilà c'est tout.

Je cherche depuis quelques jours une solution en vba alors que j'utilise ma vieille macro depuis 20 ans (et oui !, j'ai commencé avec Excel 1.5)

Merci l'Ami
Bonjour,
Dans l'éditeur VB, si vous ouvrez la fenêtre "Exécution" (menu Affichage), vous verrez que la macro récupère dans la variable Fichier le chemin complet contenu dans G5 (celui que vous affichez dans H5, c'est-à-dire exactement ce que fait la fonction "=FORMULETEXTE(G5)" contenue dans H5.
Ensuite il n'est pas difficile d'ouvrir le fichier dont le chemin est contenu dans cette variable et de se positionner sur la cellule voulue.
Essayez ceci, dans un module standard:
VB:
Sub test()
Dim Fichier$, Fich, Plage$, strQuote$, Destination As Workbook
    strQuote = Chr(34)
    Fichier = ThisWorkbook.Sheets("Feuil1").Range("G5").FormulaLocal
    Fich = Split(Fichier, "'")
    Plage = Right(Fich(1), Len(Fich(1)) - InStr(1, Fich(1), "]", vbTextCompare))
    Fich(1) = strQuote & Replace(Left(Fich(1), InStr(1, Fich(1), "]", vbTextCompare) - 1), "[", "") & strQuote
    Plage = strQuote & Plage & Fich(2) & strQuote
    Set Destination = Workbooks.Open(Fich(1))
    With Destination
        .Range(Plage).Select
    End With
End Sub
 
Dernière édition:

coline741

XLDnaute Junior
Bonjour,

Désolé mais on obtiens cette erreur !

erreur 1004.png
erreur 1004_2.png


Je reviendrai vers vous plus tard.

Sinon, un grand merci!
 

Gégé-45550

XLDnaute Accro
Bonjour,
ça vient des guillemets, cette macro devrait fonctionner :
VB:
Sub test()
Dim Fichier$, Fich, Plage$, Onglet$, Destination As Workbook
    strQuote = Chr(34)
    Fichier = ThisWorkbook.Sheets("Feuil1").Range("G5").FormulaLocal
    Fich = Split(Fichier, "'")
    Plage = Right(Fich(1), Len(Fich(1)) - InStr(1, Fich(1), "]", vbTextCompare))
    Fich(1) = Replace(Left(Fich(1), InStr(1, Fich(1), "]", vbTextCompare) - 1), "[", "")
    Plage = Plage & Fich(2)
    Onglet = Left(Plage, InStr(1, Plage, "!", vbTextCompare) - 1)
    Plage = Right(Fich(2), Len(Fich(2)) - 1)
    Set Destination = Workbooks.Open(Fich(1))
    With Destination
        .Sheets(Onglet).Range(Plage).Select
    End With
End Sub
PS : le message du post #3 à destination de patricktoulon n'était pas très sympa, un petit mot rectificatif à son attention ne serait pas superflu, si je peux me permettre un conseil. Patrick est l'un des meilleurs spécialistes Excel sur ce forum, toujours prêt à aider chaque fois qu'il le peut, et rapidement en plus. Franchement, il mérite le plus grand respect.
Cordialement,
 

coline741

XLDnaute Junior
Bonsoir,

1) Si Patrick est performant ce dont je ne doute pas, il aurait pu apporter une réponse et non discuter de la puissance d'un ordinateur et de sa capacité à lire des disques externes.
2) Le module que vous m'envoyez fonctionne, mais uniquement pour G5. J'en ai trouvé des similaires sur des sites divers, mais à chaque fois il faut modifier manuellement l'argument Range() sinon :
erreur 9.png


Donc nous sommes au point mort si je puis dire !

Je joins ce dossier zip qui comporte :
Music_find2.xls (avec les macros "test" & "SELECTION" activées) à ouvrir.
fichier_lié.xls.
Si les 2 fonctionnent, seule la macro à base des fonctions excel ne demande pas de modifs
Il doit bien exister une forme d'argument qui reconnait la position de la cellule.
ThisWorkbook.Sheets("Feuil1").Range(argument qui donne l'emplacement sur la feuille).FormulaLocal
Merci pour ton courage.
 

Pièces jointes

  • Music_Find.zip
    35.2 KB · Affichages: 2

Gégé-45550

XLDnaute Accro
Bonsoir,

1) Si Patrick est performant ce dont je ne doute pas, il aurait pu apporter une réponse et non discuter de la puissance d'un ordinateur et de sa capacité à lire des disques externes.
2) Le module que vous m'envoyez fonctionne, mais uniquement pour G5. J'en ai trouvé des similaires sur des sites divers, mais à chaque fois il faut modifier manuellement l'argument Range() sinon :
Regarde la pièce jointe 1156684

Donc nous sommes au point mort si je puis dire !

Je joins ce dossier zip qui comporte :
Music_find2.xls (avec les macros "test" & "SELECTION" activées) à ouvrir.
fichier_lié.xls.
Si les 2 fonctionnent, seule la macro à base des fonctions excel ne demande pas de modifs
Il doit bien exister une forme d'argument qui reconnait la position de la cellule.
ThisWorkbook.Sheets("Feuil1").Range(argument qui donne l'emplacement sur la feuille).FormulaLocal
Merci pour ton courage.
Bien sûr que ça existe, il faut déplacer le code de la macro dans l'événement Worksheet_Change de la Feuil1, utiliser la variable Target à la place de Range("G5") et paramétrer correctement l'intersection sur l'événement Change.
Puisque vous ne voulez pas être plus aimable, je vous laisse vous débrouiller avec ça, vous avez presque tout ...
sinon je vous donnerai le code complet.
 

Deadpool_CC

XLDnaute Accro
Bonsoir
Pour récupérer une range sélectionnée (1 ou plusieurs cellules, ajoute

VB:
Dim maJolieSelection As Range
Set maJolieSelection = Selection

Et ensuite pour l'utliser, tu remplaces la range qui faisait référence à G5 par:

Code:
Fichier = maJolieSelection.FormulaLocal

Après pour être certain il faut ajouter des vérifications pour e^tre certains que la selection ne contient qu'une cellule, mais c'est une autre histoire.
 

coline741

XLDnaute Junior
Bonjour Deadpool

Bénéficiant de vos bons conseils, enfin nous y sommes à l'exception du point suivant:

Le curseur va se placer à l'endroit du dernier enregistrement et non à la position précisée par le lien.

J'ai cherché sans aucun succès. Sans doute trop vieux ?

Au siècle passé, après l'établissement d'une macro, on s'en sortait en modifiant l'option d'affichage de la feuille macro.
Au lieu de leurs résultats calculés on obtenait les formules dans les cellules. Et là on voyait pourquoi l'erreur.
Y-a t'il un moyen avec le vba ?

Cordial salut.
 

Pièces jointes

  • Music_Find (2).zip
    34.9 KB · Affichages: 2

Membres actuellement en ligne

Statistiques des forums

Discussions
312 196
Messages
2 086 100
Membres
103 116
dernier inscrit
kutobi87