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

Algorithmes et structures de données Discussion :

Algorithme de regroupement en fonction de chaine


Sujet :

Algorithmes et structures de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 20
    Points : 14
    Points
    14
    Par défaut Algorithme de regroupement en fonction de chaine
    Bonjour

    J'ai actuellement un tableau de 15000x43 dans lequel je dois regrouper des sommes en fonction d'un String (qui est chez moi un fournisseur).
    J'ai essayé de produire quelques algorithmes dont voici les codes, mais en vba :
    Code vba : 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 test()
     
    '9 correspond à la colonne du fournisseur
    '29 à leur prix
     
    Dim continuer As Boolean
    Dim x As Integer
     
    c = 1
    position = 0
    ReDim tab_four(c)
      'parcourt la liste de fournisseurs
      For i = 2 To UBound(tab_val, 2)
        'si le fournisseur selectionné est différent du suivant
        If tab_val(i, 9) <> tab_val(i + 1, 9) Then
            'on vérifie qu'il n'est pas dans le tableau
            For x = 0 To UBound(tab_four)
                If tab_val(i, 9) = tab_four(x) Then
                    continuer = False
                    'somme d'un fournisseur
                    tab_somme(x) = tab_somme(x) + tab_val(i, 29)
                Else:
                    tab_four(x) = tab_val(i, 9)
                    tab_somme(x) = tab_somme(x) + tab_val(i, 29)
                End If
            Next x
            'redimensionnement du tableau
            ReDim Preserve tab_four(x)
        End If
    Next i

    Le problème avec celui ci étant qu'au fur et a mesure qu'on sélectionne un fournisseur, les sommes s'additionnent n'importe comment

    Le second est encore moins bon :
    Code vba : 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
    Sub Calcul_TTC()
     
        Dim x As Variant
        Dim u As Variant
     
        Dim test As Boolean
        x = 0
        u = 0
     
        'Deux problèmes dans cet algo :
        'Si élément déjà dans une tab_four alors addition ne se fera jamaiss
        'Si élément pas pareil que celui à la position i il s'ajoutera plusieurs fois dans le tableau
     
     
        'parcourt tous les éléments de la colonne
        For i = 0 To UBound(tab_val, 2)
     
            test = False
            'ReDim Preserve tab_four()
            'verifie si un élément n'est pas déjà dans le tableau
            For Z = 0 To UBound(tab_four, 1)
                If tab_val(i, 9) = tab_four(Z) Then
                    test = False
                End If
            Next Z
            If test = True Then
                'Si élément pas encore dans le tableau
                'Si élément différent de celui d'après alors on l'ajoute dans le tableau
                For l = 2 To UBound(tab_val)
                    If tab_val(i, 9) <> tab_val(u, 9) Then
                        tab_four(x) = tab_val(u, 9)
                        x = x + 1
                        u = u + 1
                    Else
                        tab_somme(i) = tab_somme(i) + tab_val(u, 29)
                    End If
                Next l
            End If
        Next i
     
        'affichage 
     
        Cells(6, 6) = somme
        Cells(4, 6) = "Somme de tous les fournisseurs : "
    End Sub
     
     
    'Marche pas, trop d'erreurs

    Donc si vous avez des idées, n'hésitez pas à partager quel que soit le langage ou comment vous l'exprimez

    Cordialement

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Je reformule ton besoin, pour être sûr qu'on est sur la même ongueur d'onde.
    Tu as un fichier avec 15000 lignes.

    Sur chaque ligne , tu as un nom de fournisseur (colonne 9 si j'ai bien vu) et tu as un prix.
    Imaginons que tu aies en tout 1000 fournisseurs différents (et donc chaque fournisseur apparaîtrait en moyenne 15 fois).

    Et ce que tu veux, c'est faire en sortie un fichier de 1000 lignes avec pour chaque ligne , le nom du fournisseur concerné, et la somme des prix pour ce fournisseur.

    Dans ton message initial, tu parlais de 43 colonnes, mais en fait , il n'y a que 2 colonnes qui nous intéressent : la colonne avec le nom du fournisseur, et la colonne avec le prix.

    C'est ça ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Je reformule ton besoin, pour être sûr qu'on est sur la même ongueur d'onde.
    Tu as un fichier avec 15000 lignes.

    Sur chaque ligne , tu as un nom de fournisseur (colonne 9 si j'ai bien vu) et tu as un prix.
    Imaginons que tu aies en tout 1000 fournisseurs différents (et donc chaque fournisseur apparaîtrait en moyenne 15 fois).

    Et ce que tu veux, c'est faire en sortie un fichier de 1000 lignes avec pour chaque ligne , le nom du fournisseur concerné, et la somme des prix pour ce fournisseur.

    Dans ton message initial, tu parlais de 43 colonnes, mais en fait , il n'y a que 2 colonnes qui nous intéressent : la colonne avec le nom du fournisseur, et la colonne avec le prix.

    C'est ça ?
    Oui c'est précisément ceci.
    Après réflexion je vais essayer de faire mon algorithme en deux parties : une première pour trier le tableau par "fournisseur", puis faire une deuxième partie où j'additionnerai les prix en fonction des noms

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    En vba/Excel, je pense que tu peux faire ça très vite, avec l'objet Pivottable()

    Mais sinon, ce que tu envisages est très bien.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2017
    Messages : 20
    Points : 14
    Points
    14
    Par défaut
    Après quelques heures ce matin avec ce que j'ai dit précedemment, j'ai réussir à obtenir ce que je voulais.
    Cependant la méthode pivottable aurait probablement pu marcher aussi

    Merci de tes réponses

    Cordialement

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 16/06/2006, 16h12
  2. Fonctions et chaine
    Par fveysseire dans le forum C
    Réponses: 3
    Dernier message: 07/06/2006, 14h44
  3. Regroupement en fonction des 8 premiers caractères
    Par 306xshdi dans le forum Access
    Réponses: 4
    Dernier message: 06/11/2005, 10h18
  4. [C#] Fonction de Chaine de caractères
    Par slyv dans le forum Windows Forms
    Réponses: 8
    Dernier message: 13/12/2004, 18h41
  5. Réponses: 10
    Dernier message: 17/12/2003, 13h51

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