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 :

Création d'objets selon une "value"


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut Création d'objets selon une "value"
    Bonjour à tous !

    Voilà mon problème : j'ai créé un objet dans un module de classe avec les variables suivantes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Nom As String
    Public Repeat As Boolean
    Public Nb_repeat As Integer
    Public Delete As Boolean
    Public Nb_interfaces As Integer
    Je veux donc créer cet objet en plusieurs exemplaires selon une valeur rentrée dans ma feuille excel tel que :

    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
    Sub Test()
     
    Dim i As Integer
    Dim nb_modules As Integer
     
    i = 0
    nb_modules = 0
     
    nb_modules = Range("G7:H8").Value 'cellules fusionnées
     
    For i = 1 To nb_modules
     
    MsgBox "Module n° " & i
    Dim Module & i As New Module
     
    Next i
     
    End Sub
    Je ne pense que ce ne sont que des erreurs de syntaxe, enfin j'espère... En gros, il faudrait, par exemple si la valeur de ma case est 5, créer 5 objets "Module".

    Merci de votre aide !

  2. #2
    Membre Expert Avatar de mayekeul
    Inscrit en
    Août 2005
    Messages
    1 369
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 1 369
    Par défaut
    bonjour,

    le mieux est de créer une collection ou un tableau d'objet

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut DeaD78
    j'ai créé un objet dans un module de classe avec les variables suivantes.
    Le problème vient peut-être de là essaies dans un module général
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    [i = 0
    nb_modules = 0
    sert à rien puisque tu les initialises jyste après
    Remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_modules = Range("G7:H8").Value
    Par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_modules = Range("G7").MergeArea
    Mais si tu veux de l'aide explique en quoi est le pboblème : tu as la 1re boîte de messages ou non ?

    Et explique le finalité, le but à atteindre (créer des modules me semble bizarre, surtout par macro), on aura peut-être une autre solution à te proposer.
    A+

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Merci de vos réponses !

    Alors, je pense, en effet, qu'il serait plus judicieux de passer par les collections mais ce n'est pas trop ma tasse de thé !

    Le problème du code précédent est une incompatibilité de types à la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To nb_modules
    Je ne crée donc même pas de boîte de dialogue.

    En ce qui concerne ce que je cherche à faire, j'ai déjà posté un topic dessus ici : http://www.developpez.net/forums/sho...d.php?t=560853. Je vais donc devoir passer par des objets, sinon je ne vois aps comment.

    Ce que je cherche à faire pour le moment c'est des créer un nombre d'objets en un nombre d'exemplaire égal à la valeur d'une case de ma feuille excel.

    En gros, si j'ai "nb" comme réponse dans ma case, je veux faire quelque chose
    de la forme :

    For i = 1 to nb, Dim Module"i" as new Module.

    En gros je veux créer "nb"objets Module d'un coup qui aient pour nom Module1, Module2, ..., jusqu'à Modulenb.

    Merci pour le coup de main

    En attendant, je vais me renseigner sur les collections.

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Je viens de jeter un oeil aux collections qui répondent assez bien à ce que je souhaite et assez simples d'utilisation.

    Cependant, j'ai quand même le problème suivant : je veux faire un compteur allant de i=1 jusqu'à nb_modules sachant que nb_modules correspond à Range("G7:H8").Value. Celà me provoque uen incompatibilité de type.

    Comment faire?

    Edit : j'ai ça pour l'instant dans mon module de test et ça ne fonctionne pas. Un module de classe appelé Module a aussi été créé avec seulement quelques variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim colModule As New Collection
    Dim i As Integer, nb_modules As Integer
     
    nb_modules = Range("G7:H8").Value
     
    For i = 1 To nb_modules
     
    colModule.Add (New Module)
     
    Next i

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    682
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 682
    Par défaut
    Problème réglé pour la boucle par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nb_modules = Range("G7").Value
    Fallait pas aller chercher trop loin.

    Par contre, les colelctions c'est toujours pas ça..

  7. #7
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut
    Tu ne maîtrise pas bien le VBA "basique" et tu veux créer du code à partir du code.... C'est une bonne solution pour passer du temps sur Excel, mais désolé, à ce niveau, je ne me sens pas compétant (en un seul mot)
    A+

  8. #8
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour tlm,

    et si tu nous disais ce que tu comptes faire avec ces "Modules" ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Création d'objets dans une boucle for
    Par urban_p dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/06/2008, 10h34
  2. [POO] création d'objet via une fabrique de classe
    Par flash_math dans le forum Langage
    Réponses: 2
    Dernier message: 10/11/2007, 09h15
  3. [VBA-E]Création de boutons selon une liste
    Par frevale dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 25/03/2006, 14h31

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