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

VBA Access Discussion :

Variable dans nom de control


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Par défaut Variable dans nom de control
    Bonjour,

    J'ai une question, certainement encore une fois très simple, à vous soumettre.

    Je crée en ce moment dynamiquement un formulaire avec un certain nombre de Control. Dans le nom je leur attribue un numéro par le biais d'une variable i. Ensuite, lors que l'utilisateur a fini d'utiliser le formulaire, il clique sur un bouton "valider". Je souhaite alors récupérer la valeur de ces controls, or comment utiliser leur nom en utilisant la valeur de i et non pas la lettre de l'alphâbet i?

    Voici mon code, les morceaux qui posent problème sont en gras (ne soyez pas rebutés par l'aspect complexe du code, pour résoudre ce qui pose problème il n'y a pas besoin de comprendre l'ensemble du code).

    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
    Public Function Mise_a_jour_priorites()
    
    Dim db As DAO.Database
    Dim rstT_Tampon2 As DAO.Recordset
    
    Set rstT_Tampon2 = db.OpenRecordset("SELECT * FROM T_Tampon2")
    
    Do While Not rstT_Tampon2.EOF And (i < 100)
        
            
            If (i > 2) And (y = Year(rstT_Tampon2.Fields(5).Value)) And (aff = rstT_Tampon2.Fields(8).Value) And (m = Month(rstT_Tampon2.Fields(5).Value)) Then
            rstT_Tampon2.Fields(12).Value = ctr_priority_i.Value
            
            Else
            
           rstT_Tampon2.Fields(12).Value = ctr_priority(i).Value
            
            j = j + 1
            
            If i = 51 Then
            j = 1
            End If
            
            i = i + 1
            End If
            
            y = ctr_year(i).Value
            aff = ctr_affaire(i).Value
            m = ctr_month(i).Value
    
        rstT_Tampon2.MoveNext
    Loop
    
    End Function
    Ici j'appelle mes controls (cette fonction est utilisée auparavant, lors de la création dynamique du formulaire, par un autre formulaire)

    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
     
    Private Sub M_control(frm As Form, rstT_Tampon2 As DAO.Recordset)
     
    Dim i, j As Long
    Dim haut As Long
    Dim ctr_affaire(1 To 100) As Control
    Dim ctr_month(1 To 100) As Control
    Dim ctr_year(1 To 100) As Control
    Dim ctr_Scenario(1 To 100) As Control
    Dim ctr_priority(1 To 100) As Control
    Dim ctr_quantity(1 To 100) As Control
    Dim ctr_valider As Control
    Dim ctr_nb As Control
    Dim ctr_nb2 As Control
    Dim y, a, m As Long
    Dim aff As String
    Dim gauche, decallage As Long
     
    i = 1
    j = 1
    haut = 1000
    a = 0
    y = 0
    aff = ""
    gauche = 1000
    decallage = 0
     
    rstT_Tampon2.MoveFirst
     
    Do While Not rstT_Tampon2.EOF And (i < 100)
     
            If i > 2 Then
                If y <> Year(rstT_Tampon2.Fields(5).Value) Then
                haut = haut + 300
                End If
            End If
     
            If (i > 2) And (y = Year(rstT_Tampon2.Fields(5).Value)) And (aff = rstT_Tampon2.Fields(8).Value) And (m = Month(rstT_Tampon2.Fields(5).Value)) Then
            ctr_quantity(i - 1).Caption = ctr_quantity(i - 1).Caption + 1
     
            Else
                                                                                      'largeur, hauteur
        Set ctr_affaire(i) = CreateControl(frm.Name, acLabel, , "", "", 500, 500, 1250, 250)
        Set ctr_Scenario(i) = CreateControl(frm.Name, acLabel, , "", "", 500, 500, 600, 250)
        Set ctr_quantity(i) = CreateControl(frm.Name, acLabel, , "", "", 500, 500, 150, 250)
        Set ctr_month(i) = CreateControl(frm.Name, acTextBox, , "", "", 500, 500, 250, 250)
        Set ctr_year(i) = CreateControl(frm.Name, acTextBox, , "", "", 500, 500, 500, 250)
        Set ctr_priority(i) = CreateControl(frm.Name, acComboBox, , "", "", 500, 500, 1000, 250)
     
            ctr_affaire(i).Name = "Affaire_" & i
            ctr_month(i).Name = "Month_" & i
            ctr_year(i).Name = "Year_" & i
            ctr_priority(i).Name = "Priority_" & i
            ctr_Scenario(i).Name = "Scenario_" & i
            ctr_quantity(i).Name = "Quantity_" & i
     
            ctr_affaire(i).Left = 100 + gauche + decallage
            ctr_Scenario(i).Left = 1400 + gauche + decallage
            ctr_quantity(i).Left = 2050 + gauche + decallage
            ctr_month(i).Left = 2450 + gauche + decallage
            ctr_year(i).Left = 2750 + gauche + decallage
            ctr_priority(i).Left = 3300 + gauche + decallage
     
            ctr_affaire(i).Top = haut + j * 300
            ctr_Scenario(i).Top = haut + j * 300
            ctr_quantity(i).Top = haut + j * 300
            ctr_month(i).Top = haut + j * 300
            ctr_year(i).Top = haut + j * 300
            ctr_priority(i).Top = haut + j * 300
     
            ctr_affaire(i).Caption = rstT_Tampon2.Fields(8).Value
            ctr_Scenario(i).Caption = rstT_Tampon2.Fields(6).Value
            ctr_quantity(i).Caption = "1"
     
            ctr_month(i).DefaultValue = Month(rstT_Tampon2.Fields(5).Value)
            ctr_year(i).DefaultValue = Year(rstT_Tampon2.Fields(5).Value)
     
            ctr_priority(i).RowSourceType = "Liste valeurs"
            ctr_priority(i).RowSource = Chr(34) & "Haute" & Chr(34) & ";" & Chr(34) & "Normale" & Chr(34) & ";" & Chr(34) & "Basse" & Chr(34)
            ctr_priority(i).DefaultValue = Chr(34) & "Normale" & Chr(34)
     
            j = j + 1
     
            If i = 51 Then
            j = 1
            decallage = 5000
            haut = 1000
            End If
     
            i = i + 1
            End If
     
            y = Year(rstT_Tampon2.Fields(5).Value)
            aff = rstT_Tampon2.Fields(8).Value
            m = Month(rstT_Tampon2.Fields(5).Value)
     
        rstT_Tampon2.MoveNext
    Loop
     
    Set ctr_valider = CreateControl(frm.Name, acCommandButton, , "", "", 500, 500, 1000, 500)
    ctr_valider.Left = gauche + 10000
    ctr_valider.Top = haut / 2
    ctr_valider.Name = "ctr_valider"
    ctr_valider.Caption = "Valider"
    ctr_valider.OnClick = "=Mise_a_jour_priorites()"
     
    Set ctr_nb = CreateControl(frm.Name, acLabel, , "", "", 500, 500, 500, 250)
    ctr_nb.Name = "ctr_nb"
    ctr_nb.Caption = i
    ctr_nb.Left = gauche
    ctr_nb.Top = haut / 5
    Merci!

  2. #2
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    le code ...
    doit être écrit...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Me.controls("ctr_priority_" & i).Value

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 86
    Par défaut
    Ok... J'ai testé cela, mais access me renvoie le message d'erreur "utilisation incorrecte du mot clé Me".

    Il faut savoir que j'ai du déclarer cette fonction dans un module indépendant afin de pouvoir y accèder en cliquant sur un bouton de commande à partir d'un formulaire créé dynamiquement. Peut être est-ce du à cela, et que je dois spécifier le nom d'un formulaire?

    En effet, cela marche, et voici la réponse pour ceux qui seront confrontés au problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Forms("F_Temp").Controls("Priority_" & i).Value

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

Discussions similaires

  1. variable dans nom de fichier
    Par bernardhoso dans le forum z/OS
    Réponses: 6
    Dernier message: 07/05/2013, 11h15
  2. [Batch] Variable dans nom de variable
    Par vincent magnin dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 17/09/2009, 13h13
  3. SSIS - Variable dans nom fichier destination
    Par edony44 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/10/2007, 09h31
  4. Variable dans Nom d'une Textbox
    Par kristell dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/09/2007, 22h53
  5. Réponses: 7
    Dernier message: 22/02/2006, 17h07

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