XL 2019 Ouverture fichier xlsx dans dossier nom variable.

steph59940

XLDnaute Nouveau
Hello le forum,

J'ai un souci d'ouverture de fichier via inputbox dans le quel je demande à l'utilisateur de renseigner un N° ID dossier à 6 chiffres..
Via macro, en amont, Je génère un dossier nommer "Commande de volet en Kit N°" + un numéro comportant 6 chiffres (qui est un numéro de commande que je nomme variable dans la macro).
Dans ce dossier, toujours via macro, j'enregistre un fichier excel en xlsx qui s'appel "Commande de volet en Kit N°" + variable (le numéro de commande) + la date + l'heure au moment de la création.
Je souhaiterai que quand l'utilisateur entre son numéro de commande, le fichier excel comportant le numéro de commande s'ouvre.
La macro pointe bien sur le bon dossier mais pas sur le bon fichier.
Une ame charitable pourrait elle me venir en aide svp.

Ci dessous mon code.

Sub OuvertureDeFichier()

Dim MonApplication As Object
Dim Part, MonFichier As String
Set MonApplication = CreateObject("Shell.Application")

Refaire:
variable = InputBox("Merci de renseigner votre ID dossier svp", "ID")
Select Case variable
Case Is = vbCancel
Exit Sub
Case Is = vbOK
If variable = "" Or variable > 999999 Then 'marche pas = si différent de 6 chiffres...

MsgBox "Veuillez recommencer l'opération avec un nombre à 6 chiffres svp", vbExclamation
GoTo Refaire
End If
End Select

On Error GoTo OuvertureFichierErreur

Chemin = "C:\Users\Steph\Desktop" & "\" & "Commande de volet en Kit N° " & variable
Part = "Commande de volet en Kit N°" & " " & variable * & ".xlsx" 'ICI CA COINCE !
MonFichier = Dir("Chemin & " \ " & Part")
MonApplication.Open (MonFichier)
Set MonApplication = Nothing
OuvertureFichierErreur:
Set MonApplication = Nothing
MsgBox "Erreur lors de l'ouverture de fichier..."
End Sub
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
Du PC c'est plus simple. :)
1- Votre ligne avec "*" est en erreur.
2- Si vous retirez cette étoile et faites :
Code:
Sub OuvertureDeFichier()
variable = 123456
Chemin = "C:\Users\Steph\Desktop" & "\" & "Commande de volet en Kit N° " & variable
Part = "Commande de volet en Kit N°" & " " & variable & ".xlsx" 'ICI CA COINCE !
MonFichier = Chemin & Part
End Sub
Vous voyez que le nom de fichier est faux.
1678024743022.png

3- Si vous faites :
VB:
Sub OuvertureDeFichier()
variable = 123456
Chemin = "C:\Users\Steph\Desktop" & "\"
Part = "Commande de volet en Kit N°" & " " & variable & ".xlsx"
MonFichier = Chemin & Part
End Sub
Vous obtenez :
1678024627061.png

Le nom du fichier ressemble bien a un chemin Windows.
4- Pourquoi faire un Shell pour ouvrir votre fichier ? Si c'est juste pour l'ouvrir normalement alors tentez simplement :
Code:
Sub OuvertureDeFichier()
variable = 123456
Chemin = "C:\Users\PC_PAPA\Desktop\XLD" & "\" ' Remis dans mon conexte
Part = "Commande de volet en Kit N°" & " " & variable & ".xlsx"
MonFichier = Chemin & Part
Workbooks.Open Filename:=MonFichier
End Sub
Et le fichier s'ouvre normalement.
ou plus simplement :
Code:
Sub OuvertureDeFichier()
variable = 123456
Chemin = "C:\Users\PC_PAPA\Desktop\XLD\Commande de volet en Kit N° "
Workbooks.Open Filename:=Chemin & variable & ".xlsx"
End Sub
 

steph59940

XLDnaute Nouveau
Bonjour Sylvanu,

Merci pour ta réponse le * est la pour dire, enfin je pensais, quelque chose d'autre en plus de "variable", en l’occurrence la variable + la date et l'heure d'enregistrement du fichier en amont que la personne qui recherche ce dossier ne connait pas.
Ex : si je recherche variable = 123456 (pour reprendre votre exemple) et que mon fichier .xlsx se nomme
"Commande de volet en Kit N° 123456 du 05-03-2023 à 16-20.xslx" votre code ne l'ouvrira pas.

Stéphane.
 

patricktoulon

XLDnaute Barbatruc
re
bonjour
c'est 2 dir qu'il te faut voir même un do loop recursif de dir vbdirectory pour chopper le bon dossier si plusieurs étages
mais dans n'importe quel cas il faut partir de la racine
et en fin un dir avec le dossier obtenu +"\" une variable +une etoile si besoins
peut être même une étoile devant au cas ou ta variable serait une partie au milieu du nom
si tu veux que l'on t'aide
va dans le dossier de ton fichier
click droit dessus en restant appuyé sur majuscule
dans le menu tu choisi "copier le chemin d’accès
et donne nous le chemin complet
on avisera avec ça
;)
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re Steph, Patrick,
Un essai parmi tant d'autres :
VB:
Sub OuvertureDeFichier()
Dim Chemin As String, Fichier As String, i As Integer, Variable
Chemin = "C:\Users\Steph\Desktop\Commande de volet en Kit N° 528098\"
Variable = InputBox("Merci de renseigner votre ID dossier svp", "ID")
If Variable = "" Or Len(Variable) <> 6 Or Not IsNumeric(Variable) Then
    MsgBox "Veuillez recommencer l'opération avec un nombre à 6 chiffres svp", vbExclamation
    Exit Sub
End If
i = 0
Fichier = Dir(Chemin)
Do While Fichier <> ""
    i = i + 1
    If Fichier Like "Commande de volet en Kit N° " & Variable & "*.xlsx" Then
        Workbooks.Open Filename:=Chemin & Fichier
        Exit Sub
    End If
    Fichier = Dir
Loop
End Sub
 

patricktoulon

XLDnaute Barbatruc
re bonsoir @sylvanu
ta boucle dir ne tournera pas
chemin est un dossier il te sortira une fois le dossier c'est tout
le dir doit extrapoler
une boucle dir doit soit extrapoler avec "*" soit avec vbdirectory



mais si je comprends bien le numéro de 6 chiffre est une parti du chemin et non du fichier
dans ce cala c'est


fichier=dir( "C:\Users\Steph\Desktop\Commande de volet en Kit N° " & variable &"\*.xl*")
la dir te donne le premier fichier xl (s) (sx) (sm)se trouvant dans le dossier contenant la variable
if fichier<>"" then
'on ouvre
end if

faut dire que les explication (et le code présenté qui sont contradictoire)rendent la demande confuse
 

steph59940

XLDnaute Nouveau
Bonjour Sylvanu, Patrick,
Merci pour votre aide.
Chemin dossier = C:\Users\Steph\Desktop\Commande de volet en Kit N° 528098
Fichier à ouvrir qui est dans le dossier = Commande de volet en Kit N° 528098 du 05-03-2023 à 18-20.xlsx
Je pars en déplacement durant 3 jours, j'essayerai vos codes dés mon retour et ne manquerai pas de revenir vers vous.
Petite précision, dans le dossier il peux y avoir deux fichiers presque identiques, la macro doit ouvrir le plus récent.
EX :
Commande de volet en Kit N° 528098 du 05-03-2023 à 18-20.xlsx
Commande de volet en Kit N° 528098 du 06-03-2023 à 08-40.xlsx
Le dossier surligné doit être ouvert.
Bonne semaine,
Steph.
 

patricktoulon

XLDnaute Barbatruc
re
Bonjour
Ok
donc
dossier =C:\Users\Steph\Desktop\Commande de volet en Kit N° 528098
fichier =Commande de volet en Kit N° 528098 du 05-03-2023 à 18-20.xlsx
tavariable=528098

et bein exemple on chope le premier fichier

VB:
mavariable=528098

chemin ="C:\Users\Steph\Desktop\Commande de volet en Kit N°"
fich=dir(chemin &" "  & mavariable &"\*" & mavariable &"*.xl*")
if fich<>"" then
''on ouvre

end if
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Patrick,
Mon code marche parfaitement si on considère le post #6 ou le post #4. le nombre semblait faire partie du nom de fichier.
mais si je comprends bien le numéro de 6 chiffre est une parti du chemin et non du fichier
dans ce cala c'est
n fait il semble faire partie du nom de dossier ET du nom de fichier. Et il faut trouver non pas le premier, mais à priori le dernier, ou tout du moins le plus récent .... jusqu'à la prochaine précision qui rendra tout caduque.
faut dire que les explication (et le code présenté qui sont contradictoire)rendent la demande confuse
Je préfère passer mon tour.
 

steph59940

XLDnaute Nouveau
Re,
L ouverture du fichier le plus récent est la cerise sur le gâteau et optionnelle.
Certes mon code de depart est un peu novice, mais si vous relisez mon message initial, tout y est sauf la cerise sur le gateau. Par écrit ce n est pas toujours évident de se faire comprendre..
Merci d avance aux personnes qui ne passerons pas leur tour.🤓
Sylvain, bonne continuation.
Steph.
 

patricktoulon

XLDnaute Barbatruc
re
ok le plus recent
on prend les mêmes et on recommence
mavariable=528098

VB:
dim datemax as date ,x as date ,lastfich$,WbK as workbook

chemin ="C:\Users\Steph\Desktop\Commande de volet en Kit N°"
fich=dir(chemin &" "  & mavariable &"\*" & mavariable &"*.xl*")
if fich<>"" then
datemax=0
do while fich<>""
x= cdate(filedatetime(chemin &" "  & mavariable &"\"& fich))
if x>datemax then datemax=x :lastfich=chemin &" "  & mavariable &"\"&fich:
fich=dir
loop
'on ouvre le lastfich
set WbK=workbooks.open(lastfich)
with wbk
' tu fait ce que tu veux dedans

end with
end if



voila voila
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
311 730
Messages
2 081 981
Membres
101 855
dernier inscrit
alexis345