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 :

FERMER FICHIER EXCEL DANS USERFORM OUVERT DEPUIS MODULE


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    27
    Points
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 27
    Points : 19
    Par défaut FERMER FICHIER EXCEL DANS USERFORM OUVERT DEPUIS MODULE
    Bonjour,

    Dans un module, 'jouvre un fichier excel pour récuperer de la donnée.
    Dans ce meme module, j'ai placé dans une variable mon chemin du fichier Excel
    Ainsi, lorsque j'ai besoin de récuperer de l'information, je désigne la variable contenant le fichier Excel.

    Donc là ça marche.

    A la fin de ce module, je fais appel à un userform.

    Dans ce Userform, je récupere dans le fichier excel des données (une liste de tache) pour alimenter un ComboBox et me lister les taches. La aussi, ça marche.

    Par contre, pour fermer le fichier excel source (qui a été ouvert dans le module), je n'arrive pas à le faire fermer...
    J'ai tout essayé et voici les exemples :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Workbooks("monfichier.xls" ).Close savechanges:=False

    Mais aussi, via un script, rechercher le fichier ouvert :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim Classeur As Workbook
       For Each Classeur In Workbooks
         'Afficher le nom du classeur
            MsgBox Classeur.Name
            If Classeur.Name = "monfichier.xls" Then
                MsgBox "Fermeture de monfichier.xls"
                Classeur.Close savechanges:=False
                Exit Sub
            End If
       Next
    J'ai une erreur d'interprétation... Et le déboguage qui s'affiche.

    Le but étant de ne pas fermer le fichier Excel qui me sert de source dans le module et de devoir le réouvrir pour le Userform.
    Effectivement, j'ai besoin de dresser ma liste de tache dans le Userform.
    Voici le code que j'utilise pour dresser la liste

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    'ETAPE 1 : MENU DEROULANT COMBOBOX2
    'remplit la ComboBox2 de l'ensemble des taches
    For Each Cel In WcEXECUTANT_TACHE.Range(("F" & DER_LIGNE_GESTION_EXECUTANT), WcEXECUTANT_TACHE.Range("AD" & DER_LIGNE_GESTION_EXECUTANT)) 'boucle sur toutes les cellule de F à AD
     
    'condition : si la cellule n'est pas vide ajoute son contenu à la ComboBox1
    If Cel.value <> "" Then ComboBox2.AddItem Cel.value
    Next Cel 'prochaine cellule
    'FIN ETAPE 1 : MENU DEROULANT COMBOBOX2

    Aprés 2 jours de test, recherche, je m'en remets à vous... Comment fermer un fichier Excel ouvert depuis un module via une variable et à fermer dans l'USERFORM...

    Merci pour votre retour.

  2. #2
    Membre expérimenté Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    892
    Points
    1 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 892
    Points : 1 449
    Par défaut
    Hello,

    je ne reproduis pas le problème.

    quand vous dites "J'ai une erreur d'interprétation... Et le déboguage qui s'affiche." c'est quoi l'erreur et le débogueur s'arrète sur quelle ligne ?
    Un truc qui me chiffonne dans votre exemple c'est que vous utiliser monfichier.XLS et pas .XLSX ou .XLSM, c'est normal ?

    Je n'ai pas compris non plus "Ainsi, lorsque j'ai besoin de récuperer de l'information, je désigne la variable contenant le fichier Excel."
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    27
    Points
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 27
    Points : 19
    Par défaut
    Merci pour ton retour,

    C'est fou car je n'arrive pas à fermer mon fichier Excel, une fois l'USERFORM chargé.

    Pourquoi je ne le ferme pas depuis le module : En fait, j'ai besoin de le laisser ouvert au départ pour avoir dans mon combobox2 la liste des opérations contenue dans mon fichier Excel ARCHIVES_V1.4.xlsx
    Ensuite, je souhaite le fermer une fois la liste chargé.

    là tout fonctionne.

    Tout d'abord voici ce que j'ai dans le USERFORM

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    Private Sub UserForm_Initialize()
     
    '------------- IMPORT DES DONNES DANS AFFICHAGE USERFORM -------------
    TextBox1 = Number_OF_declaration 'N° de l'OF
    TextBox8 = Comment_declaration 'Commentaires
    TextBox9 = Statut_declaration 'Numero de Lot
     
     
    ' ---  ETAPE 1 : MENU DEROULANT COMBOBOX2 ---
    'remplit la ComboBox2 de l'ensemble des taches
    For Each Cel In WcEXECUTANT_TACHE.Range(("F" & DER_LIGNE_GESTION_EXECUTANT), WcEXECUTANT_TACHE.Range("AD" & DER_LIGNE_GESTION_EXECUTANT)) 'boucle sur toutes les cellule de F à AD
     
    'condition : si la cellule n'est pas vide ajoute son contenu à la COMBOBOX2
    If Cel.value <> "" Then ComboBox2.AddItem Cel.value
    Next Cel 'prochaine cellule
    ' ---  FIN ETAPE 1 : MENU DEROULANT COMBOBOX2 ---
     
     
    'ON FERME LE FICHIER ARCHIVES
    Application.Windows("ARCHIVES_V1.4.xlsx").Activate
    WbArchive_cible.SaveAs Filename:=WbArchive_cible.FullName, accessMode:=xlShared
    MsgBox "Fichier enregistré !"
     
     
     
    'WbArchive_cible.Close Filename:=WbArchive_cible.FullName
    'WbArchive_cible.Close SaveChanges:=True

    Sauf que si je souhaite fermer le fichier depuis le USERFORM, avec les solutions suivantes :

    test avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbArchive_cible.Close Filename:=WbArchive_cible.FullName
    ça plante
    ou test avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbArchive_cible.Close SaveChanges:=True
    ça plante

    Le message d'erreur (Fenetre MicroSoft Visual Basic) :
    Erreur d'exécution '91':
    Variable objet ou variable de bloc With non définie

    Pour info, dans le module (non pas le USERFORM), j'ai mis en premier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit  'Activation de la déclaration explicite des variables
    Public WbArchive_cible As Workbook
    Dans le USERFORM, si je commente la ligne WbArchive_cible.Close SaveChanges:=True dans mon USERFORM tout se passe bien...

    Dans le USERFORM, si j'utilise la ligne WbArchive_cible.Close SaveChanges:=True dans le module, tout se passe bien...

    Mon souci au final, c'est comment fermer mon fichier Excel.... Le USERFORM a-t-il la main dessus et me bloque ?

    A dispo pour plus d'information et merci à toi pour ton soutien !

  4. #4
    Membre expérimenté Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    892
    Points
    1 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 892
    Points : 1 449
    Par défaut
    WbArchive_cible n'est pas déclaré dans la procédure UserForm_Initialize donc je soupçonne qu'il est inconnu.
    Une bonne pratique consiste à ajouter SYSTEMATIQUEMENT la commande Option Explicit en début de CHAQUE module, de déclarer chaque variable et de lancer une compilation avant toute exécution, normalement ça donne pas mal d'explication et évite de jouer aux devinettes.

    essayez d'ajouter cette commande déjà et le msgbox plus bas, mais si déjà en compilant ça plante, c'est que ça ne vas 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Option Explicit
    ' ******************************
     
    Private Sub UserForm_Initialize()
     
    '------------- IMPORT DES DONNES DANS AFFICHAGE USERFORM -------------
    TextBox1 = Number_OF_declaration 'N° de l'OF
    TextBox8 = Comment_declaration 'Commentaires
    TextBox9 = Statut_declaration 'Numero de Lot
     
     
    ' ---  ETAPE 1 : MENU DEROULANT COMBOBOX2 ---
    'remplit la ComboBox2 de l'ensemble des taches
    For Each Cel In WcEXECUTANT_TACHE.Range(("F" & DER_LIGNE_GESTION_EXECUTANT), WcEXECUTANT_TACHE.Range("AD" & DER_LIGNE_GESTION_EXECUTANT)) 'boucle sur toutes les cellule de F à AD
     
    'condition : si la cellule n'est pas vide ajoute son contenu à la COMBOBOX2
    If Cel.value <> "" Then ComboBox2.AddItem Cel.value
    Next Cel 'prochaine cellule
    ' ---  FIN ETAPE 1 : MENU DEROULANT COMBOBOX2 ---
     
     
    'ON FERME LE FICHIER ARCHIVES
    Application.Windows("ARCHIVES_V1.4.xlsx").Activate
    WbArchive_cible.SaveAs Filename:=WbArchive_cible.FullName, accessMode:=xlShared
    MsgBox "Fichier enregistré !"
     
     ' ********************
    MsgBox WbArchive_cible.FullName
    ' ********************
     
    'WbArchive_cible.Close Filename:=WbArchive_cible.FullName
    'WbArchive_cible.Close SaveChanges:=True
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Septembre 2024
    Messages
    27
    Points
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Septembre 2024
    Messages : 27
    Points : 19
    Par défaut
    Merci pour tes explications,

    Comme vous pouvez voir, j'ai toujours un souci


    Tout en haut de l'USERFORM, j'ai bien rajouté ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Option Explicit
    ' ******************************
    Le code suivant fonctionne bien et me donne bien le chemin dorénavant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     ' ********************
    MsgBox ("Valeur WbArchive_cible.FullName : " & WbArchive_cible.FullName)
    ' ********************
    Ainsi, sans vouloir fermer mon fichier Excel, mon USERFORM, se chage sans probléme et attends les instructions (j'ai crée un récapitulatif avec choix pour le Combobox2 puis 2 boutons : enregistrer ou quitter)
    Par contre, dés que je veux le fermer en rajoutant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WbArchive_cible.Close SaveChanges:=True
    Cela me ferme le fichier, puis j'ai ce message d'erreur sans l'ouverture de l'USERFORM :

    Nom : Bug Visual.png
Affichages : 25
Taille : 3,6 Ko

    Mon but : j'essaye d'optimiser les appels vers mon fichier Archives. En fait, avant la mise à jour du code, je plaçais dans le module l'ensemble de mes variables avec le chemin de mon fichier et je refermais le tout avant l'appel de l'USERFORM.
    Ensuite, dans l'USERFORM, je remettais en place les variables et chemin fichiers, puis y faisait appel lors de besoin et je refermais le tout. Cette solution marche, mais ferme et réouvre le fichier à plusieurs reprises...

    Ce que je voulais avoir, c'est ouvrir le fichier depuis le module, faire mes opération puis sauvegarder sans fermer. Appel de l'USERFORM, utiliser la variable contenant le chemin du fichier (là ça marche) pour dresser la liste des taches dans le COMBOBOX2 (voir le code message précédent) et fermer à ce moment là mon fichier.

    Voici ce que j'ai rajouté à Private Sub UserForm_Initialize()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     ' ********************
    MsgBox ("Valeur WbArchive_cible.FullName : " & WbArchive_cible.FullName)
    ' ********************
     
    'OPERATION SUR LE FICHIER ARCHIVES
    Application.Windows("ARCHIVES_V1.4.xlsx").Activate
    WbArchive_cible.SaveAs Filename:=WbArchive_cible.FullName, accessMode:=xlShared
    MsgBox "Fichier enregistré !"
    'On ferme le fichier
    WbArchive_cible.Close SaveChanges:=False
    Merci pour ton aide,

    Vba_lieb

  6. #6
    Membre expérimenté Avatar de Nain porte koi
    Homme Profil pro
    peu importe
    Inscrit en
    Novembre 2023
    Messages
    892
    Points
    1 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : peu importe

    Informations forums :
    Inscription : Novembre 2023
    Messages : 892
    Points : 1 449
    Par défaut
    ok...
    A la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' ********************
    MsgBox ("Valeur WbArchive_cible.FullName : " & WbArchive_cible.FullName)
    ' ********************
    mettez
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ' ********************
    MsgBox ("Valeur WbArchive_cible.Name : " & WbArchive_cible.Name)
    ' ********************
    et donnez nous le résultat ici

    Autre question : le UserForm est dans quel classeur ?
    JièL
    Membre des AMIS
    Anti Macro Inutilement Superfétatoire

Discussions similaires

  1. Fermer fichier Excel dans une seconde application
    Par Riton69 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 24/07/2024, 11h39
  2. [XL-2010] Affichage d'image (depuis l’emplacement de mon fichier Excel) sur UserForm par rapport à ma ListBox
    Par nacereddine.mourad dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/10/2015, 13h34
  3. Ouvrir fichier EXCEL dans EXCEL depuis SEG serveur
    Par nicoF86 dans le forum Outils BI
    Réponses: 19
    Dernier message: 16/09/2015, 19h39
  4. [AC-2007] Insérer des données d'un fichier Excel dans et depuis Access
    Par Blado_sap dans le forum VBA Access
    Réponses: 9
    Dernier message: 25/01/2015, 19h57
  5. Import fichier texte dans un recordset depuis Excel
    Par geredonis dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/03/2014, 13h14

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