Se passer du nom de classeur dans une formule (ou nom variable)

cookies

XLDnaute Occasionnel
Bonjour,

Voici un problème auquel je suis confronté.

Comme vous pouvez le voir, la première partie du code ci-dessous permet d'ouvrir le classeur xls dont le nom n'est pas connu mais dont le chemin d'accès est connu. et ça marche !
La suite est une formule classique faisant intervenir le meme classeur. Mais j'ai été obligé de spécifier son nom dans la formule et l'onglet : [2013 OI.xls]Export interventions'! Et ça marche aussi donc pas de problème.

Mais comment se passer aussi du nom du fichier et au mieux du nom du fichier + du nom de l'onglet dans la formule ?


Code:
Private Sub CommandButton4_Click()
repertoire = "C:\Users\Desktop\Extraction"
NomFichierXLS = Dir(repertoire & "\*.xls")
Chemin = repertoire & "\" & NomFichierXLS
Workbooks.Open (Chemin)

[I15].FormulaLocal = "=SI(I13="""";"""";DECALER('C:\Users\Desktop\Extraction\[2013 OI.xls]Export interventions'!$A1;EQUIV(""*""&I13&""*"";'C:\Users\Desktop\Extraction\[2013 OI.xls]Export interventions'!$J$2:$J$65536;0);))"

ActiveWorkbook.Close
End Sub

Merci pour vos idée !
Cookies
 
G

Guest

Guest
Re : Se passer du nom de classeur dans une formule (ou nom variable)

bonjour,

Si j'ai bien compris, peut-être que :

Code:
[I15].FormulaLocal = "=SI(I13="""";"""";DECALER('" & repertoire & "[" & fichier & "]Export interventions'!$A1;EQUIV(""*""&I13&""*"";'" & repertoire & "[" & fichier & "]Export interventions'!$J$2:$J$65536;0);))"

A+
 

cookies

XLDnaute Occasionnel
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Bonjour,

Je pense que ça doit être quelque chose du genre mais ca ne marche pas..
est-ce que :

Code:
'" & repertoire & "[" & fichier & "]Export interventions'!

ne doit-il pas s'écrire dans mon cas :

Code:
'" & repertoire & "\" & "[" & NomFichierXLS & "]Export interventions'!

mais ça ne marche pas nom plus...
 

cookies

XLDnaute Occasionnel
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Bonjour,

Je n'ai tjrs pas réussi à me passer du nom et du chemin d'accès dans ma formule, si quelqu'un sait comment faire, je suis preneur !

code orgininal qui fonctionne mais avec le nom du fichier et son accès ('C:\Users\Desktop\Extraction\[2013 OI.xls]Export interventions'!)
Code:
Private Sub CommandButton4_Click()
 repertoire = "C:\Users\Desktop\Extraction"
 NomFichierXLS = Dir(repertoire & "\*.xls")
 Chemin = repertoire & "\" & NomFichierXLS
 Workbooks.Open (Chemin)
 
[I15].FormulaLocal = "=SI(I13="""";"""";DECALER('C:\Users\Desktop\Extraction\[2013 OI.xls]Export interventions'!$A1;EQUIV(""*""&I13&""*"";'C:\Users\Desktop\Extraction\[2013 OI.xls]Export interventions'!$J$2:$J$65536;0);))"
 
ActiveWorkbook.Close
 End Sub

proposition faite par Hasco :
Code:
'" & repertoire & "[" & fichier & "]Export interventions'!

Merci à vous !
Cookies
 
G

Guest

Guest
Re : Se passer du nom de classeur dans une formule (ou nom variable)

bonjour,

Avec ce genre de construction, il ne faut pas se planter dans les guillemets.
A toi de faire tes tests.

Autre proposition, par remplacement de caractères dans la formule qui marche:

Code:
dim FormuleQuiMarche as String
FormuleQuiMarche= "=SI(I13="""";"""";DECALER('@\[?]Export interventions'!$A1;EQUIV(""*""&I13&""*"";'@\[?]Export interventions'!$J$2:$J$65536;0);))"

FormuleQuiMarche=Replace(Replace(FormuleQuiMarche, "@", repertoire), "?", fichier)

A+
 

cookies

XLDnaute Occasionnel
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Ok, du coup j'ai ça :

Code:
Private Sub CommandButton1_Click()

repertoire = "C:\Users\ABP\Desktop\Extraction" 
NomFichierXLS = Dir(repertoire & "\*.xls") 
Chemin = repertoire & "\" & NomFichierXLS 
Workbooks.Open (Chemin) 
ActiveWorkbook.Worksheets(1).Activate 

Dim dl&
 dl = Range("A65536").End(xlUp).Row
[C2].FormulaLocal = "=SI(A2="""";"""";DECALER('@\[?]Export interventions'!$A1;EQUIV(""*""&A2&""*"";'@\[?]Export interventions'!$J$2:$J$65536;0);))"
Range("C2:C" & dl).FillDown
FormulaLocal = Replace(Replace(FormulaLocal, "@", repertoire), "?", fichier)

dois-je mettre dans le REPLACE l'ensemble de la formule où va-t-il le chercher ?
Et ne doit-on pas mettre des guillements autour du \ ?
Code:
'@&"\"&[?]
je suis un peu perdu.
Merci
 
G

Guest

Guest
Re : Se passer du nom de classeur dans une formule (ou nom variable)

re,

1 - Mettre la formule dans une variable :
Dim FormuleQuiMarche as String
FormuleQuiMarche = "=SI(I13="""";"""";DECALER('@\[?]Export interventions'!$A1;EQUIV(""*""&I13&""*"";'@\[?]Export interventions'!$J$2:$J$65536;0);))"

2 - remplacement des @ et ? par respectivement le nom répertoire et le nom du fichier:
FormuleQuiMarche=Replace(Replace(FormuleQuiMarche, "@", repertoire), "?", fichier)


3 - seulement après mettre la nouvelle formule dans l'objet ranget
[I15].FormulaLocal = FormuleQuiMarche


Tout cela à supposer que ta formule originale fonctionne. A toi de tester.

A+
 

cookies

XLDnaute Occasionnel
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Bonjour,

Super. Ca marche bien ! Merci
En revanche j'ai juste tenté de changer le chemin d'accès, qui était est en local (sur le PC) lorsque je passe sur mon réseau, il trouve bien le fichier et l'ouvre comme il faut mais il ne veut plus effectuer la formule qui fonctionnait bien en local...
Voici le code avec le chemin d'accès au réseau :
Code:
Dim FormulTypeOI As String

repertoire = "J:\Phase2 implémentation\Pilote\Extraction"
NomFichierXLS = Dir(repertoire & "\*.xls")
Chemin = repertoire & "\" & NomFichierXLS
Workbooks.Open (Chemin)

FormulTypeOI = "=SI(I13="""";"""";DECALER('@\[?]Export interventions'!$C$1;EQUIV(""*""&I13&""*"";'@\[?]Export interventions'!$J$2:$J$65536;0);))"
FormulTypeOI = Replace(Replace(FormulTypeOI, "@", repertoire), "?", NomFichierXLS)
[I7].FormulaLocal = FormulTypeOI

il surligne en jaune la dernière ligne "erreur définie par l'application ou objet"
si tu vois pourquoi alors que je change juste le chemin...

Merci encore
Bonne journée
Cookies
 
G

Guest

Guest
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Bonjour,

Je ne sais pas quoi te dire si ce n'est de tester ta variable ForumulTypeOI en incluant la ligne ci-dessous juste avant la ligne qui pose problème:

Code:
MsgBox FormulTypeOI

Ligne que tu supprimera lorsque tout sera ok.

A+
 

cookies

XLDnaute Occasionnel
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Re,

Oui j'avais pensé à faire cela.
En fait je pense que c'est le lien qui ne comprend pas certaine fois. J'ai l'impression que c'est lorsqu'il y a des numéros dans le chemin, type : J:Super\02 - blalba\..

Sinon c'est impec.
Merci encore
A plus
 

sourcier08

XLDnaute Occasionnel
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Bonjour le forum,

Je me rappelle que sur Office 2003, il fallait proscrire les noms avec caractères spéciaux. Peut-être est-ce encore le cas sur 2007.
Ça reste à confirmer.
 

david84

XLDnaute Barbatruc
Re : Se passer du nom de classeur dans une formule (ou nom variable)

Bonjour le fil,
salut Hasco mon ami:)!
Histoire de trouver un prétexte pour venir te saluer, ci-joint pour cookies une fonction personnalisée dont je me sers pour traiter les noms de fichiers avant enregistrement :
Code:
Function CarValide(Chaine As String) As String
Dim oRegExp As Object, Matches As Object
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
    .Global = True
    .ignorecase = True
    .Pattern = "[/\\\*\?<>\|:" & Chr(34) & "]+"
    If .test(Chaine) = True Then Chaine = .Replace(Chaine, " ")
End With
CarValide = Application.WorksheetFunction.Trim(Chaine)
End Function
Cette fonction basée sur les expressions rationnelles remplace par une espace les caractères spéciaux spécifiés dans le motif (à compléter au besoin).
Fonction à inclure dans la procédure (je laisse à cookies le soin de le faire).
A+
 

Discussions similaires

Statistiques des forums

Discussions
314 634
Messages
2 111 442
Membres
111 137
dernier inscrit
SANTA POLA