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 :

[VBA Excel] référence necessaire pour OLEObjects


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Par défaut [VBA Excel] référence necessaire pour OLEObjects
    Bonjour,
    j'essaye de faire fonctionner un code permettant de créé un bouton qui exécute une macro. A la compilation ce dernier bloquer sur mon objet OLEObjects :
    "Impossible de lire la propriété de l'objet OLEObjects de la classe Worksheet"

    J'ai rajouté la bilbiothèque "Microsoft Visual Basic for Applications Extensibility", mais cela n'a pas l'air de suffire. Est ce une erreur de code, une erreur de référence (quel bibliothèque me faut il en plus ?) .. ?

    voici un extrait de mon code, et 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
     Set oOLE = ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
            Link:=False, DisplayAsIcon:=False, Left:=340, Top:=30, Width:=100, Height:=30)
     
        'texte sur le bouton
        ActiveSheet.OLEObjects(X).Object.Caption = "Actualiser " & feuille
        'code sur le bouton
        Code = "Sub CommandButton_Click()" & vbCrLf
        Code = Code & "Call Module1.Lire" & requete & "," & feuille & vbCrLf
        Code = Code & "End Sub"
     
        With ActiveWorkbook.VBProject.VBComponents(feuille).CodeModule
            NextLine = .CountOfLines + 1
            .insertlines NextLine, Code
        End With

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Par défaut
    Je viens de m'appercevoir que j'avais une erreur dans mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.OLEObjects(X).Object.Caption = "Actualiser " & feuille
    Je n'avais pas défini X
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    X = ActiveSheet.OLEObjects.Count
    J'ai par contre un autre problème maintenant. En créant le code de ma macro je fais un appel à une fonction en passant des paramètres. Malheureusement, l'un de ceux la est très très grand (c'est une requête), du coup il y a un retour à la ligne non voulue et le code de mon bouton ne s'éxecute pas.
    Quelqu'un à une idée ?

  3. #3
    Membre confirmé Avatar de biggione
    Inscrit en
    Juillet 2006
    Messages
    99
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 99
    Par défaut
    tu na qu'a découpé ta valeur en 2 puis tu les stocke dans 2 variable
    et ensuite tu effectue un test si c ce que tu ve faire sur les deux.

    Sinon, c koi comme genre de variable ce truc super long?

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Par défaut
    C'est une requête SQL qui tient en moyenne sur 10 lignes, mais ca peut faire moins voir plus. Je voudrais pseudo automatiser le traitement, ne pas avoir besoin de découper mon paramètre (la requête) suivant sa taille.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonsoir

    tu peux essayer cette procedure pour scinder la requete dans la variable

    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
    39
    Set oOLE = _
    ActiveWorkbook.ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", _
            Link:=False, DisplayAsIcon:=False, _
            Left:=340, Top:=30, Width:=100, Height:=30)
     
            '------- procedure pour scinder la requete -------------
            Cible = Requete
            Requete = ""
     
            For i = 1 To Len(Cible)
                X = InStr(80, Cible, " ")
     
                If X = 0 Then
                    Chaine = Cible
                    Requete = Requete & """" & Chaine & """"
                    Exit For
                End If
     
                Chaine = Mid(Cible, 1, X)
                Requete = Requete & """" & Chaine & """ & _" & vbCrLf
                Cible = Mid(Cible, Len(Chaine) + 1)
            Next
     
        'Debug.Print Requete
        '-----------------------------------------------------------
     
        X = ActiveSheet.OLEObjects.Count
        'texte sur le bouton
        ActiveSheet.OLEObjects(X).Object.Caption = "Actualiser " & Feuille
     
        'code sur le bouton
        Code = "Sub CommandButton_Click()" & vbCrLf
        Code = Code & "Module1.Lire " & Requete & " , " & Feuil1.Name & vbCrLf
        Code = Code & "End Sub"
     
        With ActiveWorkbook.VBProject.VBComponents(Feuil1.Name).CodeModule
            NextLine = .CountOfLines + 1
            .InsertLines NextLine, Code
        End With
    bonne soiree
    michel

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    49
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2006
    Messages : 49
    Par défaut
    merci bien pour ce code, ca marche nikel.
    J'ai juste du augmenter la taille des lignes de 80 à 250. Par contre j'ai essayé de transformer cette portion de code en procédure en passant par référence ma requête mais cela ne marche pas.
    Débutant en vbaexcel, je me demande si il y a une manière spéciale de passer en paramètre par référence à une procédure ? Sinon je ne vois pas trop pourquoi le traitement ne se fait pas lorsque je le fais dans une procédure (enfin il se fait, mais il me renvoit ma variable non modifié) ...

Discussions similaires

  1. (vba excel) echelle horaire pour graphique
    Par DirtyA:ex dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 27/06/2006, 14h00
  2. [VBA-E]Référence à activer pour OLEObject
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/04/2006, 10h34
  3. VBA Excel : références
    Par EJO64 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/01/2006, 13h33
  4. [VBA excel] une variable pour 2 classeurs
    Par totoche dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 05/01/2006, 09h42
  5. [VBA][Excel] Comment faire pour faire une boucle?
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/12/2005, 14h48

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