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 :

Macro complémentaire & macro


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut Macro complémentaire & macro
    Bonjour,

    Dans le cadre de mon stage on m'a demandé de faire des Web Services avec un client Excel. Mais je n'y connait rien en vba.
    Voici mon problème :
    J'ai créé une bibliothèque de classe en C# faisant appelle à mon web service et je l'ai défini en tant que macro complémentaire pour Excel jusque la aucun problème
    J'ai ensuite créer une macro appelant les fonctions de cette macro tout va bien je peux recupérer un champ texte (par exemple) ou un tableau
    Cependant ce que j'aimerais c'est recupérer un objet (composé par exemple de 3 champ string et d'un champ string[]) mais je n'y arrive pas

    Cela est il possible ?

    Ah oui j'utilise visual studio 2005, excel 2003 et il faudrait que se soit compatible excel 2007

    Merci d'avance pour vos réponses

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Je ne sais pas si c'est ce que tu veux, mais en VBA tu peu aussi traiter des "objets"
    la syntaxe est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonChamp ' tu n'assigne pas c'est d'office un variant
        Set MonChamp = "ce que tu veux du moins je suppose"
    A+

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Euh je ne suis pas sur que cela marche car je ne peux pas accéder au différents champ

    Avec des exemples de code ça sera peut être plus simple a comprendre :

    Voici la déclaration des champs de ma classe infoP :
    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
    public partial class infoP {        
            private string nomField;        
            private string prenomField;
            private absenceType[] absenceField;
            public string nom {
                get {
                    return this.nomField;
                }
                set {
                    this.nomField = value;
                }
            }
            public string prenom {
                get {
                    return this.prenomField;
                }
                set {
                    this.prenomField = value;
                }
            }
            public absenceType[] absence {
                get {
                    return this.absenceField;
                }
                set {
                    this.absenceField = value;
                }
            }
    Après j'ai une méthode qui fait appel au web service et renvoye un objet InfoP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public infoP getInfoP(String d, String m)
    Ce que j'aimerais c'est avec ma macro Excel récupérer cet objet InfoP et pouvoir accéder à ces différent champs

    Est ce possible ?

    J'ai déjà essayer ta méthode mais je n'arrive pas à accéder aux champs, j'ai aussi essayer de recréer une classe vba portant le même nom avec les mêmes champs mais cela n'a pas marché

    Merci d'avance pour vos réponses

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    J'ai ensuite créer une macro appelant les fonctions de cette macro tout va bien je peux recupérer un champ texte (par exemple) ou un tableau
    Comme le dit LeForestier, en déclarant une variant, tu peux récupérer un tableau et ce tableau, tu peux l'instancier.
    En basic, j'écrirais ce que l'homme des bois t'a indiqué et lui affecterais ce qui ressemble plus à une fonction qu'à une subroutine puisque la macro renvoie "quelque chose"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim i as byte, MonChamp as variant 'je le précise toujours pour le lecteur ^^
        Set MonChamp = (l'appel à ta fonction avec ses paramètres)
        'Et pour connaître l'intérieur de MonChamp :
        For i = 0 to Ubound(MonChamp)
              Msgbox MonChamp(i)
        Next
    Enfin je suppose... d'après les éléments que tu nous fournis... selon ce que l'on a compris... et en fonction de ce que l'on est susceptible de comprendre

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour Ousk,
    Tu veux instancier un objet dans VBA avec un code qui vien du C#, là je pense que tu a un problème.
    Je pense que tu devrais ouvrir ta table en VBA,( il y a plusieur tuto à ce sujet)
    et à partir de là tu pourrais avoir des objet ou collection de classe. !
    pour info : ont traite aussi les classes en VBA !
    A+
    Edit: ouuppss, en relisant ta question je pense que je suis à coté de la plaque.
    Et je ne pense pas qu'il y ai moyen de récupérer une classe C# en VBA.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 13
    Par défaut
    Bonjour,

    Merci à toi ouskel'n'or, j'ai pu avancer un peu

    Donc je fais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        Dim i As Byte
        Dim infP As Variant
     
        Set infP = Application.Run("getInfoP", Range("D26").Text,  Range("E26").Text)
        Range("H26").Value = infP.Nom
        Range("H27").Value = infP.Prenom
    Ce qui marche très bien, cependant je n'arrive pas à récupérer le champ "absence" qui renvoye un tableau de "absenceType"

    J'ai essayer plusieurs chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       Dim t As Variant
       Set t = infP.absence
       MsgBox UBound(t,1)
    Mais cela ne marche pas, il me renvoie, au niveau du Set, une erreur : "erreur d'execution '13' : Incompatibilité de type"

    Le même problème se pose si une fonction me renvoie un tableau de type.

    Par exemple la déclaration de fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    prestaType[] getListPresta(String date, String nom, String prenom);
    Et la fonction vba qui y fait appel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Dim lpresta As Variant
     
        Set lpresta = Application.Run("getListPresta", Range("B8").Text, Range("B9").Text, Range("B10").Text)
        For i = 0 To UBound(lpresta, 1)
                Cells(8 + i, 7).Value = lpresta(i).Matricule
                Cells(8 + i, 8).Value = lpresta(i).Nom
                Cells(8 + i, 9).Value = lpresta(i).Prenom
        Next i
    J'ai la même erreur au niveau du Set

    Est ce que quelqu'un aurait une idée ?

    Sinon je pense passer les tableaux d'objets en tableaux de String[,] mais j'aurais aimer éviter de devoir passer par cette étape

    Merci d'avance pour vos réponses

Discussions similaires

  1. [PPT-2010] Passage d'un macro "Normal" à une macro complémentaire
    Par sebast733 dans le forum VBA PowerPoint
    Réponses: 0
    Dernier message: 11/10/2012, 15h49
  2. [XL-2007] Modifier une macro complémentaire par macro
    Par jpclabaux dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 30/07/2012, 11h30
  3. Manipulation des macros complémentaires par macro
    Par EvaristeGaloisBis dans le forum Général VBA
    Réponses: 2
    Dernier message: 25/08/2007, 18h40
  4. [VBA-E]-Appeler une macro complémentaire ?
    Par Régolo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 15/04/2007, 23h34
  5. [VBA-E] Utilisation macros complémentaire xla
    Par EvaristeGaloisBis dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 10/04/2007, 16h15

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