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 :

VBA et INTELLIGENCE, VBA est-il aussi fort que l'humain


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    GESTIONNAIRE
    Inscrit en
    Novembre 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : GESTIONNAIRE
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2016
    Messages : 30
    Par défaut VBA et INTELLIGENCE, VBA est-il aussi fort que l'humain
    Bonjour,
    Derrière cet intitulé une question :
    voilà, j'ai une petite BDD que j'affiche dans une listbox d'un Userform selon un critère (voir fichier en pièce jointe et code ci-dessous)
    Dans cet Userform, je souhaite sélectionner certaines lignes pour que la somme des montants en Euros de chaque ligne selectionnée tendent vers la valeur cible.

    Exemple d'une valeur cible de 1000€ saisie dans la textbox1, je parviens à lire ligne par ligne la listbox et donc à ce que vba selectionne les 3 premières lignes car en effet la somme des 3 premières lignes est = à 950€, la 4eme ligne étant de 100€ elle n'est pas selectionnée car en effet on dépasserait la valeur cible.

    L'objectif et c'est là que je sèche serait que VBA prenne toutes les valeurs de la listbox1 et que, un peu à l'instar de l'émission des chiffres et des lettres, il parvienne à additionner las valeurs pour réussir à atteindre la valeur cible ou du moins s'en rapprocher le plus possible.

    Merci d'avance de votre précieuse collaboration.
    Excellente journée

    Alex
    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
    Private Sub CommandButton1_Click()
     
    LISTE
     
    End Sub
     
    Sub LISTE()
    ListBox1.Clear
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim Cpt As Integer
    Dim cpteuros As Double
    Dim MtntSeuil As Double
     
    Sheets("DONNEES").Select ' on selectionne la feuille DONNEES
        With Sheets("DONNEES")
            For i = 2 To .Cells(Rows.Count, 1).End(xlUp).Row
                If Cells(i, "C") = "AR" Then ' on boucle pour inscrire dans la listbox que les lignes de la feuilles où le type est "AR"
                    ListBox1.AddItem .Cells(i, "A"): ListBox1.List(ListBox1.ListCount - 1, 1) = Format(.Cells(i, "B"), "####.00 €"): ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(i, "C")
                End If
            Next
     
        End With
     
     
          For j = 0 To ListBox1.ListCount - 1
                MtntSeuil = MtntSeuil + ListBox1.Column(1, j) ' ici on boucle pour calculer l'addition de chaque ligne jusqu'à atteindre la valeur cible de la textbox1
                If MtntSeuil < TextBox1.Value Then ListBox1.Selected(j) = True Else ListBox1.Selected(j) = False
          Next j
     
     
     
          For k = 0 To ListBox1.ListCount - 1
                If ListBox1.Selected(k) Then Cpt = Cpt + 1 'ici on boucle pour calculer le nombre de lignes selectionnées et calculer le montant que l'on affichera dans les textbox 2 et 3
                If ListBox1.Selected(k) Then cpteuros = cpteuros + ListBox1.Column(1, k)
          Next k
     
    TextBox2.Value = Cpt
    TextBox3.Value = Format(cpteuros, "####.00 €")
     
     
     
     
     
    End Sub
     
     
     
    Private Sub CommandButton2_Click()
    Call fermerformulaire
    End Sub
     
    Private Sub ListBox1_Change()
    Dim k As Integer
    Dim cpteuros As Double
    Dim Cpt As Integer
     
            For k = 0 To ListBox1.ListCount - 1
                If ListBox1.Selected(k) Then Cpt = Cpt + 1 'ici on boucle pour tout changement de selection afin de mettre à jour les textbox2 et 3
                If ListBox1.Selected(k) Then cpteuros = cpteuros + ListBox1.Column(1, k)
            Next k
     
    TextBox2.Value = Cpt
    TextBox3.Value = Format(cpteuros, "####.00 €")
     
    End Sub
     
     
     
    Private Sub TextBox1_AfterUpdate()
    TextBox1.Value = Format(TextBox1.Value, "####.00 €")
    End Sub
     
    Private Sub TextBox1_Change()
    TextBox1.Value = Replace(TextBox1.Value, ".", ",")
     
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    VBA n'est pas "intelligent". VBA se contente d'appliquer les mécanismes de pensée qu'on lui demande (par code) d'appliquer.
    Si ces mécanismes sont "intelligents" -->> succès
    S'ils ne le sont pas --->> échec.
    Les mécanismes, donc, de ta pensée ? --->> il s'expriment par un algorithme . Quel est donc le tien ?

  3. #3
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Citation Envoyé par alexhsh Voir le message
    VBA et INTELLIGENCE, VBA est-il aussi fort que l'humain
    Bonjour, quel titre ‼  

    VBA n'a aucune intelligence car elle doit se situer entre la chaise et le clavier !
    Celle du développeur sans oublier celle de l'utilisateur qui, parfois mal combinées, donne des résultats détonnant …

    A contrario, un code bien pensé, dans les règles de l'art, peut supplanter le manque d'intelligence d'un utilisateur
    ou encore le décharger de tâches fastidieuses redondantes améliorant sa productivité et évitant des erreurs humaines
    afin de lui laisser plus de temps libre pour une pause cigarette, café, smartphone, …
    Même si parfois une manipulation directe dans Excel est pourtant plus efficace, rendant caduque le code !

    Voilà c'est tout ce que m'inspire un tel titre, lire la règle III-D de ce forum …

    Edit : Un complément d'information devrait susciter l'aide espérée.

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  4. #4
    Membre averti
    Homme Profil pro
    GESTIONNAIRE
    Inscrit en
    Novembre 2016
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : GESTIONNAIRE
    Secteur : Transports

    Informations forums :
    Inscription : Novembre 2016
    Messages : 30
    Par défaut
    Bonjour et merci de vos réactions, c'est toujours plaisant de lire des commentaires d'utilisateurs qui ont de l'humour.
    Pour trouver l'aide espérée, je tiens à apporter un peu plus de précision :

    Dans une Listbox, j'affiche une base de données avec notamment une colonne (la 2éme) comprenant des montants en Euros.
    Je souhaiterais que le code puisse sélectionner de façon optimale certaines lignes afin que la somme en Euros des lignes sélectionnées (résultat visible dans la textbox3) soit égale à la valeur cible saisie dans la textbox1 du Userform ou du moins que cette somme se rapproche le plus possible de la valeur cible, ça ne vous rappelle pas l'émission des chiffres et des lettres ?

    Encore une fois, merci de votre aide

Discussions similaires

  1. Réponses: 12
    Dernier message: 04/05/2016, 13h31
  2. Réponses: 31
    Dernier message: 22/04/2014, 14h55
  3. [VBA-E]DatePart ? Quelle est la règle ?
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/05/2010, 12h17
  4. Postgresql est-il aussi fléxible que Mysql ?
    Par kedare dans le forum PostgreSQL
    Réponses: 0
    Dernier message: 09/04/2008, 23h50
  5. Réponses: 1
    Dernier message: 24/09/2007, 09h49

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