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 :

Désactivation d'une référence VBE6


Sujet :

Macros et VBA Excel

  1. #1
    Invité
    Invité(e)
    Par défaut Désactivation d'une référence VBE6
    Bonjour,

    La macro ci-dessous semble fonctionner, elle s'arrête bien sur la ligne en rouge, mais la référence n'est pas décochée.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub Workbook_Open()
    On Error Resume Next
    Dim i%, N%
    N = Application.VBE.ActiveVBProject.References.Count
    For i = 1 To N
    If Application.VBE.ActiveVBProject.References.Item(i).Name = "MANQUANT : RefEdit Control" Then
    Application.VBE.ActiveVBProject.References.Remove _  
    Application.VBE.ActiveVBProject.References.Item(i)
    End If
    Next
    End Sub
    Si quelqu'un a une idée à ce sujet, je le remercie d'avance.

  2. #2
    Membre Expert
    Avatar de JackOuYA
    Inscrit en
    Juin 2008
    Messages
    1 040
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 1 040
    Par défaut
    bonjour,jacques_jean,

    je suppose que la référence reste coché , car il doit y avoir sur un des userforms du projets ce fameux contrôle refEdit, il faut peui être passé sur tous ces userforms..

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    es-tu bien certain de l'intitulé : ""MANQUANT : RefEdit Control" ?

    Ajoute donc une listbox List1 et :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim i%, N%
    N% = Application.VBE.ActiveVBProject.References.Count
    For i% = 1 To N%
      List1.additem Application.VBE.ActiveVBProject.References.Item(i%).Name 
    Next
    juste pour y voir mieux clair

  4. #4
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Avec une instruction On error resume next il est indispensable
    d'évaluer chaque condition en 2 temps à l'aide d'une variable tampon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    on error resume next
    maVar=monAffectation
    if maVar=maValeur_de_test then ...
    Au cas contraire, en cas d'erreur sur l'affectation, la condition If se comportera comme si elle était vrai
    et comme la gestion des références est bugguée pour les références manquantes ...

  5. #5
    Invité
    Invité(e)
    Par défaut
    Merci à vous pour votre réponse rapide.

    Avec la proposition de Ucfoutu, je m'aperçois qu'en effet il y a bien 6 références cochées mais que la 6ème, qui dans "Références disponibles" est intitulée : "MANQUANT : RefEdit Control", n'est pas reconnue et le nom ne s'ajoute pas dans la liste.

    Ce que confirme également la réponse de DarkVader.

    J'ai essayé en indiquant pour le nom : RefEdit ou RefEdit.dll mais aucun résutat.

    Je précise qu'il s'agit d'un fichier qui navigue entre 2 versions d'Excel (2000 et 2003).

    Pour cette ligne : "MANQUANT : RefEdit Control" le chemin indiqué en bas est :
    "C:\Program Files\Microsoft Office\Office11\RefEdit.dll"

    Mais bien sûr, sur la version 2000 le fichier se trouve dans :
    "C:\Program Files\Microsoft Office\Office"

    J'arrive à remplacer l'un par l'autre en manuel (en désactivant les macros) puis en enregistrant le fichier, mais le but serait évidemment d'automatiser.

    Peut-être qu'il ny a pas d'autre solution que de demander à l'utilisateur possédant la version 2003 d'enregistrer le fichier en version 2000 ?

    Remarque : juste pour voir j'ai tenté en créant un répertoire "Office11" sour "Microsoft Office" et d'y copier la DLL mais bien sûr aucun résultat.

    JackOuYa : j'ai regardé les contrôles du formulaire mais je n'ai rien trouvé. J'ai donc fait une copie du fichier et supprimé le formulaire, et toujours pas de solution.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bon... (il fallait s'y attendre) ...
    Maintenant : je n'ai pas mon pc avec Excel disponible à portée de main, mais vais essayer de mémoire :

    Essaye (sans garantie ni du gouvernement ni du vieil endormi que je suis) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Set toto = ThisWorkbook.VBProject.References
      For Each toto In Application.VBE.ActiveVBProject.References
        If toto.IsBroken = True Then
          Application.VBE.ActiveVBProject.References.Remove toto
        End If
      Next toto
    EDIT :
    il semble finalement bien que je ne suis pas si endormi que je le pensais :
    http://msdn.microsoft.com/en-us/libr...ffice.11).aspx

  7. #7
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Bon... (il fallait s'y attendre) ...
    Maintenant : je n'ai pas mon pc avec Excel disponible à portée de main, mais vais essayer de mémoire :

    Essaye (sans garantie ni du gouvernement ni du vieil endormi que je suis) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      Set toto = ThisWorkbook.VBProject.References
      For Each toto In Application.VBE.ActiveVBProject.References
        If toto.IsBroken = True Then
          Application.VBE.ActiveVBProject.References.Remove toto
        End If
      Next toto
    et moi, de mémoire, je serais surpris que ton code soit fonctionnel
    (pour la même raison que citée précédemment).

  8. #8
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Salut, Darkvader,

    je ne peux essayer, hélàs.. pour l'instant ...
    Mais jette un coup d'oeil au lien placé dans mon EDIT ...
    Essaye, toi ...

  9. #9
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Il y a aussi :
    http://sinarf.developpez.com/access/autoref/

    Sinon, j'ai un tiote question ucfoutu...
    pourquoi avoir fait un ???

  10. #10
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par Maxence HUBICHE Voir le message
    Sinon, j'ai un tiote question ucfoutu...
    pourquoi avoir fait un ???
    Simplement parce que je n'ai utilisé que ma mémoire et que je n'ai voulu courir aucun risque ...
    J'aurais d'ailleurs dû compléter par un Set Toto = Nothing, pour être conforme à mes manières...
    Je sais maintenant qu'un simple Dim aurait suffi...

  11. #11
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par Maxence HUBICHE Voir le message
    Il y a aussi :
    http://sinarf.developpez.com/access/autoref/

    Sinon, j'ai un tiote question ucfoutu...
    pourquoi avoir fait un ???
    par distraction ...

    Citation Envoyé par ucfoutu Voir le message
    Salut, Darkvader,

    je ne peux essayer, hélàs.. pour l'instant ...
    Mais jette un coup d'oeil au lien placé dans mon EDIT ...
    Essaye, toi ...
    J'en étais resté à un précédent échange concernant une compatibilité de référence entre les versions 2003 et antérieures :
    je ne sais si µSoft à corrigé le bug concernant IsBroken and Co à partir de la version 2003
    mais concernant la version 2000, je confirme à coup sur.

  12. #12
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Simplement parce que je n'ai utilisé que ma mémoire et que je n'ai voulu courir aucun risque ...
    J'aurais d'ailleurs dû compléter par un Set Toto = Nothing, pour être conforme à mes manières...
    Je sais maintenant qu'un simple Dim aurait suffi...
    Il me semble que tu t'enterres

  13. #13
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    Citation Envoyé par ucfoutu Voir le message
    Simplement parce que je n'ai utilisé que ma mémoire et que je n'ai voulu courir aucun risque ...
    J'aurais d'ailleurs dû compléter par un Set Toto = Nothing, pour être conforme à mes manières...
    Je sais maintenant qu'un simple Dim aurait suffi...
    Ok !
    Désolé de la digression que cela avait engendré. Ce SET... m'étonnait de toi, et je me demandais s'il n'y avait pas un bout de code qui manquait, ou en trop, ...
    Merci pour la précision.
    Et encore désolé de la digression.

  14. #14
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Citation Envoyé par DarkVader Voir le message
    Il me semble que tu t'enterres
    Moi ?
    Non...
    puisqu'il s'agit de toutes manières d'un objet ...
    Je pense donc que mon Set ne nuisait de toutes manières pas, mais je vois que Microsoft se contente d'un Dim .
    Quel est le problème, DarkVader (je regrette vraiment de ne pas avoir Excel à portée de main...)
    Mais attendons Jacques Jean....

  15. #15
    Rédacteur
    Avatar de DarkVader
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    2 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 131
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set toto = ThisWorkbook.VBProject.References
    1°) ainsi déclaré toto correspond à la collection de Toutes les références

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
      For Each toto In Application.VBE.ActiveVBProject.References
        If toto.IsBroken = True Then
          Application.VBE.ActiveVBProject.References.Remove toto
        End If
      Next toto
    2°) Dans ce bloc la déclaration précédente ne trouve pas sa place ;
    d'abord pour l'incompatibilité de type et ensuite parce que toto est implicitement déclaré dans la ligne for next.
    « Dim toto as reference » eut été plus approprié.

  16. #16
    Invité
    Invité(e)
    Par défaut
    Encore merci à tous d'accepter de trouver des solutions.

    A partir du code proposé par Ucfoutu j'ai fait pas mal d'essais. En lisant les nouvelles réponses j'ai modifié en remplaçant "Set...." par "Dim toto as Object".

    A ce sujet DarkVader : "Dim toto as reference" n'est pas accepté (ni proposé sur Excel 2000).

    Dans tous les cas la condition ci-dessous n'est pas vérifiée (passage à "End If" à chaque fois et pourtant la boucle s'effectue bien 6 fois, donc pour chaque référence réellement cochée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If toto.IsBroken = True Then
          Application.VBE.ActiveVBProject.References.Remove toto
        End If
    Juste pour voir ce que cela donne j'ai modifié "= True" en "= False" et là il y arrêt sur "Application.VBE..........Remove Toto"

    mais j'ai le message : "Erreur d'exécution 57101", "Erreur définie par l'application ou par l'objet" ?
    Dernière modification par Invité ; 10/11/2008 à 16h32.

  17. #17
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    tu as mis :
    Microsoft Visual Basic for Application Extensibility 5.3
    dans la liste des références ?

  18. #18
    Invité
    Invité(e)
    Par défaut
    Non ce n'était pas coché.
    Je viens de le faire , j'ai enregistré et fermé le fichier, fermé Excel et relancé.

    Toujours le même résultat.

  19. #19
    Expert confirmé

    Avatar de Maxence HUBICHE
    Homme Profil pro
    Développeur SQLServer/Access
    Inscrit en
    Juin 2002
    Messages
    3 842
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Développeur SQLServer/Access

    Informations forums :
    Inscription : Juin 2002
    Messages : 3 842
    Par défaut
    tu peux déclarer en Reference maintenant

  20. #20
    Invité
    Invité(e)
    Par défaut
    Merci pour l'info.
    Je ne savais pas que cette référence permettait d'avoir d'autres types de déclaration de variable.

    Par contre, le résultat est le même, sauf que maintenant lorsque je place le curseur sur "toto.IsBroken" il apparaît "= False" (ce n'était pas le cas avant d'avoir ajouté cette référence).

    C'est quand même curieux que la boucle fonctionne bien et passe bien sur les 6 références cochées. Est-ce que cela veut dire qu'il faut indiquer "= False" au lieu de "= True" mais dans cas j'ai l'erreur indiquée dans ma précédente réponse.

    DarkVader a écrit :
    je ne sais si µSoft à corrigé le bug concernant IsBroken and Co à partir de la version 2003
    mais concernant la version 2000, je confirme à coup sur.
    Ne serait-ce pas la raison (je pense qu'il veut dire que cette correction n'aurait pas été faite) ?

    D'autre part dans le lien fourni par Ucfoutu il est question de 2003 pour l'utilisation de "IsBroken" !

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

Discussions similaires

  1. [VBA] Ajouter dynamiquement une référence
    Par jpharand dans le forum VBA Access
    Réponses: 23
    Dernier message: 17/04/2010, 00h28
  2. Comment stocker une référence vers un TTreeNode ds un DFM ?
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 19/07/2005, 13h33
  3. [SOAP][Web Service] erreur création d'une référence Web
    Par Maximil ian dans le forum XML/XSL et SOAP
    Réponses: 6
    Dernier message: 20/06/2005, 14h29
  4. Réponses: 5
    Dernier message: 22/12/2004, 17h50
  5. Une référence à un élément de sa propre table
    Par szdavid dans le forum Langage SQL
    Réponses: 7
    Dernier message: 29/06/2004, 11h46

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