Posez votre question Signaler

Ouverture d'un classeur excel Macro VBA [Résolu]

clark...kent - Dernière réponse le 25 avril 2012 à 14:39
Bonjour à tous,
Merci par avance pour votre aide.
Je cherche une condition qui signale à l'utilisateur que le fichier recherché n'existe pas.
C'est à dire que l'ouverture du fichier excel dépend de la date qui a été sélectionné
par l"utilisateur, il se peut qu'il n'existe aucun fichier à chargé, et dans ce cas excel n'ouvrira aucun classeur. Est ce que je peux le retranscrire dans une macro.
Exemple si je recherche le classeur nommé 01 01 1901 il y a peu de chances que je le trouve :) La partie en gras ne fonctionne pas bien entendu.
Voici mon code :
Sub CommandButton1_Click()
Dim wb As Workbook
Dim Ligne As Long
Dim nom As String
With Sheets("Donnees")
Ligne = Sheets("Donnees").Cells.SpecialCells(xlCellTypeLastCell).Row - 1
With Sheets("Chargement")
Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xls")
If Workbooks.notopen Then
MsgBox "Il n'existe aucun fichier à charger."

Application.ScreenUpdating = False
' Copier les données de la feuille "Temps Conseillers" dans la première ligne vide de la feuille "Données"
Worksheets("Temps Conseillers").Range("A2:K39").Copy Destination:=Workbooks("Test.xlsm").Worksheets("Donnees").Range("A" & Ligne + 2)
End With
End With
'Fermeture du calendrier lorsque l'utilisateur valide
Unload Me
Unload Acceuil
'Fermeture des classeurs inactifs
For Each wb In Workbooks
If Not wb Is ThisWorkbook Then
wb.Close False
End If
Next
Application.ScreenUpdating = True
'Sauvegarde du classeur actif
ActiveWorkbook.Save
MsgBox "Vos données ont été chargé et sauvegardé"
End Sub
Merci de votre aide encore une fois.
Lire la suite 
Réponse
+0
moins plus
Bonjour,

tu peux utiliser Dir() :
If Dir("C:\toto.xls") = "" Then MsgBox "le fichier est introuvable!"

eric
Ajouter un commentaire
Réponse
+0
moins plus
Ok merci du conseil, j'essaye ca et je te tiens au courant d'ici cet après midi
Ajouter un commentaire
Réponse
+0
moins plus
Alors je n'ai pas testé ton code pour la simple et bonne raison que le mien ne fonctionne pas à la base, je l'ai mal testé.

Cela concerne une autre partie du code :

Sub Workbook_Open()

Sheets("Chargement").Select
'Démarre à la date du jour -1
Range("A2") = CDate(Format(Date - 1, "dd mm yyyy"))
Range("A3") = CDate(Format(Date - 1, "dd mm yyyy"))

'Recule de 3 jours si date = Lundi
If Range("A2") = dimanche Then
Range("A3") = CDate(Format(Date - 3, "dd mm yyyy"))
Range("A2") = CDate(Format(Date - 3, "dd mm yyyy"))
End If

Acceuil.Show
End Sub

L'objectif est, dès l'ouverture d'excel, initialisé la date du jour - 1 dans A2 (ou A2= Lundi, Mardi, ect et ou A3 = 17 04 2012, 18 04 2012, ect...). Puisque ces mêmes critères me permettent ensuite d'utilisé le code que j'ai transmis plus haut pour ouvrir le fichier.

Le format "DDDD" ne fonctionne pas pour A2 mais aucune importance car j'ai paramétré la cellule dans excel et il m'affiche : lundi, mardi, mercredi, ect...

Le problème est que soit il m'affiche Date - 1 mais pas Date - 3 si on est Lundi, ou inversement, il ne m'affiche que Date - 3 quelque soit le jour de la semaine

En gros, soit le if ne fonctionne pas, soit il prend le dessus sur la première déclaration de Date - 1.

Je ne sais pas si il y a une influence (je ne pense pas) mais j'ai intitulé A2 en "Jour" et A3 en "jour1".

Merci de ton aide eriiic
Ajouter un commentaire
Réponse
+0
moins plus
J'ai quand meme essayé ta formule, et ca ne fonctionne pas, si il ne trouve pas de fichier il me revoit à ma fonction VBA suivante :

With Sheets("Chargement")

Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xls")
If Dir("C:\" & Format([Date - 3].Value, "dd mm yyyy") & ".xls") = "" Then MsgBox "le fichier est introuvable!"
Ajouter un commentaire
Réponse
+0
moins plus
Bonjour,

Ce n'est pas parce que tu changes le format d'affichage que tu changes la valeur.
Dans A2 tu as toujours une date..
If Weekday(Range("A2"), vbMonday) = 7 Then

eric
Ajouter un commentaire
Réponse
+0
moins plus
Raahh j'avais tenté la fonction weekday mais en écrivant sunday au lieu de monday... Merci bien...ça fonctionne, j'ai rajouté un elseif pour le positionnement du samedi du coup :)

Finalement tu as autre une idée pour mon premier soucis de fichier non trouvé?
eriiic 18469Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 1 septembre 2015 Dernière intervention - 25 avril 2012 à 12:46
Ben non puisqu'elle est simple et marche très bien.
Fais le test d'existence avant d'essayer de l'ouvrir.
eric
Répondre
clark...kent- 25 avril 2012 à 12:52
Déjà essayé. il éxécute bien le if mais aussi la commande ouvrir du coup.
Répondre
eriiic 18469Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 1 septembre 2015 Dernière intervention - 25 avril 2012 à 14:01
imbrique tes if correctement.
Par exemple :
If Weekday(Range("A2"), vbMonday) = 7 Then
  If Dir("path/nomDuFichier") = "" Then 
    MsgBox "le fichier est introuvable!"
  else
    'traitement 
    'ouvrir le fichier
    '...
  endif
endif

eric
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Merci de ton aide, ils étaient bien imbriqués.

J'ai trouvé une autre solution toute simple, je fais exit sub à la fin du if :)

Soilution vraiment toute bête merci pour ton temps!
eriiic 18469Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 1 septembre 2015 Dernière intervention - 25 avril 2012 à 14:09
parfait, n'oublie pas de mettre en résolu (en haut)
eric
Répondre
clark...kent- 25 avril 2012 à 14:15
j'ai parlé trop vite, il sort de la fonction si il ne trouve rien
mais il n'exécute pas la suite cette fois ci si le fichier existe.
Répondre
eriiic 18469Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 1 septembre 2015 Dernière intervention - 25 avril 2012 à 14:20
parce que tu ne maitrises pas bien la stucture de ton programme
eric
Répondre
Ajouter un commentaire
Réponse
+0
moins plus
Et bien écoute j'ai repris le tout dans une macro toute simple :
Sub Valider_Click()

'Ouvre le classeur de Franck selon la date en A3 dans la feuille Chargement
If Dir("C:\" & Format([A3].Value, "dd mm yyyy") & ".xls") = "" Then MsgBox "le fichier est introuvable!"
Exit Sub
End If

'ouvrir le fichier
Workbooks.Open ("C:\" & Format([A3].Value, "dd mm yyyy") & ".xlsx")

Unload Me

End Sub

Et la surprise il me dit qu'il y a un End If sans bloc If!!!
eriiic 18469Messages postés mardi 11 septembre 2007Date d'inscription ContributeurStatut 1 septembre 2015 Dernière intervention - 25 avril 2012 à 14:30
il te manque les bases de la programmation...

2 syntaxes pour if :

if test then tratement 'tout sur une ligne : pas de endif

if test
traitement1
else
traitement2
endif

Je pense que la question de départ est résolue, je met le fil en résolu
Démarre un nouveau fil si nouvelle question

eric
Répondre
clark...kent- 25 avril 2012 à 14:39
merci de ton aide et de ta patience
Répondre
Ajouter un commentaire
Ce document intitulé «  Ouverture d'un classeur excel Macro VBA  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.