Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 12/12/2011, 13h50   #1
Membre du Club
 
Inscription : avril 2007
Messages : 133
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2007
Messages : 133
Points : 54
Points : 54
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 ?)

Dereck07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/12/2011, 15h02   #2
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,
Tu as un tuto sur les variables tableau ici :

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

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 05h26   #3
Rédacteur/Modérateur
 
Avatar de Philippe JOCHMANS
 
Homme Philippe JOCHMANS
Développeur informatique
Inscription : mai 2005
Messages : 17 625
Détails du profil
Informations personnelles :
Nom : Homme Philippe JOCHMANS
Âge : 44
Localisation : France, Loir et Cher (Centre)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Communication - Médias

Informations forums :
Inscription : mai 2005
Messages : 17 625
Points : 30 958
Points : 30 958
Envoyer un message via MSN à Philippe JOCHMANS Envoyer un message via Skype™ à Philippe JOCHMANS
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
__________________
Détaillez vos questions, sinon vous aurez des réponses erronées et vous irez tout droit dans le et lisez les règles sinon
Si vous pensez commencer sans un livre, oublier : livres pour débuter
Vous pouvez consulter mes articles sur Access et PowerPoint
Le blog Office.

Inutile de m'envoyer un MP pour des questions techniques ou de me relancer , je n'y répondrais pas.
Philippe JOCHMANS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 07h51   #4
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
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
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 21h08   #5
Membre du Club
 
Inscription : avril 2007
Messages : 133
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : avril 2007
Messages : 133
Points : 54
Points : 54
Merci pour vos reponses.
Enfaite, je suis habitué à delphi et dans ce langage je suis habitué à manipuler des TstringList
exemple d'utilisation:
Code delphi :
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 ?
Dereck07 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h58   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Essaie le code suivant :

Code :
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
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 20h19   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

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

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
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 :
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
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h34.


 
 
 
 
Partenaires

Hébergement Web