Discussion: Erreur 1004 sur REMOVE un module [XL-2016]

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

    Informations forums :
    Inscription : novembre 2009
    Messages : 102
    Points : 99
    Points
    99

    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 expérimenté
    Homme Profil pro
    Inscrit en
    août 2010
    Messages
    957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : août 2010
    Messages : 957
    Points : 1 733
    Points
    1 733

    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 P.


    Ps : n'oubliez pas de placer vos posts comme "résolus" () si tel est le cas...

  3. #3
    Expert éminent

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    2 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 2 490
    Points : 6 477
    Points
    6 477
    Billets dans le blog
    19

    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
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

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

    Informations forums :
    Inscription : novembre 2009
    Messages : 102
    Points : 99
    Points
    99

    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
    Membre expert
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2016
    Messages
    2 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2016
    Messages : 2 154
    Points : 3 671
    Points
    3 671
    Billets dans le blog
    1

    Par défaut

    Bonsoir,
    En fet vba index les module de même nom!
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

  6. #6
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    juillet 2012
    Messages
    4 414
    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 : 4 414
    Points : 8 436
    Points
    8 436
    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
    Expert éminent

    Homme Profil pro
    Développeur Vba Excel
    Inscrit en
    avril 2013
    Messages
    2 490
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Vba Excel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 2 490
    Points : 6 477
    Points
    6 477
    Billets dans le blog
    19

    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
    Eric KERGRESSE
    https://sites.google.com/site/erickergresseeirl/
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter

  8. #8
    Membre expert
    Avatar de dysorthographie
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    septembre 2016
    Messages
    2 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : septembre 2016
    Messages : 2 154
    Points : 3 671
    Points
    3 671
    Billets dans le blog
    1

    Par défaut

    Doevents après remove?
    Il dit non avec la tête
    mais il dit oui avec le coeur
    il dit oui à ce qu’il aime
    il dit non au professeur {Jacques PRÉVERT}

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

    Informations forums :
    Inscription : novembre 2009
    Messages : 102
    Points : 99
    Points
    99

    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 mimimathy dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 04/10/2015, 15h01
  2. Réponses: 8
    Dernier message: 25/01/2008, 12h48
  3. erreur 1004 sur un range
    Par oscar.cesar dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 02/11/2007, 17h35
  4. Erreur 1004 sur "fichier - quitter"
    Par sabotage dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 22/08/2007, 19h01
  5. Erreur 1004 sur une boucle simple
    Par ruzakruzak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 06/07/2007, 10h00

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