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 :

Erreur 1004 sur REMOVE un module [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Points : 101
    Points
    101
    Par défaut Erreur 1004 sur REMOVE un module
    Bonjour,

    À l'ouverture de mon Workbook, j'utilise Workbook_Open dans l'objet ThisWorkbook pour initialiser des informations.

    Je veux aussi prendre l'occasion pour rafraîchir le seul fichier module.bas existant au projet.

    J'utilise donc la séquence suivante:


    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent

    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents("Ensemble.bas")
    VBProj.VBComponents.Remove VBComp

    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents.Add(vbext_ct_StdModule)
    VBComp.Name = "P:\User\Modules\Ensemble.bas"
    A la ligne .Remove je reçois une erreur 1004 avec mention l'accès par programme au projet Visual Basic n'est pas fiable et le fichier est toujours en place.

    Une idée ??

  2. #2
    Membre émérite
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 814
    Points : 2 949
    Points
    2 949
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Il faut cocher la case : Accès approuvé au modèle d'objet VBA.
    Pour cela :
    cliquer sur l'onglet développeur/sécurité des macros/Paramètres des macros.
    Cordialement,
    Franck

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bugzy1963 Voir le message
    Bonjour,

    Etes-vous certain du nom de votre module ? Pour voir :
    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
     
    Sub ListerLesModulesDuProjet()
     
    ' Nécessite de cocher la référence Microsoft Visual Basic For Applications Extensibility XXX
     
    Dim VBCompListe As VBComponents
    Dim I As Integer
     
        Set VBCompListe = ActiveWorkbook.VBProject.VBComponents
        For I = 1 To VBCompListe.Count
            Select Case VBCompListe(I).Type
                Case 1, 3
                    MsgBox VBCompListe(I).Name & Chr(10) & VBCompListe(I).Type
            End Select
        Next I
        Set VBCompListe = Nothing
     
    End Sub

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Points : 101
    Points
    101
    Par défaut
    Merci Messieurs

    vos deux commentaires ont réglé les problèmes rencontrés.

    Cependant, j'ai une autre situation.

    Lorsque j'importe le module à partir de mon Path, le nom du module se voit imputé le suffixe 1 à la fini

    Avant le .Remove mon module se nomme Ensemble
    Après le .Import le module se nomme Ensemble1

    C'est comme si le module est toujours en place lorsque l'importation se fait, il y a une indexation.

    j'ai fait un test et j'importe vraiment le module qui est sur le serveur.

    voici mon code:

    Dim VBProj As VBIDE.VBProject
    Dim VBComp As VBIDE.VBComponent

    Set VBProj = ActiveWorkbook.VBProject
    Set VBComp = VBProj.VBComponents("Ensemble")
    VBProj.VBComponents.Remove VBComp

    VBProj.VBComponents.Import Filename:=("P:\User\Modules\Ensemble.bas")

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    En fet vba index les module de même nom!

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    en enregistrant le classeur entre le .Remove et le .Import peut-être ?

    sinon, il faudrait tenter de forcer le renommage du module ... voir fermer et rouvrir le classeur

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Bugzy1963 Voir le message
    Une alternative

    Nb : Remplacer cette ligne For I = 1 To VBCompListe.Count par For I = VBCompListe.Count to 1 Step -1

    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
     
    Sub SupprimerLeModuleEnsemble()
     
    Dim VBCompListe As VBComponents
    Dim I As Integer
     
        Set VBCompListe = ActiveWorkbook.VBProject.VBComponents
     
        For I =  VBCompListe.Count to 1 Step -1
            Select Case VBCompListe(I).Type
                Case 1, 3
                If Mid(VBCompListe(I).Name, 1, Len("Ensemble")) = "Ensemble" Then
                    VBCompListe.Remove VBCompListe(I)
                    'MsgBox VBCompListe(I).Name & Chr(10) & VBCompListe(I).Type
                End If
            End Select
        Next I
        Set VBCompListe = Nothing
     
    End Sub
    Dernière modification par Invité ; 14/09/2017 à 18h09. Motif: Il faut commencer la boucle par la fin.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Doevents après remove?

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Points : 101
    Points
    101
    Par défaut
    Rebonjour

    La seule façons avec laquelle j'ai réussi, c'est de modifier le nom avant d'exécuter le .Remove et .Import.

    Ainsi mon module dans le Workbook a un index +1 Vs le fichier sur le serveur.

    J'ai lu qu'il était impossible de modifier le nom d'un module lorsque celui-ci est sollicité à l'intérieur d'une même SUB.
    C'est pour cela que je change le nom avant le .Remove

    Merci pour votre aide.

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

Discussions similaires

  1. [XL-2007] Erreur 1004 sur un module qui fonctionne sur XL 2013
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/10/2015, 14h01
  2. Réponses: 8
    Dernier message: 25/01/2008, 11h48
  3. erreur 1004 sur un range
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2007, 16h35
  4. Erreur 1004 sur "fichier - quitter"
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/08/2007, 18h01
  5. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 09h00

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