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 :

Calculer le nombre d'occurrences des extrêmes dans un tableau [AC-2010]


Sujet :

VBA Access

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut Calculer le nombre d'occurrences des extrêmes dans un tableau
    Bonjour,

    J'ai un exercice à résoudre dont l'énoncé est le suivant :

    Ecrivez un programme qui :
    - demande à l'utilisateur combien de valeurs (de type entier) il veut saisir ;
    - saisit ces valeurs en les stockant dans un tableau ;
    - recherche et affiche le nombre d'occurrences des valeurs minimales et maximales du tableau

    Par exemple, si l'utilisateur saisit les valeurs suivantes :
    3 9 5 3 4 6 9 3 7 3

    Le programme devra afficher :
    "Le minimum est 3 (4 occurrences) et le maximum est 9 (2 occurrences).

    J'ai commencé un code mais il y a plusieurs problèmes :
    - le programme ne se termine pas quand je tape "-1"
    - les chiffres que je rentre ne sont pas pris en compte
    - je n'arrive pas à avoir une solution satisfaisante

    Est-ce que quelqu'un peut m'aider à ce niveau ?

    Merci par avance pour votre aide précieuse !!!!

    Voici le code que j'ai réalisé :

    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
    Module Module1
     
        Function valeurMinimum(ByVal tab() As Integer, ByVal nbvaleurs As Integer)
            Dim minimum = tab(0), i As Integer
            For i = 1 To nbvaleurs - 1
                If tab(i) < minimum Then minimum = tab(i)
            Next
            valeurMinimum = minimum
        End Function
     
        Function valeurMaximum(ByVal tab() As Integer, ByVal nbvaleurs As Integer)
            Dim maximum = tab(0), i As Integer
            For i = 1 To nbvaleurs - 1
                If tab(i) > maximum Then maximum = tab(i)
            Next
            valeurMaximum = maximum
        End Function
        Function GetNbreOcurMin(ByVal Str As String, ByVal valminimum As String) As Integer
            Dim position, nbreOcurMin As Integer
            Dim tableau(10) As Integer
            nbreOcurMin = 0
            valminimum = valeurMinimum(tableau, 10)
            position = Str.IndexOf(valminimum)
            Do
                nbreOcurMin += 1
                position = Str.IndexOf(valminimum, position + valminimum.Length)
            Loop Until position = -1
            Return nbreOcurMin
        End Function
     
        Function GetNbreOcurMax(ByVal Str As String, ByVal valmaximum As String) As Integer
            Dim position, nbreOcurMax As Integer
            Dim tableau(10) As Integer
            nbreOcurMax = 0
            valmaximum = valeurMaximum(tableau, 10)
            position = Str.IndexOf(valmaximum)
            Do
                nbreOcurMax += 1
                position = Str.IndexOf(valmaximum, position + valmaximum.Length)
            Loop Until position = -1
            Return nbreOcurMax
        End Function
     
     
        Sub Main()
            Dim i, tableau(10) As Integer, minimum As String, maximum As String, nbreOcurMin As String, nbreOcurMax As String
            Dim valeur_saisie, nbvaleurs As Integer
            For i = 0 To 9
                Do
                    valeur_saisie = InputBox("Entrer les valeurs du tableau, -1 pour terminer")
                    If valeur_saisie <> -1 Then
                        tableau(i) = tableau(i) + valeur_saisie
                        nbvaleurs = nbvaleurs + 1
                    End If
                Loop Until valeur_saisie = -1
                System.Console.WriteLine(tableau(i))
            Next
            minimum = valeurMinimum(tableau, 10)
            maximum = valeurMaximum(tableau, 10)
            nbreOcurMin = GetNbreOcurMin(tableau(i), minimum)
            nbreOcurMax = GetNbreOcurMax(tableau(i), maximum)
            System.Console.WriteLine("Le minimum est" & minimum & "(occurrences)" & nbreOcurMin & "et le maximum est" & maximum & "(occurrences)" & nbreOcurMax)
     
        End Sub
    End Module

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 416
    Par défaut
    Si je ne me trompe pas tu as un problème dans la boucle de saisie.

    Je tenterai cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    valeur_saisie=0
     
    dim i as integer:do while i<10 and valeur_saisie<>-1
     
       valeur_saisie = InputBox("Entrer les valeurs du tableau, -1 pour terminer")
     
       If valeur_saisie <> -1 Then
           tableau(i) = valeur_saisie
           nbvaleurs = nbvaleurs + 1
       End If
     
       i=i+1
    loop
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Merci pour ta réponse, le problème de la boucle est effectivement résolu mais maintenant, le programme tourne sans donner aucun résultat. J'ai l'impression qu'il tourne dans le vide...

  4. #4
    Membre Expert Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 909
    Par défaut
    Bonjour,
    Il y a quelque chose que je ne saisit pas.
    Pourquoi n'utilises-tu pas les fonctionnalités d'Access pour ce genre de choses ?

    Par exemple, tu boucles ton message jusqu'à ne plus avoir de valeur (-1).
    Chaque valeur est stockée dans une table d'Access.

    Pour obtenir la valeur min, c'est un DMin et la valeur max, un DMax.
    Pour connaitre le nombre de fois qu'ils apparaissent, il te suffit de faire un DCount avec la condition DMin et DMax.

    C'est une simple idée mais quitte à travailler sous Access, autant exploiter ses fonctionnalité, non ?

  5. #5
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 891
    Par défaut
    Bonjour PinkLady,

    Pour répondre à:
    Ecrivez un programme qui :
    - demande à l'utilisateur combien de valeurs (de type entier) il veut saisir ;
    - saisit ces valeurs en les stockant dans un tableau ;
    - recherche et affiche le nombre d'occurrences des valeurs minimales et maximales du tableau
    Je crois 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
    19
    20
    21
    22
    Private Sub btnTableau_Click()
     
        Dim vaTableau As Variant
        Dim intTableau As Integer, i As Integer, intResult As Integer, intQ As Integer
     
        intTableau = InputBox("Combien d'occurences?") 'Pour répondre à la première demande de ton travail
        vaTableau = InputBox("Saisir les nombres.")  'Pour répondre à la deuxième demande de ton travail
        vaTableau = Split(vaTableau)
        'Première valeur
        intResult = vaTableau(0)
        intQ = 1
        'Pour répondre à la valeur maximale
        For i = 1 To intTableau - 1
        If vaTableau(i) = intResult Then: intQ = intQ + 1
        If vaTableau(i) > intResult Then
            intResult = vaTableau(i)
            intQ = 1
        End If
        Next i
        MsgBox "La plus grande valeur est : " & intResult & " et elle apparait " & intQ & " fois.", vbExclamation
     
    End Sub
    Naturellement il faudrait ajouter certains test sur le retour des inputbox "bouton annuler", "Bon nombre d'occurences" etc.. À adapter selon tes besoins.

    Bonne journée

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Bonjour,
    Merci pour vos réponses !
    A Gado2600 : Je n'ai pas utilisé les fonctionnalités Access car cet exercice doit être fait dans le cadre d'une formation et nous n'avons pas encore abordé ces points dans le cours...
    A Robert1957 : Merci pour le code cela me donne quelques pistes. Cependant cela ne répond pas tout à fait à l'énoncé...
    Je continue à travailler dessus !
    Bonne journée

  7. #7
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 891
    Par défaut
    Bonjour PinkLady,

    Ce que je voulais te montrer c'est un peu ce que Gado2600 te disais, il y a moyen de faire plus simple. Pour mon code pour qu'il te donne exactement ce que tu veux:
    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
    Private Sub btnTableau_Click()
     
        Dim vaTableau As Variant
        Dim intTableau As Integer, i As Integer, intResult As Integer, intQ As Integer, intResultM As Integer, intQM As Integer
     
        intTableau = InputBox("Combien d'occurences?") 'Pour répondre à la première demande de ton travail
        vaTableau = InputBox("Saisir les nombres.")  'Pour répondre à la deuxième demande de ton travail
        vaTableau = Split(vaTableau)
        intResult = vaTableau(0)
        intResultM = vaTableau(0)
        intQ = 1
        intQM = 1
        'Pour répondre à l'occurence maximale
        For i = 1 To intTableau - 1
        If vaTableau(i) = intResult Then: intQ = intQ + 1
        If vaTableau(i) > intResult Then
            intResult = vaTableau(i)
            intQ = 1
        End If
        If vaTableau(i) = intResultM Then: intQM = intQM + 1
        If vaTableau(i) < intResultM Then
            intResultM = vaTableau(i)
            intQM = 1
        End If
        Next i
        MsgBox "Le minimum est " & intResultM & " (" & intQM & " occurrences) et le maximum est " & intResult & " (" & intQ & " occurences).", vbInformation
     
    End Sub
    De plus si on voulais être vraiment clean, il faudrait vérifier si l'utilisateur inscrit 10 comme nombres d’occurrences est qu'il en a inscrit 10 dans le inputbox.

    Dans la réalité il n'est pas nécessaire de tenir compte de la première ligne de ta demande en se servant de la fonction UBound. Donc si tu veux parcourir un tableau et que tu ne connais pas la limite supérieur du tableau la boucle s'écrirait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For i = 1 To UBound(vaTableau)
    Bonne journée

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Merci beaucoup mais en fait ce qui m'a un peu perturbé c'est qu'on ne connait pas le nombre d'occurrences au début. C'est une fois que les valeurs ont été intégrées au tableau, et une fois les valeurs extrêmes du tableau identifiées que le programme doit calculer le nombre d'occurrences de celles-ci.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Le premier inputbax me donne l'impression de définir au préalable le nombre d'occurrences

  10. #10
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 891
    Par défaut
    Bonjour PinkLady,

    Le premier inputbax me donne l'impression de définir au préalable le nombre d'occurrences
    Oui c'est ce que tu demandais ici
    - demande à l'utilisateur combien de valeurs (de type entier) il veut saisir ;
    Si tu ne veux pas définir le tableau tu n'as qu'à utiliser UBond pour faire ce que tu veux.

  11. #11
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Bonjour,

    Merci Robert1957 pour ta réponse.
    J'ai tenté d'ajouter la partie pour calculer le minimum mais elle ne fonctionne pas, elle me retourne 0 quoi qu'il arrive.

    Voici le code :

    Module Module1

    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
    Sub main()
            Dim vaTableau As Object
            Dim intTableau As Integer, i As Integer, intResult As Integer, intResultMax As Integer, intResultMin As Integer, intQ As Integer, intQMax As Integer, intQMin As Integer
     
            intTableau = InputBox("Combien de nombres entiers ?") 'Pour répondre à la première demande de ton travail
            vaTableau = InputBox("Saisir les nombres.")  'Pour répondre à la deuxième demande de ton travail
            vaTableau = Split(vaTableau)
            'Première valeur
            intResult = vaTableau(0)
            intQ = 1
            'Pour répondre à la valeur maximale
            For i = 1 To intTableau - 1
                If vaTableau(i) = intResultMax Then : intQMax = intQ + 1
                ElseIf vaTableau(i) > intResultMax Then
                    intResultMax = vaTableau(i)
                    intQMax = 1
                End If
            Next i
            For i = 1 To intTableau - 1
                If vaTableau(i) = intResultMin Then : intQMin = intQ + 1
                ElseIf vaTableau(i) < intResultMin Then
                    intResultMin = vaTableau(i)
                    intQMin = 1
                End If
            Next
            MsgBox("Le maximum est : " & intResultMax & "(" & intQMax & "occurences)" & "le minimum est :" & intResultMin & "(" & intQMin & "occurrences)", vbExclamation)
     
        End Sub
     
    End Module
    Merci beaucoup et bonne journée !

  12. #12
    Membre Expert
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Octobre 2012
    Messages
    1 891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2012
    Messages : 1 891
    Par défaut
    Bonjour PinkLady,

    C'est parce qu'il y a quelques petites erreurs dans ton code, le voici corrigé:
    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
    Sub main()
        Dim vaTableau As Variant
        Dim intTableau As Integer, i As Integer, intResultMin As Integer, intQMin As Integer, intResultMax As Integer, intQMax As Integer
     
        intTableau = InputBox("Combien d'occurences?") 'Pour répondre à la première demande de ton travail
        vaTableau = InputBox("Saisir les nombres.")  'Pour répondre à la deuxième demande de ton travail
        vaTableau = Split(vaTableau)
        'Occurence min et maxi de base
        intResultMax = vaTableau(0)
        intResultMin = vaTableau(0)
        intQMax = 1
        intQMin = 1
        'Pour répondre à l'occurence maximale
        For i = 1 To intTableau - 1
        If vaTableau(i) = intResultMax Then: intQMax = intQMax + 1
        If vaTableau(i) > intResultMax Then
            intResultMax = vaTableau(i)
            intQMax = 1
        End If
        'Pour répondre à l'occurence minimum
        If vaTableau(i) = intResultMin Then: intQMin = intQMin + 1
        If vaTableau(i) < intResultMin Then
            intResultMin = vaTableau(i)
            intQMin = 1
        End If
        Next i
        MsgBox "Le minimum est " & intResultMin & " (" & intQMin & " occurrences) et le maximum est " & intResultMax & " (" & intQMax & " occurences).", vbInformation
     
    End Sub
    Bonne journée

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2013
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 15
    Par défaut
    Merci beaucoup !
    Tout marche très bien !
    Bonne journée

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

Discussions similaires

  1. Déterminer le nombre d'occurences des mots dans un fichiers texte
    Par fraisa1985 dans le forum Général Java
    Réponses: 13
    Dernier message: 26/10/2021, 02h58
  2. Compter nombre de répétitions des valeurs dans un tableau
    Par tabrouri2000 dans le forum Collection et Stream
    Réponses: 16
    Dernier message: 21/03/2021, 21h47
  3. Trouver le nombres d'arrangement des intercalaires dans une suite
    Par bizulk dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 20/02/2012, 12h40
  4. [XL-2003] calcule le nombre de ligne non vide dans une colonne donnée
    Par aefmaaradji dans le forum Excel
    Réponses: 2
    Dernier message: 27/07/2010, 16h08
  5. calculer le nombre d'occurence de mot dans une chaine
    Par hadjiphp dans le forum Langage
    Réponses: 8
    Dernier message: 20/04/2009, 12h06

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