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 dynamique de variables objet


Sujet :

Macros et VBA Excel

  1. #1
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut Création dynamique de variables objet
    Bonjour,
    Je souhaiterai à partir des noms contenus dans une série de cellules faire une boucle afin de définir des variables objets (range).


    Voici une partie des cellules qui donnera le nom des variables.
    A1= immat, b1= genre, c1= carrosserie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    For i = 1 To 3
    MsgBox Evaluate(Cells(1, i).Address).Value
     
    Set Evaluate(Cells(1, i).Address).Value = Cells(1, i).EntireColumn
    ' soit l'équivalent de 
    ' set immat = Cells(1, i).EntireColumn
    next i
    Est ce possible ?

  2. #2
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut Oliv- et le forum
    Je ne comprend pas ce que tu veux faire ?!!?
    Si tu veux définir le nom de tes variables par du code, je ne pense pas que ce soit faisable, et surtout, quel intéret ?

    Explique le but, pas la manière, le but que tu veux atteindre et on trouvera une manière de le faire

    A+

  3. #3
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Salut GORFAEL,

    dans le cas qui m'occupe j'ai 15 variables à définir par le bloc suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Col_Immat:
            Set Col_Immat = Application.InputBox(prompt:="Sélectionner avec la souris le FICHIER et la COLONNE ou se trouve l' IMMAT" _
                                                         & vbCr & Texterreur, Title:="Désignation des colonnes", Type:=8)
            If Col_Immat Is Nothing Then MsgBox "Boîte de dialoque annuler": Exit Sub
            If Col_Immat.Columns.Count <> 1 Then
                Texterreur = "##Veuillez selectionner 1 seule colonne ! ##'"
                GoTo Col_Immat
            Else
                Texterreur = ""
            End If
    Comme j'ai les noms ( Col_Immat,...) des varaibles qui sont contenues dans une feuille et

    plutot que d'avoir 15 blocs dans mon code je souhaite avoir une boucle qui va créer dynamiquement ces 15 variables.

    C'est simplement pour alléger mon code et surtout pour savoir si c'est possible comme ca l'est dans une requette SQL

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

    Informations professionnelles :
    Activité : Engineering

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

    Une possibilité qui pourrait peut-être convenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim Var(1 To 15) As String, i As Byte, Result As String
     
    For i = 1 To 15
        Var(i) = "test " & i
    Next
     
    For i = 1 To 15
        Result = Result & Chr(10) & Var(i)
    Next
     
    MsgBox Result
    End Sub

  5. #5
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Merci fring, mais ce sont des variables objet.

  6. #6
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut à tous
    Oliv, ce que te présente fring n'est qu'un exemple de variable tableau à une dimension. Pour démontrer son exemple, il a pris du texte, mais tu peux déclarer ton tableau en varibles range, sheet ou WorkBokk.
    A+

  7. #7
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Deux choses que tu peux faire mais je n'ai rien compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        blabla = 25
        MsgBox Evaluate(blabla)
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test2()
    Dim blabla As Variant
        blabla = Range("A1:A25").Value
        For Each Cell In blabla
            MsgBox Cell
        Next
    End Sub
    Bonne soirée

    NB - Ça fonctionne également avec Dim blabla As Range (!?!) et là je ne comprends pas...

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

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Un petit test peut-être plus explicite (je ne me suis pas occupé des gestions d'erreurs)
    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
    Sub test()
    Dim Var(1 To 5) As Range, i As Byte, Result As String
     
    MsgBox "Vous allez devoir faire 5 sélections"
     
    For i = 1 To 5
        Set Var(i) = Application.InputBox(prompt:="Selection " & i & Chr(10) & "Sélectionner avec la souris une cellule dans la colonne de votre choix", Title:="Désignation des colonnes", Type:=8)
    Next
     
    For i = 1 To 5 'boucle séparée pour vérifier que les variables Var(i) ont bien été initialisées
        Result = Result & Chr(10) & "Var" & i & " = colonne " & Var(i).Column
    Next
     
    MsgBox Result
     
    End Sub

  9. #9
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    C'est ça, on commente les propositions de ses petits camarades
    Un truc peut-être moins explicite mais pas moins compris...
    Si tu veux les valeurs de chaque cellule de tes cinq sélections, alors c'est un tableau de variant qu'il te faut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub test()
    Dim Var(1 To 5) As Variant, i As Byte, Cell as variant
     
        For i = 1 To 5
            Var(i) = Application.InputBox("Selection " & i & Chr(10) & _
            "Sélectionner avec la souris une cellule dans la colonne de votre choix", _
            "Désignation des colonnes", Type:=8).Value
        Next
        For i = 1 To 5
            For Each Cell In Var(i)
                MsgBox Cell
            Next
        Next
    End Sub

  10. #10
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonjour à tous et merci de votre intérêt pour le sujet.

    En fait je voudrais avoir des variables qui se nomment comme mes noms de colonnes pour plus de clarté dans le code après.


    donc c'est le nom de la variable que je veux créer dynamiquement.

    J'avais pensé a un truc comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set Evaluate("a1") = Columns("c:c")
    ou
     
    Set Application.ExecuteExcel4Macro("get.cell(""A1"")") = Columns("c:c")
    Mais je crains que ce ne soit possible sauf à créer dynamiquement la macro entière avec ActiveWorkbook.VBProject...

  11. #11
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    Et un truc comme ça, ça ne t'irait pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub test()
    Dim Collect As New Collection
    Dim adres As Range, i as integer
        For i = 1 To 10
            Set adres = Columns(i)
            Collect.Add "" & i, adres.Address
        Next
     
        'n'oublie pas de décharger la collection en sortie
        For i = Collect.Count To 1 Step -1
            Collect.Remove i
        Next
    End Sub
    A tout hasard et parce que j'avais un trou

  12. #12
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Ah oui c'est pas mal du tout cela mais comme cela alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            For i = 1 To 10
            Set adres = Columns(i)
            Collect.Add adres, Cells(1, i).Value
        Next
     
        MsgBox Collect.item("Col_Immat").Text
        Collect.item("Col_Immat").Select
    Ca semble parfait merci beaucoup !!

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

Discussions similaires

  1. [XL-2010] Création dynamique de variables
    Par laguernette dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 01/11/2013, 20h43
  2. Déclaration dynamique de variables objets
    Par Anduriel dans le forum Langage
    Réponses: 7
    Dernier message: 04/08/2013, 15h28
  3. [JSTL] Création dynamique de variables
    Par delpiero07 dans le forum Taglibs
    Réponses: 4
    Dernier message: 07/07/2008, 18h15
  4. [POO] Création dynamique de variables de classe
    Par Philoulheinz dans le forum Langage
    Réponses: 2
    Dernier message: 24/03/2007, 15h38
  5. [Reflexivite]création dynamique d'objet et Héritage
    Par norkius dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 26/10/2004, 11h37

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