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 :

Question tri variable tableau [XL-2013]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut Question tri variable tableau
    Bonjour à tous,

    j'ai découvert dernièrement les variables tableaux (je suis autodidacte sur vba), j'ai lu pas mal de choses, récupéré des bouts de codes (merci à ceux qui les ont écris) par ici ou par là, mais je butte actuellement sur un point.
    Je pensais avoir terminé mon développement mais je me suis rendu compte qu'un calcul que j'effectuais était faux car mes données n'étaient pas triées par ordre croissant.

    Pour le cheminement :
    1 j'ouvre dans la mémoire du pc un fichier txt
    2 je récupère les lignes dans un tableau
    3 je découpe, split, scinde (comme vous voulez) les données avec le séparateur ;
    4 je récupère ces données dans un dico et un tableau via ce bout de code :

    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
    For Z = 2 To UBound(TblRecup)
     
        'découpe la ligne en fonction du séparateur ;
            tblsplit = Split(TblRecup(Z), ";")
     
            'si la valeur de la 1 ère colonne n'existe pas l'inscrit dans le dico et récupère les valeurs 
    
           If Dico.Exists(tblsplit(2)) = False Then
            comp = 1
                Dico.Add tblsplit(2), tblsplit(8)
                j = j + 1
                ReDim Preserve tbl(1 To 10, 1 To j)
                tbl(1, j) = tblsplit(2)
                tbl(2, j) = tblsplit(8)                      
               Tbl(3, j) = Val(tblsplit(21)) *5
                tbl(4, j) = tblsplit(49)
                tbl(5, j) = tblsplit(50)
                tbl(6, j) = tblsplit(51)
                tbl(7, j) = comp
              
                                      
            Else
            
                'comme la valeur de la 1 ère colonne existe, on compte le nb de doublons et effectue la somme afin de faire la moyenne
                comp = comp + 1
                'permet de faire la moyenne 
                
                tbl(3, j) = (Val(tblsplit(21) *5 + Val(tbl(3, j))
     Voilà où se situe le problème. Comme les données récupérées par tbl(1, j) = tblsplit(2) ne sont pas tirées par ordre croissant la ligne de code ci dessus ajoute la valeur à un autre événement cf exemple en bleu :calim2:
    
                tbl(7, j) = comp
                   
            End If
            
        Next Z
    Objectif :

    Par quel moyen je peux trier par ordre croissant la colonne 1 (et conserver toutes les données des autres colonnes) sans la nécessité d'écrire les valeurs dans excel, les trier, puis les relire dans une variable tableau, effectuer le calcul *5 et la moyenne? C'est peut être pas très clair mais voici simplement illustré le problème

    exemple en mémoire dans la variable

    A	15	z					
    A	17	z					
    A	18	z					
    B	10	r					
    B	10	r					
    A	19	z					
    C	20	r					
    C	21	r					
    Résultat obtenu par mon code

    A	16.66	z					
    B	13	r	10+10+19 (Comme A existe il ajoute la quatrième valeur de A (A= 19) aux valeurs de B) 				
    C	20.5	r					
    Résultat désiré

    A	17.25	z					
    B	10	r					
    C	20.5	r					


    Merci par avance de votre précieuse aide.
    Bonne journée

  2. #2
    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

    Bonjour,

    un cumul peut-être directement effectué via le dictionnaire s'il y a bien un identifiant …

    Sinon joindre déjà le fichier texte source puis expliquer clairement le traitement.

    _________________________________________________________________________________________________________
    Je suis Paris, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Dans Excel, il y a beaucoup plus de possibilités en mettant les données dans des cellule plutôt que de les mettre dans une variable tableau.

    Pour info, tout ça :
    1 j'ouvre dans la mémoire du pc un fichier txt
    2 je récupère les lignes dans un tableau
    3 je découpe, split, scinde (comme vous voulez) les données avec le séparateur ;
    Peut se faire en une seule ligne avec un OpenTexte.
    https://msdn.microsoft.com/fr-fr/lib.../ff837097.aspx

    Et il devient très simple de faire ensuite un tri sur ces données :
    https://msdn.microsoft.com/fr-fr/lib.../ff840646.aspx
    ou bien (plus compliqué mais avec plus de possibilités) :
    https://msdn.microsoft.com/fr-fr/lib.../ff195963.aspx

  4. #4
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut
    Bonjour,

    Merci à vous deux pour vos pistes de recherches.

    Menhir mon objectif était de ne pas ouvrir physiquement les données dans Excel dès le début (c'est ce que je faisait auparavant) afin d'optimiser la vitesse de traitement et la limitation induite par le nombre de ligne d'Excel (oui oui il m'arrive de ne pas avoir assez de lignes ). Mais votre piste parait plus légère que mon ancien code. .

    Marc-L est ce que A,B ou C peuvent servir d'identifiant?

    Je continue à creuser et toujours preneur d'idées.

    Merci

  5. #5
    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




    Oui s'il s'agit de cumuler tous les A, tous les B, …

  6. #6
    Membre confirmé
    Homme Profil pro
    technicien
    Inscrit en
    Février 2017
    Messages
    82
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : technicien

    Informations forums :
    Inscription : Février 2017
    Messages : 82
    Par défaut
    Bonjour,

    Marc-L merci pour le retour mais j'avoue ne pas avoir été en mesure de trouver le code pour effectuer cela (comme je le disais je suis autodidacte en programmation).

    Du coup je me suis attaché à la suggestion de Mehnir, en ouvrant le fichier (et en triant les données) puis en important les valeurs dans une variable tableau, par la suite j'utilise un dictionnaire afin d’effectuer mes calculs (avec le même principe de code que celui présenté lors de mon premier message).

    Cette approche est beaucoup plus rapide (à confirmer) que mon ancien développement qui m'a amené à utiliser ce type de variables c'est super pratique .

    Il y a surement plus simple et encore plus rapide pour les puristes, mais pour le moment mon premier résultat est cohérent.

    Si je passe en résolu cela verrouille le sujet ou des postes peuvent être ajouter?

    Merci a vous 2

    Nouveauvba

  7. #7
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par nouveauvba Voir le message
    Si je passe en résolu cela verrouille le sujet ou des postes peuvent être ajouter?
    Le sujet ne sera pas verrouillé mais il y a moins de change que quelqu'un continue à y participer.

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

Discussions similaires

  1. Tri Dates variable tableau
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 27/01/2012, 19h25
  2. Tri variable tableau VBA suite et fin
    Par Daranc dans le forum Contribuez
    Réponses: 1
    Dernier message: 11/07/2011, 10h46
  3. Tri par ordre croissant dans variable tableau
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 27/11/2009, 16h51
  4. [Tableaux] Tri d'une variable tableau multidimension
    Par sty255 dans le forum Langage
    Réponses: 2
    Dernier message: 19/12/2008, 08h56
  5. [langage] tri dans tableau de hachage
    Par mimilou dans le forum Langage
    Réponses: 2
    Dernier message: 10/03/2004, 16h10

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