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 :

Objet class en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut Objet class en vba
    Bonjour,

    Je fais une macro excel ou j'ai met dans un tableau des données.
    Parfois je dois en ré-ajouter dans ce tableau et donc le redimensionner.
    Pour ca je fais un redim preserve

    Je me dis que VBA etant orienté objet il doit etre possible de faire des .add .remove ...
    Pouvez vous m'intiquer quel est la class la plus addapter pour faire ca ?
    (ce serait pour avoir des string chainé et pouvoir suprimer ou ajouté des élément de la chaine. Je ne sais pas si je suis claire ?)


  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Bonjour,
    Tu as un tuto sur les variables tableau ici :

    http://didier-gonard.developpez.com/...s-tableau-vba/

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour

    Citation Envoyé par Dereck07 Voir le message
    Je me dis que VBA etant orienté objet il doit etre possible de faire des .add .remove ...
    Attention à ne pas mélanger.

    Le modèle d'une application Office (Excel, Access, etc..) est bien orienté objet, mais le langage VB (tiré du VB6) tel que déclaration, boucle, tableau etc.. ne l'est pas.

    Philippe

  4. #4
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Tu peux aussi regarder du coté des Collections et du Dictionary.

    Pour ce qui est des tableaux tu as également à dispo le tutoriel de Silkyroad à ce sujet.

    Ensuite pour des besoins vraiment spécifiques, tu peux regarder la construction d'une class perso avec le tutoriel de Pierre Fauconnier en support.

    Il est difficile de t'aiguiller sans réellement comprendre les besoins spécifiques du code que tu veux réaliser.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Par défaut
    Merci pour vos reponses.
    Enfaite, je suis habitué à delphi et dans ce langage je suis habitué à manipuler des TstringList
    exemple d'utilisation:
    Code delphi : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    function test(IN2:string):TstringList;
    var
    L:TstringList;
    begin
    L:=TstringList.create; //Creation de la liste
    L.Add("Champ1"); // ajoute le premier élément à la liste
    L.Add(IN2); // ajoute le 2eme élément à la liste
    L.Add("Champ3"); // ajoute le 3eme élément à la liste
    if(L.Count==3) then // test le nombre d'élément dans la liste
    begin
    L.Strings[3].remove; //sumprime l'élément 3
    end;
    L.Strings[1]="IN1" // renome l'élément 1
    result:=L;
    end;

    Est que en VBA il existe une moyen simple de faire cela ?
    Les collections ont l'aire de repondre à ce besoin. J'ai cherché un tutorial mais j'en n'est pas trouvé de dédier au collections. quelqu'un a t il un lien a m'envoyer ?

  6. #6
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 208
    Par défaut
    Essaie le code suivant :

    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
    Sub test()
        Dim L() 'création de la liste
        'ajout d'une rpemière valeur
        ReDim L(0)
        L(0) = "Champ1"
        'ajout d'une seconde valeur
        ReDim Preserve L(1)
        L(1) = "IN2"
        'ajout d'une troisième valeur
        ReDim Preserve L(2)
        L(2) = "Champ3"
        'test le nombre d'élément dans la liste
        If UBound(L) = 2 Then
        End If
        'supprime L 'élément 3
        ReDim Preserve L(1)
        'renome l'élément 1
        L(0) = "IN1"
    End Sub

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Pour ma part je pense que le plus proche serait le dictionary, ça fait un moment que je n'ai pas touché à Delphi (je m'y suis remis il a peu et je suis en période de convalescence ^^')

    Voila ce qu'il est possible (en partie) de faire et qui correspond à l'utilisation du TStringList que tu utilises dans ton exemple.

    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
    Option Explicit
     
    Sub Essai()
    Dim DicoResultat As Dictionary
     
    Set DicoResultat = Teste("Bonjour")
    End Sub
     
    Function Teste(IN2 As String) As Dictionary
    'Menu Outils -> Références... et tu coches la case Microsoft scripting runtime
    'On déclare le dico =  L:TStringList;
    Dim MonDico As New Dictionary 'le new est l'équivalent du Create
     
    'On renseigne des entrées dans le dico
    'On defini a chaque fois une clé et un item(l'item peut être une valeur ou un Object)
    MonDico.Add "Champs1", 1
    MonDico.Add IN2, 2
    MonDico.Add "Champs3", 3
     
    'on teste le nombre d'entrées
    If MonDico.Count = 3 Then MonDico.Remove IN2
    'OU Aussi possible par index
    If MonDico.Count = 3 Then MonDico.Remove MonDico.Keys(1) 'numéroté en partant de 0. Ici de 0 à 2.
     
    'On peut verifier qu'une clé existe et changer l'item qui lui est associé
    If MonDico.Exists("Champs1") Then MonDico("Champs1") = "IN1"
     
    'On peut faire des totaux
    MonDico("Champs3") = MonDico("Champs3") + 1
     
    'On peut changer la clé d'une des entrée
    MonDico.Key("Champs3") = "NewKey"
     
    Set Teste = MonDico
    End Function
    Pour le Dico, le petit plus est la fonction Exists, qui te permet de savoir si un élément existe déjà sans avoir à boucler sur son contenu.

    Il faut faire attention à (quelques) particularité(s) avec le Dico, si par exemple tu essais d'attribuer un item à une valeur de clé qui n'existe pas, une nouvelle entrée est automatiquement créée contenant la nouvelle clé et son item associé.

    Je n'utilise jamais les Collections, je n'en ferais donc pas l'éloge mais tu dois également pouvoir faire des choses similaire.

    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Insertion documents word dans champ objet OLE sous VBA
    Par frankouche dans le forum Access
    Réponses: 4
    Dernier message: 20/12/2006, 21h35
  2. Importer des classes en VBA?
    Par ViPers dans le forum Access
    Réponses: 11
    Dernier message: 17/09/2006, 13h33
  3. [POO] Objet classe PHP5
    Par theskel dans le forum Langage
    Réponses: 1
    Dernier message: 08/08/2006, 10h49
  4. objet shape en vba sous excel
    Par kernel57 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/11/2005, 15h04
  5. Objets/Classes avec un SGBD
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 09/11/2003, 16h04

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