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

  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" ?

  9. #9
    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
    En gros on a la série de questions suivantes :

    Combien de modules y a-t-il?

    En fonction de la réponse à cette question, il faut répéter autant de fois les suivantes (en gros, une fois pour chaque module) :

    Nom du module?
    Est-il répétable?
    Est-il supprimable?
    Combien d'interfaces y a-t-il?

    En fonction de la réponse au nombre d'interfaces, il faut répéter autant de fois les questions suivantes (et celà pour chaque module) :

    Nom de l'interface?
    Nombre de surfaces?

    De même, en fonction du nombre de surfaces, il faut répéter autant de fois (pour chaque module et chaque interface donc) les questions suivantes :

    Nom de la surface?
    ...

    Voilà, en gros le cheminement du questionnaire.

    Au final, si on a 2 Modules ça va donner :

    Combien de modules y a-t-il? ==> 2

    Nom du 1er module?
    Est-il répétable?
    Est-il supprimable?
    Combien d'interfaces y a-t-il? 2

    Nom de l'interface?
    Nombre de surfaces? 2

    Nom de la 1ère surface?
    Nom de la 2ème?

    Nom de l'interface?
    Nombre de surfaces? 1

    Nom de surface?

    _________________________________________________________________

    Nom du 2ème module?
    Est-il répétable?
    Est-il supprimable?
    Combien d'interfaces y a-t-il? 1

    Nom de l'interface?
    Nombre de surfaces? 1

    Nom de surface?


    Voilà donc ce que ça doit donner. Le questionnaire doit donc être dynamique en fonction des réponses : il est donc évident qu'il faut que j'automatise ça en VBA mais je ne sais pas comment faire.

  10. #10
    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
    Bon...ne sachant pas très bien où tout cela doit mener, ci-dessous un code qui pourra peut-être t'inspirer, à tester sur une feuille vierge
    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
    40
    41
    42
    43
    Sub test()
    Dim NbMod As Byte, NbInterf As Byte, NbSurf As Byte
    Dim NomMod As String, NomInterf As String
    Dim i As Byte, j As Byte, k As Byte, x As Integer
     
    Range("A1:D1").ColumnWidth = 20
    Columns("A:D").HorizontalAlignment = xlLeft
     
    x = 1
    NbMod = InputBox("Combien de modules y a-t-il?", "Nombre de modules")
     
    For i = 1 To NbMod
        Cells(x, 1) = "Nom Module " & i & " :"
        NomMod = InputBox("Nom du module " & i & " ?")
        Cells(x, 2) = NomMod
        Cells(x + 1, 1) = "Répétable :"
        Cells(x + 1, 2) = InputBox("Le module " & NomMod & " est-il répétable ?")
        Cells(x + 2, 1) = "Supprimable :"
        Cells(x + 2, 2) = InputBox("Le module " & NomMod & " est-il supprimable ?")
        Cells(x + 3, 1) = "Nombre d'interfaces :"
        NbInterf = InputBox("Combien d'interface y a-t-il dans le module " & NomMod & " ?")
        Cells(x + 3, 2) = NbInterf
        x = x + 4
     
        For j = 1 To NbInterf
            Cells(x, 2) = "Nom Interface " & i & "." & j & " :"
            NomInterf = InputBox("Nom de l'interface " & i & "." & j & " ?")
            Cells(x, 3) = NomInterf
            Cells(x + 1, 2) = "Nombre de surfaces :"
            NbSurf = InputBox("Combien de surfaces y a-t-il dans l'interface " & NomInterf & " ?")
            Cells(x + 1, 3) = NbSurf
            x = x + 2
     
            For k = 1 To NbSurf
                Cells(x, 3) = "Nom Surface " & i & "." & j & "." & k & " :"
                Cells(x, 4) = InputBox("Nom de la surface " & k & " de l'interface " & NomInterf & " ?")
                x = x + 1
            Next
        Next
        x = x + 1
    Next
     
    End Sub

  11. #11
    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
    Alors là, merci BEAUCOUP fring, c'est exactement de ça que j'avais besoin. Je dois bien sûr adapter mais c'est carrément ça le principe !

    Encore merci

+ 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