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 :

SaveAs htm - Excel cesse de fonctionner [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 61
    Points
    61
    Par défaut SaveAs htm - Excel cesse de fonctionner
    Bonjour à tous,

    Voici le code mis dans l'objet WorkBook de mon classeur .xlsm
    Je veux qu'à l'enregistrement des modifications de ce classeur, une page htm se mette automatiquement à jour (cette page htm est en fait le classeur au format .htm)
    Voyez dans le code les 3 problèmes que je rencontre. Je ne comprends pas l'origine du deuxième et je ne sais comment éviter le troisième ...
    Merci pour votre aide !

    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
    Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FichierDonnees As Workbook
    Set FichierDonnees = ActiveWorkbook
     
    'Vérification que le répertoire (contenant le fichier) et le fichier à mettre à jour existent bien
        If FolderExist(CheminFichierAffichage) Then
            'Sauvegarde normale d'abord (sinon elle ne se fait pas)
            ActiveWorkbook.Save
            Application.DisplayAlerts = False
            'Mise à jour du fichier html
            FichierDonnees.SaveAs Filename:=CheminFichierAffichage & NomFichierAffichage, _
            FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
            Application.DisplayAlerts = True
            '1- Pose problème si l'utilisateur répond non à la question "Voulez-vous remplacer le fichier existant"
            '2- Excel cesse de fonctionner après cette opération lorsque le user accepte le remplacement du fichier existant
            '3- au redémarrage d'Excel (ou directement si Excel ne cesse pas de fonctionner), le fichier html
            '   s'ouvre dans Excel - je ne souhaite pas cette ouverture qui ne sert à rien
        Else
            MsgBox ("Le répertoire suivant n'a pas été trouvé: " & vbNewLine & CheminFichierAffichage)
        End If
    End Sub

  2. #2
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2012
    Messages
    1 733
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 1 733
    Points : 2 553
    Points
    2 553
    Par défaut
    Devrait répondre à tes trois questions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub CreerEtSauver()
    Const xlHTML = 44
     
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
    Set objWorkbook = objExcel.Workbooks.Add()
     
    objExcel.DisplayAlerts = False
     
    objWorkbook.SaveAs "C:\Users\User\Pictures\Test.htm", xlHTML
    objworkbook.close
    End Sub

  3. #3
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 61
    Points
    61
    Par défaut
    Merci EngueEngue pour ta réponse.

    J'ai adapté mon code avec la constante xlhtml = 44.
    Par contre, je ne vois pas comment utiliser les objets objExcel et objWorkbook.
    J'ai déjà Excel ouvert et un classeur bien précis (appelons-le donnees.xlsm) qui est celui à enregistrer tout court et à enregistrer aussi sous donnees.htm.

    A noter que toutes les opérations se réalisent bien (les 2 enregistrements se font correctement même si Excel plante).
    C'est juste qu'Excel "cesse de fonctionner", souvent le signe d'un mauvais code, mais là je cale.

    Ou alors je n'ai pas bien saisi ton code ?

    Voici où j'en suis:
    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 Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim FichierDonnees As Workbook
    Set FichierDonnees = ActiveWorkbook
    Const xlHTML = 44
     
        If FolderExist(CheminFichierAffichage) Then
            Application.DisplayAlerts = False       
            ActiveWorkbook.Save                     ' La boîte de dialogue "Voulez-vous enregistrer le fichier donnees.xlsm" apparait deux fois (en raison du BeforeSave)
            FichierDonnees.SaveAs Filename:=CheminFichierAffichage & NomFichierAffichage, _
                FileFormat:=xlHTML                   
              Application.DisplayAlerts = True
            FichierDonnees.Close       'Provoque une erreur Mémoire insuffisante
        Else
            MsgBox ("Le répertoire suivant n'a pas été trouvé: " & vbNewLine & CheminFichierAffichage)
        End If
    End Sub

  4. #4
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Utilise Dir() pour vérifier si le fichier existe et Kill() pour le détruire avant la sauvegarde s'il existe déjà.
    MPi²

  5. #5
    Membre du Club
    Femme Profil pro
    Inscrit en
    Avril 2004
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 55
    Points : 61
    Points
    61
    Par défaut
    Après un long moment en stand-by, j'ai pu me pencher à nouveau sur ce fichier.
    Et merci aux 2 intervenants, car leurs solutions respectives m'ont permis de trouver la solution

    Pour ceux qui seraient intéressés, voici le code final:
    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
    33
    34
    35
    36
    37
    38
    Public Function FolderExist(ByVal Repertoire As String) As Boolean
        If Len(Dir(Repertoire, vbDirectory)) > 0 Then FolderExist = True
    End Function
     
    Public Function FileExist(ByVal Chemin As String) As Boolean
        If Len(Dir(Chemin)) > 0 Then FileExist = True
    End Function
     
    Sub CreerEtSauver()
    Const xlHTML = 44
    Dim objExcel As Object
    Dim objWorkbook As Object
    Dim CheminRepertoireWeb As String
    Dim NomFichierWeb As String
    Dim AdresseFichierWeb As String     
    Dim CheminFichierWeb As String
     
    CheminRepertoireWeb = "C:\TrucMachin\"
    NomFichierWeb = "Bidule"
    CheminFichierWeb = CheminRepertoireWeb & NomFichierWeb
    AdresseFichierWeb = CheminFichierWeb & ".htm"
     
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Visible = True
     
    'set objworkbook = objExcel.Workbooks.Add()
    Set objWorkbook = ActiveWorkbook
     
    objExcel.DisplayAlerts = False
     
    If FileExist(AdresseFichierWeb) Then
    Kill AdresseFichierWeb
    End If
     
    objWorkbook.SaveAs AdresseFichierWeb, xlHTML
    objWorkbook.Close
     
    End Sub
    Bon, il y a peut-être plus beau, mais ça fonctionne nickel.
    Merci donc

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Excel cesse de fonctionner en calcul auto
    Par leloup84 dans le forum Excel
    Réponses: 22
    Dernier message: 05/08/2014, 11h33
  2. [XL-2007] Problème macro VBA "Excel a cessé de fonctionner"
    Par MAD61141 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 22/01/2014, 21h02
  3. Excel a cessé de fonctionner: pb de time out?
    Par quarkup31 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 16/02/2013, 23h23
  4. [XL-2010] Excel à cessé de fonctionner à la fermeture
    Par electrosat03 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 09/12/2010, 18h15
  5. [AC-2007] Erreur Excel a cessé de fonctionner
    Par tibofo dans le forum VBA Access
    Réponses: 0
    Dernier message: 09/09/2010, 12h53

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