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

VB.NET Discussion :

variable public dans une procédure


Sujet :

VB.NET

  1. #1
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut variable public dans une procédure
    Bonsoir,

    j'ai une procédure qui prends plusieurs paramètres et qui est placé dans une boucle à l'ouverture de ma fenêtre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     For index As Integer = 1 To 70 'on part pour 70 lectures de quoi tenir 15 minutes environ
                    synthetise_depart("entrée depuis")
                Next
    et dans cette procédure j'ai une variable déclaré public, qui fluctue constamment : nbr_agents:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub synthetise_depart_ticket(ByVal nature As String)
            '================================================================
            'Debut de l'annonce sonore
            '================================================================
            parole2.SelectVoice("Microsoft Hortense Desktop") 
            parole2.SpeakAsync(nature & " " & nbr_agents )
        End Sub
    Problème c'est que la valeur public qui fluctue, ne bouge pas dans l'annonce sonore de ma procédure, c'est toujours la valeur qui était présente à l'instant ou rentre dans la boucle, et c'est ainsi la même tout le temps d’exécution de la boucle !
    Donc je me demandais quel solution possible ?
    j'ai essayé aussi de passé nbr_agents en paramétre de ma procédure, mais c'est le même résultat !

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonsoir,
    Le variables passé en paramètre sont toujours préfixées par une instruction qui défini sa méthode utilisation.

    ByVal et ByRef. Byval veux dire que la valable est passé par recopie de valeur? Ça permet de retravailler la variable dans le corps de la procédure sens modifier la valeur de la variable passé en amont de procédure.

    Byref la variable est passe par références? Cela veut dire que la variable garde un références à la varible en amont de la procédure. Donc si je modifie la valeur de la variable dans le corps de la procédure je modifie la valeur de la variable en amont.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    Je te remercie pour l'info.
    Mais dans mon cas, il s'agit d'une fonction qui synthétise la voix avec .Speech et donc j'ai modifier la variable public, celle qui sera annoncé sera celle affecté au moment ou le passage se fait dans la boucle ! je ne sais pas si c'est clair

  4. #4
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Bonsoir,

    Si tu veux que ta variable nbr_agents change de valeur alors il faut faire en sorte qu'à chaque passage dans ta boucle cette variable soit incrémentée !
    Il faudrait juste savoir quel est le type retournée de cette variable nbr_agents et à quoi elle corresponds car si c'est une variable qui doit exprimer un laps de temps alors nous ne te proposerons pas la même solution que si c'est une variable qui définie un nombre d'agents (comme son nom pourrait le laisser penser) !!!

    Et pour l'amour de dieu (encore ne fois) postes l'intégralité de ton problème pour qu'on appréhende mieux ton raisonnement ! Cette fameuse variable elle est placée ou par rapport au reste, m'enfin qqch de complet en somme !

    A+

  5. #5
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    oui excuse moi je ne suis pas assez claire, donc voici le code que je vais essayé d'explique le mieux possible :

    Tous d'abord la variable nbr_agents que voici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Public nbr_agents As String = "inconnu"
    cet variable est traité et incrémenté ou pas, dans un 'delegate' qui s’exécute toutes les 5 secondes. (je passe le code car trop long) mais à un moment j'ai donc ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                'on copie le nombre de personnes disponible dans la variable public pour la lecture vocale
                nbr_agents = sp_dispo_du_centre.ToString
    ensuite donc le problème ce situe maintenant. j'ai ma fenêtre qui s'ouvre automatiquement sous certaines conditions et qui exécute la boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For index As Integer = 1 To 70 'on part pour 70 lectures de quoi tenir 15 minutes environ
                    synthetise_depart("entrée depuis", nbr_agents)
                Next
    et donc la procédure Synthetise_depart qui prend en référence la variable public :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub synthetise_depart(ByVal nature As String, ByRef nombres as string)
            '================================================================
            'Debut de l'annonce sonore
            '================================================================
            parole2.SelectVoice("Microsoft Hortense Desktop") 
            parole2.SpeakAsync(nature & " " & nombres )
        End Sub
    voila j’espère avoir était clair !

  6. #6
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    'on copie le nombre de personnes disponible dans la variable public pour la lecture vocale
                nbr_agents = sp_dispo_du_centre.ToString
    A quel endroit est placé cette instruction ???

    Tu n as toujours pas dis ce que tu stock dans cette variable (soit disant incrémentée) : des noms de personnes qui proviennent d un tableau, d une list (of string), ......???
    Car si c un nombre il faudrait serieusement songer a revoir son type et sa valeur lors de l initialisation ("inconnu" n est pas du tout adaptè !!)

  7. #7
    Expert confirmé
    Avatar de wallace1
    Homme Profil pro
    Administrateur systèmes
    Inscrit en
    Octobre 2008
    Messages
    1 966
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Administrateur systèmes
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 966
    Points : 4 005
    Points
    4 005
    Billets dans le blog
    7
    Par défaut
    bref on va pas tourner autour du pot :

    1- tu modifies le type de ta variable en integer
    2- tu initialises cette variable a 0 par exemple
    2- tu incrementes la variable dans ta boucle ou ton timer :

    ex pour ta boucle mais ca veut dire qu elle sera incrementé 70 x donc a adapter selon ton timer je pense !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For index As Integer = 1 To 70 'on part pour 70 lectures de quoi tenir 15 minutes environ
    nbr_agents += 1
                    synthetise_depart("entrée depuis", nbr_agents)
                Next

  8. #8
    Membre actif
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2007
    Messages
    758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Février 2007
    Messages : 758
    Points : 279
    Points
    279
    Par défaut
    oui c'est un nombre, voici le code complet :

    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
    '##################################################################
        '## avec le delegate on affiche dans le bouton disponiblite de main le nombre de sp dispo
        '
        'reste à rajouter la gestion des exceptions
        '##################################################################
        Public Sub nbr_sp_dispo()
            Try
                'on recupére le nom des fichiers dans le dossier presence
                '==================================================================
                Dim Dirlist As New List(Of String) 'list contenant le nom des fichiers 
                Dim request As FtpWebRequest = DirectCast(WebRequest.Create(hote_presence_ftp), FtpWebRequest)
                'on se connecte en ftp
                request.Method = WebRequestMethods.Ftp.ListDirectory
                request.Credentials = New NetworkCredential(identifiant_ftp, passe_ftp)
     
                Dim response As FtpWebResponse = DirectCast(request.GetResponse(), FtpWebResponse)
                Dim responseStream As Stream = response.GetResponseStream
     
                Using reader As New StreamReader(responseStream)
                    Do While reader.Peek <> -1
                        Dirlist.Add(reader.ReadLine)
                    Loop
                End Using
                response.Close()
                '==================================================================
                Dirlist.RemoveRange(0, 2)  'supprime les deux premiers elements car c'est les racines dossier
     
                Dim sp_total_du_centre As Integer = 0 'nbre de sp au total du centre passé en paramétres
                Dim sp_dispo_du_centre As Integer = 0 'nbre de sp disponible du centre passé en paramétres
                Dim client As WebClient = New WebClient
                Dim SPlist As New List(Of String) 'list contenant toutes les personnes
                'on parcours la list qui contient les nom.txt du dossier presence
                For Each fichier_texte As String In Dirlist
                    'on met chaque ligne des fichiers texte dans SPlist
                    SPlist.Add(client.DownloadString(url_presence & fichier_texte))
                Next
                'on parcours la list : SPlist recupéré pour savoir de quel centre il sont et si il sont dispo
                For Each personne As String In SPlist
                    If personne.Contains(nom_caserne) Then
                        sp_total_du_centre += 1 'incrémente le nbr de sp de la caserne de l'application
                        If personne.Contains("disponible") Then
                            sp_dispo_du_centre += 1 'incrémente le nbr de sp disponible
                        End If
                    End If
                Next
                'on affiche le tout sur le bouton de la page principale
                Dim retour As String = sp_dispo_du_centre & "/" & sp_total_du_centre & " disponible"
                Frm_main.Button2.Enabled = True
                If sp_dispo_du_centre = 0 Or sp_dispo_du_centre = 1 Then
                    Frm_main.Button2.BackColor = Color.Red
                    Frm_main.Button2.ForeColor = Color.White
                Else
                    Frm_main.Button2.BackColor = SystemColors.Control
                    Frm_main.Button2.ForeColor = SystemColors.ControlText
                End If
                Frm_main.Button2.Text = retour.ToString 'on affiche le resultat dans le bouton de la page principale
                'on copie la liste de sp dans une list public pour y acceder dans disponibilite.vb
                listDispo = New List(Of String)(SPlist)
                'on copie le nombre de sp disponible dans la variable public pour la lecture vocale
                nbr_agents = sp_dispo_du_centre.ToString
            Catch
                Frm_main.Button2.Enabled = False
                Frm_main.Button2.Text = "Perte réseau"
                Frm_main.Button2.BackColor = SystemColors.Control
                Frm_main.Button2.ForeColor = SystemColors.ControlText
            End Try
        End Sub
    En gros on parcours dans un dossier distant les fichiers texte présent dans un dossier, qui corresponde au nom et a la première lettre du prénom de la personne a l'intérieur de chaque fichier texte on a le prénom le nom ainsi que sont statut (disponible ou absent) ainsi que sa ville d'appartenance.
    on incrémente la variable sp_total_du_centre pour le nombre de personnes de chaque centre et on incrémente sp_dispo_du_centre pour les personnes qui ont le statut disponible.
    Enfin on affiche le nombre dans un bouton auquel on lui ajoute une couleur d’après le nombre, et enfin on copie le nombre de sp disponible dans la variable public nbr_agents

  9. #9
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 904
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 904
    Points : 10 168
    Points
    10 168
    Billets dans le blog
    36
    Par défaut
    Bonjour,

    Je me trompe peut-être, (si c'est cela, n'hésitez pas à corriger), mais cela me semble plus simple de faire une DataTable avec le nom, le prénom et le statut (disponible ou pas), et la Caserne si tu en as vraiment besoin au lieu d'une série de listes.

    Une série de boucles imbriquées pour remplir la table et Bingo !

    Ensuite, tu interroges la DataTable et tu choisis la portion des données dont tu as besoin. Tu interroges "un endroit central" au lieu de te promener au travers de je ne sais pas trop combien de listes que tu modifies à tout bout de champ.
    À ma connaissance, le seul personnage qui a été diagnostiqué comme étant allergique au mot effort. c'est Gaston Lagaffe.

    Ô Saint Excel, Grand Dieu de l'Inutile.

    Excel n'a jamais été, n'est pas et ne sera jamais un SGBD, c'est pour cela que Excel s'appelle Excel et ne s'appelle pas Access junior.

Discussions similaires

  1. [2012] Variables complexes dans une procédure stockée
    Par djelloharmel dans le forum Développement
    Réponses: 16
    Dernier message: 25/09/2015, 12h11
  2. [AC-2010] Utiliser une variable public dans une macro
    Par ptitga dans le forum Contribuez
    Réponses: 2
    Dernier message: 28/03/2014, 11h37
  3. Réponses: 7
    Dernier message: 22/04/2008, 16h40
  4. Réponses: 11
    Dernier message: 08/02/2006, 16h59
  5. Réponses: 9
    Dernier message: 31/01/2006, 09h04

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