IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA-E] fermeture + ouverture


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut [VBA-E] fermeture + ouverture
    salut a vous

    Voila , jaimerais a la fin de mon projet fermer mon classeur de travail et ouvrir le resultat du devis .
    En fait mon projet ecrit un devis qu'il enregistre ensuite dans le dossier ou il se trouve sous le nom du client selon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Enregistrer()
    Dim stRep As String
         Sheets("devis").Copy
           stRep = ThisWorkbook.Path & "\Devis\"
         For Each s In ActiveSheet.Shapes 
         If s.Type = msoFormControl Then
           s.Delete
         End If
    Next
         ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
         ActiveWorkbook.Close savechanges:=False
    End Sub
    Par contre a la fin du projet ( sur mon bouton quitter) j'ai ecrit ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
    ThisWorkbook.Close savechanges = False
    Workbooks.Open "chemin_nom_classeur.xls"
    End Sub
    le probleme et que je ne sais pas coment ecrire le chemin et nom du classeur a ouvrir qui est fonction du client ( voir 1er code)


    donc comment integrer : "ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")" dans mon code d'ouverture

    merci a vous

  2. #2
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Et qourquoi tu le ferme le classeur si tu dois le réouvir ?

    sinon ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    Private Sub CommandButton1_Click()
     
    Workbooks.Open ThisWorkbook.Path & "\Devis\" & Replace(sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy") 
    ThisWorkbook.Close savechanges = False
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    Cool , merci a toi

    en fait le classeur de travail contient tous les onglets : client - articles - model et tous les codes vba , c'est pour cela que je le ferme dés le dernier article entré pour eviter toutes fausses manip des utilisateurs car la copie ne contient que l'onglet devis.

    Voila , et merci a toi

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    Encore moi , il y a un prob , ca n'ouvre pas mon projet : voici le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Quitter_Click()
    Dim stRep As String
         Sheets("devis").Copy
         '
             stRep = ThisWorkbook.Path & "\Devis\"
         For Each s In ActiveSheet.Shapes 
         If s.Type = msoFormControl Then
           s.Delete
         End If
    Next
         ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
         ActiveWorkbook.Close savechanges:=False
     
    ThisWorkbook.Close savechanges = False
    Workbooks.Open ThisWorkbook.Path & "\Devis\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    Unload Me
    End Sub
    est il possible d'ajouter ce code ( si il est juste , avant la fermeture)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox " Devis & (Range("G4"), " ", "-") & Format(Now, "-ddmmyy") enregistré" vbExclamation

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    et il est ou ce code ... ?

    Sinon comme je te l'ai dis plus huat c'est pas la peine de fermer ton classeur si tu dois l'ouvrir de suite aprés...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Quitter_Click()
    Dim stRep As String
         Sheets("devis").Copy
         '
             stRep = ThisWorkbook.Path & "\Devis\"
         For Each s In ActiveSheet.Shapes
         If s.Type = msoFormControl Then
           s.Delete
         End If
    Next
         ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
     
     ThisWorkbook.Close savechanges:=False
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello,

    Je croyais que ton devis de trouvait dans le répertoire "Devis"

    Si tel est bien le cas, pourquoi à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open ThisWorkbook.Path & "\Devis\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    ne mets-tu pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open stRep & "\Devis\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    Ou alors j'ai mal compris ce que tu fais...

    A+

  7. #7
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    bon
    j'ai du mal m'expliquer

    Mon classeur de travail contient tout mes onglets de travail ainsi que code vba)
    Qd j'ai fini de remplir mon devis ( par userform) le bouton "terminer" effectue une copie de l'onglet devis vers un nouveau classeur portant le nom client + date

    ce que je veux en meme temps que la creation du classeur nom+date , c'est qu'il s'ouvre et ferme le classeur de travail (pour eviter les erreurs des utilisateurs)

    j'ai bien essayer ca : (mon classeur de travail se trouve dans un dossier contenant un sous-dossier "devis" ou j'enregistre mes devis)

    Hello,

    Je croyais que ton devis de trouvait dans le répertoire "Devis"

    Si tel est bien le cas, pourquoi à la place de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks.Open ThisWorkbook.Path & "\Devis\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    ne mets-tu pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Workbooks.Open stRep & "\Devis\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    mais ca ne marche pas non plus , le classeur de travail se ferme bien , mais le nouveau ne s'ouvre pas , est ce par ce qu'il est en train de se creer en meme temps que je demande l'ouverture ? [/code]

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par zouille
    bon
    j'ai du mal m'expliquer
    ce que je veux en meme temps que la creation du classeur nom+date , c'est qu'il s'ouvre et ferme le classeur de travail (pour eviter les erreurs des utilisateurs)
    ? en fait tu ve que le classeur contenant la macro ce ferme et se ré-ouvre tous seul ?

  9. #9
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    Citation Envoyé par bbil
    Citation Envoyé par zouille
    bon
    j'ai du mal m'expliquer
    ce que je veux en meme temps que la creation du classeur nom+date , c'est qu'il s'ouvre et ferme le classeur de travail (pour eviter les erreurs des utilisateurs)
    ? en fait tu ve que le classeur contenant la macro ce ferme et se ré-ouvre tous seul ?
    Alors mon classeur de travail contient 5 onglets ( accueil-model-clients-articles et devis ( la ou se mettent les infos entrees a partir du userform))

    le bouton "terminer" de mon dernier userform, copie l'onglet devis dans un classeur nommé : nom-prenom-date ( le tout dans un sous-repertoir "devis ")

    ce que je veux , c'est fermer le classeur de travail (celui avec 5 onglet) et ouvrir le nouveau cree juste avant pour voir le resultat.

    Il est vrai que le resultat est visible dans le classeur de travail , mais je ne veux pas d'intervention maladroite des utilisateur dedans d'ou ma demande.

    Voila , j'espere avoir été clair sur mon idées

  10. #10
    Invité
    Invité(e)
    Par défaut
    Il te reste une autre possibilité aussi (si fermer ton classeur pour en ouvrir nouveau est trop lent ou trop instable): cacher les onglets à protéger avec la commande

    ThisWorkbook.Sheets(index).Visible = False

    En tout cas ça te fait économiser des resources...

    A+

  11. #11
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    je suis d'accord avec toi , mais j'aimerais qd meme ouvrire ce fichier , pourquoi le code ne fonctionne pas


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub Quitter_Click()
    Dim stRep As String
         Sheets("devis").Copy
         stRep = ThisWorkbook.Path & "\Devis\"
         For Each s In ActiveSheet.Shapes 
         If s.Type = msoFormControl Then
           s.Delete
         End If
    Next
         ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
         ActiveWorkbook.Close savechanges:=False
        ThisWorkbook.Close savechanges = False
        Workbooks.Open stRep & "\Devis\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
     
    Unload Me
    End Sub
    est ce parce que le code d'ouverture du fichier fait appel a un onglet devis du classeur que je ferme juste avant ? Sinon comment faire , est il possible de stocké le nom du fichier dans une "memoire"

    merci

  12. #12
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    je me répéte mais supprime cette ligne ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveWorkbook.Close savechanges:=False
    ainsi tu ne feme pas le fichier et donc ta pas besoin de le réouvrir !!!

  13. #13
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    alors , je viens d'essayer ca et ca marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub Quitter_Click()
    Dim stRep As String
         Sheets("devis").Copy
         '
         ' .. Voir s'il faut rajouter le réperoire de sauvegarde
         ' en activant la ligne suivante :
         stRep = ThisWorkbook.Path & "\Devis\"
         For Each s In ActiveSheet.Shapes 'Efface tous les boutons de la feuille
         If s.Type = msoFormControl Then
           s.Delete
         End If
    Next
         ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
         ThisWorkbook.Close savechanges:=False
        Workbooks.Open stRep & "\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
     
    Unload Me
    ca vous semble correcte ( modif au niveau du repertoire de destination)

  14. #14
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    cette ligne ne sert à rien ... le fichier et déjà ouvert ..!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks.Open stRep & "\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")

  15. #15
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    ok
    je comprend ce que tu veux dire , mais ce qui est ouvert c'est pas ce fichier , c'est le classeur de travail, ce que je veux c'est juste le devis , sans les autres onglets et ca , c'est le fichier portant le nom : client+date que j'enregistre avec la ligne juste avant ( ils sont differents : j'utilise l'onglet devis pour cree un autre classeur independant)

    regarde , c'est ca que je veux faire ( mef ,faut un sous dossier devis) DEVIS

    sinon , au passage , comment faire pour n'avoir que le pied de page sur la derniere feuille ( si devis fait plus d'une page) ? Car j'avais pas fait attention mais a la fin, j'ai mon texte de loie + signature et si le devis est un peu trop long l'ecriture en separe sur 2 feuille , je pensaisalors le mettre en pied de page
    [/url]

  16. #16
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par zouille
    ok
    je comprend ce que tu veux dire , mais ce qui est ouvert c'est pas ce fichier , c'est le classeur de travail, ce que je veux c'est juste le devis , sans les autres onglets et ca , c'est le fichier portant le nom : client+date que j'enregistre avec la ligne juste avant ( ils sont differents : j'utilise l'onglet devis pour cree un autre classeur independant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
         ThisWorkbook.Close savechanges:=False
        Workbooks.Open stRep & "\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    je persiste la derniére de ces 3 lignes ne sert a rien, le fichier n'as pas à être ouvert car il n'est pas fermé il est juste Sauver sur la premiére ligne.!

  17. #17
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    Citation Envoyé par bbil
    Citation Envoyé par zouille
    ok
    je comprend ce que tu veux dire , mais ce qui est ouvert c'est pas ce fichier , c'est le classeur de travail, ce que je veux c'est juste le devis , sans les autres onglets et ca , c'est le fichier portant le nom : client+date que j'enregistre avec la ligne juste avant ( ils sont differents : j'utilise l'onglet devis pour cree un autre classeur independant)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ActiveWorkbook.SaveAs stRep & Replace(Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
         ThisWorkbook.Close savechanges:=False
        Workbooks.Open stRep & "\" & Replace(Sheets("Devis").Range("G4"), " ", "-") & Format(Now, "-ddmmyy")
    je persiste la derniére de ces 3 lignes ne sert a rien, le fichier n'as pas à être ouvert car il n'est pas fermé il est juste Sauver sur la premiére ligne.!
    je suis d'acord avec toi mais comment l'afficher autrement car le seul classeur ouvert ( et visible) c'est celui du depart (mon projet) avec tout les onglets.

    si je comprend bien le code :
    il y a copie de l'onglet "devis" dans un nouveau classeur (portant le nom du client + date) puis sauvegarde. ( a ce niveau , pour moi , le fichier n'est pas ouvert : il n'y a eu que copie et sauvegarde)

    désolé mais j'essaie de comprendre

  18. #18
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par zouille
    il y a copie de l'onglet "devis" dans un nouveau classeur (portant le nom du client + date) puis sauvegarde. ( a ce niveau , pour moi , le fichier n'est pas ouvert : il n'y a eu que copie et sauvegarde)
    Et le classeur résultat de la copie tu pense qu'il n'est pas ouvert ? il et quoi alors ?

  19. #19
    Membre confirmé
    Inscrit en
    Décembre 2005
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 164
    Par défaut
    Citation Envoyé par bbil
    Citation Envoyé par zouille
    il y a copie de l'onglet "devis" dans un nouveau classeur (portant le nom du client + date) puis sauvegarde. ( a ce niveau , pour moi , le fichier n'est pas ouvert : il n'y a eu que copie et sauvegarde)
    Et le classeur résultat de la copie tu pense qu'il n'est pas ouvert ? il et quoi alors ?
    ok
    je suis d'accord avec toi mais comment l'appeler , si je met juste workbooks ("nom-date)show , ca serait corecte alors ?

  20. #20
    Invité
    Invité(e)
    Par défaut
    je suis d'accord avec toi mais comment l'appeler , si je met juste workbooks ("nom-date)show , ca serait corecte alors ?
    Essaies plutôt:

    Workbook("nom-date").Activate

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [XL-2010] Ouverture .csv depuis script VBA et fermeture après de ce .csv sans enregistrer
    Par kythi dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/06/2013, 12h44
  2. [VBA] Condition d'ouverture d'état
    Par Virgile59 dans le forum Access
    Réponses: 1
    Dernier message: 14/10/2005, 11h26
  3. Fermeture/Ouverture d'application avec VC++
    Par Philippe299 dans le forum MFC
    Réponses: 2
    Dernier message: 11/08/2005, 21h17
  4. [VBA-E] Macro ouverture fichier déja ouvert
    Par bhaal76 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/12/2002, 14h30
  5. [VBA-E] Evenement ouverture de fichier
    Par gjeff dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 13/12/2002, 09h42

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo