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 :

Accès variables dans les codes UF


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 12
    Par défaut Accès variables dans les codes UF
    Bonjour,

    J'ai dans le cadre de mon projet de nombreux UserForm avec du code associé à presque tous les objets présents dessus.
    J'ai parfois besoin pour un code associé à un objet de récupérer les valeurs des variables associées à un autre objet.

    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
    Private Sub AfficherPersonnel_Click()
     
    ListeP.Clear 'On vide la liste pour chaque nouvelle recherche'
     
    Dim varId, idmaj As String
    varId = id_vol.Text 'On r?cup?re dans une cha?ne de caract?re la valeur de l'id entr?e par le client'
    idmaj = UCase(varId) 'On r?cup?re la valeur de l'id en majuscule au cas o? il ait ?t? rentr? en minuscule'
     
    Dim nbvol, idpilote, idcopilote, idchefcabine, idstewarthotesse As Integer
    nbvol = Sheets("vol").Range("vols").Rows.Count 'On r?cup?re le nombre de vol pr?sents dans la feuille des vols'
     
    'On parcourt la liste des vols pour trouver une correspondance avec l'ID entr? par le client et r?cup?rer les id des pilotes, copilotes, chef de cabine'
    For i = 1 To nbvol
    If Sheets("vol").Cells(i + 1, 3) = varId Or Sheets("vol").Cells(i + 1, 3) = idmaj Then 'On teste la correspondance entre une cellule et la valeur choisie par le client'
    idpilote = Sheets("vol").Cells(i + 1, 19)
    idcopilote = Sheets("vol").Cells(i + 1, 20)
    idchefcabine = Sheets("vol").Cells(i + 1, 21)
     
    'On parcout la liste des pilotes, des copilotes et des chefsdecabines pour trouver ceux associ?s au vol'
    Dim nbpilotes, nbcopilotes, nbchefcabine As Integer
    nbpilotes = Sheets("pilote").Range("pilote").Rows.Count
    nbcopilotes = Sheets("copilote").Range("copilote").Rows.Count
    nbchefcabines = Sheets("chefcabine").Range("chefcabine").Rows.Count
     
    'On r?cup?re les informations concernant le pilote'
    For j = 1 To nbpilotes
    If Sheets("pilote").Cells(j + 1, 1) = idpilote Then
    ListeP.AddItem "Pilote : " & Sheets("pilote").Cells(j + 1, 2) & " " & Sheets("pilote").Cells(j + 1, 3)
    End If
    Next j
    'On r?cup?re les informations concernant le copilote'
    For k = 1 To nbcopilotes
    If Sheets("copilote").Cells(k + 1, 1) = idcopilote Then
    ListeP.AddItem "Copilote : " & Sheets("copilote").Cells(k + 1, 2) & " " & Sheets("copilote").Cells(k + 1, 3)
    End If
    Next k
    'On r?cup?re les informations concernant le chefs de cabine'
    For l = 1 To nbchefcabines
    If Sheets("chefcabine").Cells(l + 1, 1) = idchefcabine Then
    ListeP.AddItem "Chef de cabine : " & Sheets("chefcabine").Cells(l + 1, 2) & " " & Sheets("chefcabine").Cells(l + 1, 3)
    End If
    Next l
     
    End If
    Next i
     
    'On parcourt la liste des donn?es de la fiche "assure" pour r?cup?rer les id des stewarthotesses sur le vol'
    Dim nbassure As Integer
    nbassure = Sheets("assure").Range("assure").Rows.Count
    For m = 1 To nbassure
    If Sheets("assure").Cells(m + 1, 2) = idmaj Then
    idstewarthotesse = Sheets("assure").Cells(m + 1, 1)
    MsgBox idstewarthotesse
    'On parcourt ensuite la liste des stewarthotesses pour r?cup?rer les informatiosn concernant les stewarthotesses de ce vol
    Dim nbsh As Integer
    nbsh = Sheets("stewarthotesse").Range("stewarthotesse").Rows.Count
    For n = 1 To nbsh
    If Sheets("stewarthotesse").Cells(n + 1, 1) = idstewarthotesse Then
    ListeP.AddItem "Stewart/Hotesse : " & Sheets("stewarthotesse").Cells(n + 1, 2) & " " & Sheets("stewarthotesse").Cells(n + 1, 3)
    End If
    Next n
     
    End If
    Next m
     
    ListeP.Visible = True 'On affiche la liste'
     
    End Sub
     
    Private Sub CommandButton1_Click()
     
    affichage_vol.Caption = "" 'On vide le label chaque fois qu'une nouvelle recherche est lanc?e'
    ListeP.Clear 'On vide la liste pour chaque nouvelle recherche'
     
    Dim varId, idmaj As String
    varId = id_vol.Text 'On r?cup?re dans une cha?ne de caract?re la valeur de l'id entr?e par le client'
    idmaj = UCase(varId) 'On r?cup?re la valeur de l'id en majuscule au cas o? il ait ?t? rentr? en minuscule'
     
    Dim nbvol As Integer
    nbvol = Sheets("vol").Range("vols").Rows.Count 'On r?cup?re le nombre de vol pr?sents dans la feuille des vols'
     
    'On parcourt la liste des vols pour trouver une correspondance avec l'ID entr? par le client'
    For i = 1 To nbvol
    If Sheets("vol").Cells(i + 1, 3) = varId Or Sheets("vol").Cells(i + 1, 3) = idmaj Then 'On teste la correspondance entre une cellule et la valeur choisie par le client'
    affichage_vol.Caption = "Vol : " & Sheets("vol").Cells(i + 1, 3) & " D?part : " & Sheets("vol").Cells(i + 1, 16) & " Arriv?e : " & Sheets("vol").Cells(i + 1, 17) & " Date : " & Sheets("vol").Cells(i + 1, 5) 'Affichage des caract?ristiques du vol'
    affichage_vol.Visible = True
    AfficherPassagers.Visible = True
    AfficherPersonnel.Visible = True
    Exit For 'On quitte la boucle For, on a bien affich? le vol recherch?'
    End If
    Next i
     
    'id_vol.Text = "" 'On vide la zone de texte chaque fois qu'une nouvelle recherche est lanc?e'
     
    End Sub
     
    Private Sub UserForm_Initialize()
     
    affichage_vol.Visible = False 'cache le label tant que rien n'a ?t? tap? par le client'
    AfficherPassagers.Visible = False
    AfficherPersonnel.Visible = False
    ListeP.Visible = False
     
    End Sub
    Ici par exemple c'est le cas ENTRE AUTRES de nbvol.

    Pouvez-me donner la façon la plus habituelle et logique de récupérer cette variable d'un code objet à l'autre car il me paraît très lourd de redéclarer à chaque fois la variable.

    D'avance merci

  2. #2
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut

    Il s'agit de la portée de ta variable qui n'est pas bonne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private NbrDepart As Integer 'Portée global, accessible dans tout le module(ou UserForm) mais pas à l'extérieur de celui-ci
    Public NbrAvion As Integer 'Portée global, accessible dans tout le module(ou UserForm) et aussi à l'extérieur de celui-ci
    Sub MaSub1()
        Dim NbrVol As Integer 'Porté local, valable uniquement dans MaSub1
        NbrAvion = 45
    End Sub
     
    Sub MaSub2()
    Dim NbrAvionsLocal As Integer
     
        NbrAvionsLocal = NbrAvion
    End Sub
    Quelques conseils
    • il est préférable de déclarer le nom du classeur et de la feuille sur laquelle tu travailles
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      Range("A1"). Value excel le traduit par classeurActif.FeuilleActive.range("A1")
      'Il vaut mieux 
      ThisWorkbook.Sheet("NomOnglet").range...
      'Tu peux alléger le code 
      With ThisWorkbook.Sheet("NomOnglet")
          .range("A1").Value = "jhgfjsh"
         .range("A5").Value  =.....
      End With
      Ou utuiliser le codeName de la feuille, il apparait dans l'Explorateur de projet sous VBE, raccourci Ctrl+R. Le CodeName apparait entre parenthèse à coté du nom de la feuille.
      Feuil1.range(...)...
      Nom : 2015-01-18_134906.png
Affichages : 115
Taille : 14,2 KoLe (Name) correspond au codeName de la feuille, sa porté est globale, il est accessible de partout dans CE classeur.
    • L'indentation du code est importante pour la lecture et la compréhension de celui-ci
      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
      Private Sub AfficherPersonnel_Click()
       
          ListeP.Clear                                 'On vide la liste pour chaque nouvelle recherche'
       
          Dim varId, idmaj As String
          varId = id_vol.Text                          'On r?cup?re dans une cha?ne de caract?re la valeur de l'id entr?e par le client'
          idmaj = UCase(varId)                         'On r?cup?re la valeur de l'id en majuscule au cas o? il ait ?t? rentr? en minuscule'
       
          Dim nbvol, idpilote, idcopilote, idchefcabine, idstewarthotesse As Integer
          nbvol = Sheets("vol").Range("vols").Rows.Count 'On r?cup?re le nombre de vol pr?sents dans la feuille des vols'
       
          'On parcourt la liste des vols pour trouver une correspondance avec l'ID entr? par le client et r?cup?rer les id des pilotes, copilotes, chef de cabine'
          For i = 1 To nbvol
              If Sheets("vol").Cells(i + 1, 3) = varId Or Sheets("vol").Cells(i + 1, 3) = idmaj Then 'On teste la correspondance entre une cellule et la valeur choisie par le client'
                  idpilote = Sheets("vol").Cells(i + 1, 19)
                  idcopilote = Sheets("vol").Cells(i + 1, 20)
                  idchefcabine = Sheets("vol").Cells(i + 1, 21)
       
                  'On parcout la liste des pilotes, des copilotes et des chefsdecabines pour trouver ceux associ?s au vol'
                  Dim nbpilotes, nbcopilotes, nbchefcabine As Integer
                  nbpilotes = Sheets("pilote").Range("pilote").Rows.Count
                  nbcopilotes = Sheets("copilote").Range("copilote").Rows.Count
                  nbchefcabines = Sheets("chefcabine").Range("chefcabine").Rows.Count
       
                  'On r?cup?re les informations concernant le pilote'
                  For j = 1 To nbpilotes
                      If Sheets("pilote").Cells(j + 1, 1) = idpilote Then
                          ListeP.AddItem "Pilote : " & Sheets("pilote").Cells(j + 1, 2) & " " & Sheets("pilote").Cells(j + 1, 3)
                      End If
                  Next j
                  'On r?cup?re les informations concernant le copilote'
                  For k = 1 To nbcopilotes
                      If Sheets("copilote").Cells(k + 1, 1) = idcopilote Then
                          ListeP.AddItem "Copilote : " & Sheets("copilote").Cells(k + 1, 2) & " " & Sheets("copilote").Cells(k + 1, 3)
                      End If
                  Next k
                  'On r?cup?re les informations concernant le chefs de cabine'
                  For l = 1 To nbchefcabines
                      If Sheets("chefcabine").Cells(l + 1, 1) = idchefcabine Then
                          ListeP.AddItem "Chef de cabine : " & Sheets("chefcabine").Cells(l + 1, 2) & " " & Sheets("chefcabine").Cells(l + 1, 3)
                      End If
                  Next l
       
              End If
          Next i
       
          'On parcourt la liste des donn?es de la fiche "assure" pour r?cup?rer les id des stewarthotesses sur le vol'
          Dim nbassure As Integer
          nbassure = Sheets("assure").Range("assure").Rows.Count
          For m = 1 To nbassure
              If Sheets("assure").Cells(m + 1, 2) = idmaj Then
                  idstewarthotesse = Sheets("assure").Cells(m + 1, 1)
                  MsgBox idstewarthotesse
                  'On parcourt ensuite la liste des stewarthotesses pour r?cup?rer les informatiosn concernant les stewarthotesses de ce vol
                  Dim nbsh As Integer
                  nbsh = Sheets("stewarthotesse").Range("stewarthotesse").Rows.Count
                  For n = 1 To nbsh
                      If Sheets("stewarthotesse").Cells(n + 1, 1) = idstewarthotesse Then
                          ListeP.AddItem "Stewart/Hotesse : " & Sheets("stewarthotesse").Cells(n + 1, 2) & " " & Sheets("stewarthotesse").Cells(n + 1, 3)
                      End If
                  Next n
       
              End If
          Next m
       
          ListeP.Visible = True                        'On affiche la liste'
       
      End Sub
       
      Private Sub CommandButton1_Click()
       
          affichage_vol.Caption = ""                   'On vide le label chaque fois qu'une nouvelle recherche est lanc?e'
          ListeP.Clear                                 'On vide la liste pour chaque nouvelle recherche'
       
          Dim varId, idmaj As String
          varId = id_vol.Text                          'On r?cup?re dans une cha?ne de caract?re la valeur de l'id entr?e par le client'
          idmaj = UCase(varId)                         'On r?cup?re la valeur de l'id en majuscule au cas o? il ait ?t? rentr? en minuscule'
       
          Dim nbvol As Integer
          nbvol = Sheets("vol").Range("vols").Rows.Count 'On r?cup?re le nombre de vol pr?sents dans la feuille des vols'
       
          'On parcourt la liste des vols pour trouver une correspondance avec l'ID entr? par le client'
          For i = 1 To nbvol
              If Sheets("vol").Cells(i + 1, 3) = varId Or Sheets("vol").Cells(i + 1, 3) = idmaj Then 'On teste la correspondance entre une cellule et la valeur choisie par le client'
                  affichage_vol.Caption = "Vol : " & Sheets("vol").Cells(i + 1, 3) & " D?part : " & Sheets("vol").Cells(i + 1, 16) & " Arriv?e : " & Sheets("vol").Cells(i + 1, 17) & " Date : " & Sheets("vol").Cells(i + 1, 5) 'Affichage des caract?ristiques du vol'
                  affichage_vol.Visible = True
                  AfficherPassagers.Visible = True
                  AfficherPersonnel.Visible = True
                  Exit For                             'On quitte la boucle For, on a bien affich? le vol recherch?'
              End If
          Next i
       
          'id_vol.Text = "" 'On vide la zone de texte chaque fois qu'une nouvelle recherche est lanc?e'
       
      End Sub
       
      Private Sub UserForm_Initialize()
       
          affichage_vol.Visible = False                'cache le label tant que rien n'a ?t? tap? par le client'
          AfficherPassagers.Visible = False
          AfficherPersonnel.Visible = False
          ListeP.Visible = False
       
      End Sub
    • Tu devrais regarder dans la section contribution du forum, tu y trouveras des piste pour facilité la communication entre les donnée et un UserForm, à minima Pierre Fauconnier et moi-même avons posté des sujets qui traitent de cela.


    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2019
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 26
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2019
    Messages : 12
    Par défaut
    Bonjour, d'accord merci !

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

Discussions similaires

  1. Accès aux variables dans les fichiers de route
    Par loudo dans le forum NodeJS
    Réponses: 6
    Dernier message: 08/03/2015, 18h45
  2. Mettre les données d'une variable dans un code.
    Par chenel80 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 19/06/2008, 13h45
  3. [Question] Doit-on traduire les noms de variables dans le code?
    Par r0d dans le forum Traduction Penser en C++
    Réponses: 4
    Dernier message: 21/02/2007, 20h54
  4. [vb.net] utilisation d'une variable dans le code
    Par arnolem dans le forum Windows Forms
    Réponses: 9
    Dernier message: 30/09/2005, 19h22
  5. [VB.NET] [Débutant] Probléme de variable dans les requettes
    Par Silvia12 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/03/2005, 13h13

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