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-E] Amelioration dun code


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut [VBA-E] Amelioration dun code
    Coucou,

    voilà j'ai une feuille excel avec dans une colonne un nom et dans l'autre, sur la meme ligne, une valeur.

    je dois faire la somme lorsque le nom est le meme.

    Exemple


    A 10
    B 12
    C 3
    B 9
    C 14


    je dois avoir dans ma feuille finale :

    A 10
    B 21
    C 17


    or un nom peut apparaitre à n'importe quelle ligne.

    pour le moment mon code regarde la premiere ligne de ma feuille source et si le nom n'est pas dans ma feuille cible alors il ajout une ligne (dans la feuille cible) avec ce nom et la valeur. Si le nom est deja present il ajoute la valeur à la valeur deja présente.

    Le probleme est que comme il y a environ 80 noms différents, lorqu'il prend un nom de la feuille source il peut faire jusque 80 comparaisons... comme j'ai plus de 40000 lignes.... ca prend du temps (4 minutes environ) et le souci est que j'ai à répéter ca une dizaine de fois (par semaine).

    Je voulais donc savoir s'il existait une autre methode plus rapide que la mienne

  2. #2
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    Pourquoi ne pas faire une formule ? je crois que le "NB.SI" fait ce que tu demande

    EDIT : ah nan ça te dit juste le nombre de cellules qui contiennent la meme valeur..mais tu dois pouvoir le concaténer avec une somme ou un truc comme ça..Vais chercher
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  3. #3
    Membre éclairé Avatar de laloune
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Mai 2005
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Allemagne

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Mai 2005
    Messages : 487
    Par défaut
    je dois faire la somme lorsque le nom est le meme.
    illight a raison, même si je pencherais plutot pour un somme.si:

    somme.si(plage_qui_contient_les_critères;critère;plage_qui_contient_les_nombres_a_sommer)

    Bon dev...
    laloune

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Ok illight mais mon probleme n'est pas d'avoir un resultat mais d'ameliorer le temps d'execution.

    Donc le NB.si peut convenir (j'irai verifier ) mais je ne sais pas si ca sera plus rapide.. enfin je testerai pour voir

    sinon voici mon code actuel :

    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
    For i = 2 To NombreLignes
        j = 3
            Do While Ceclasseur.Worksheets(Nomfeuille).Cells(j, NombreColonnes) <> ""
                'Si la sclass a deja été rencontrée
                If Source.Worksheets("data").Cells(i, 4) = Ceclasseur.Worksheets(Nomfeuille).Cells(j, NombreColonnes) Then
                    'on ajoute la valeur
                    Ceclasseur.Worksheets(Nomfeuille).Cells(j, NombreColonnes + 1) _
                    = Ceclasseur.Worksheets(Nomfeuille).Cells(j, NombreColonnes + 1) _
                    + Source.Worksheets("data").Cells(i, 5)
                    GoTo 1:
                Else
                    j = j + 1
                End If
            Loop
            'si on arrive ici c'est que le sclass n'a pas été trouvé
            Ceclasseur.Worksheets(Nomfeuille).Cells(j, NombreColonnes) = Source.Worksheets("data").Cells(i, 4)
            Ceclasseur.Worksheets(Nomfeuille).Cells(j, NombreColonnes + 1) = Source.Worksheets("data").Cells(i, 5)
    1:
        Next


    nombredeligne est le nombre de lignes qu'il y a à comparer dans la feuille source.

    nombrecolonnes est calculé juste pour savoir la place où vont etre copiées les valeurs (dans la feuille de Ceclasseur).

  5. #5
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    je confirme que le NB.SOMME marche très bien suffit que dans ta macro tu fasse une formule après tu la tire
    Dans ton autre feuille, tu peux mettre tous les noms, les trier puis supprimer les doublons, ensuite tu met ta formule et tu la tire (tout ça tu peux le faire en macro )

    Et je pense qu'une formule sera toujours plus rapide qu'une macro avec des boucles
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    mon code??

    il est au dessus ouvre les yeux

  7. #7
    Expert confirmé Avatar de illight
    Homme Profil pro
    Analyste décisionnel
    Inscrit en
    Septembre 2005
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Analyste décisionnel
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 342
    Par défaut
    Ousk il l'a mis le code Elstak

    Pour la formule c'est ça..
    Donc d'abord ce que j'ai fait c'est que j'ai mis tes valeur de "nom" dans la feuille1 dans la première colonne, et les valeurs dans la 2e colonne, et ensuite dans la feuille 2 j'ai mis les 3 noms avec la formule donc adéquate en face donc voici la formule :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI(Feuil1!$A$1:$B$5;A1;Feuil1!$B:$B)
    1. Avant de poster, et http://www.developpez.com/sources/
    2. Lors du post, n'oubliez pas, si besoin les balises CODE => voir ici pour l'utilisation
    3. N'oubliez pas le
    4. N'oubliez pas le si la réponse vous a été utile !

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    jcomprend pas trop ton somme.si

    d'ailleur je trouve rien à propos de ca dans l'aide excel 2003 !!

    il faut savoir à l'avance les noms qu'il y aura? car moi je les ignore au debut... ca change d'une semaine à l'autre

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ok pour le code, mon post a dû le croiser ou j'ai pas vu
    Elstak, pourquoi ne pas utiliser Find ? Inconvénient : si le nom peut se rencontrer plusieurs fois...
    Tu dis

    Mais l'idée de la formule, si ça correspond à ce que tu veux, est bonne. Une formule donne un résultat instantané si tu peux la placer dans ta feuille dans laquelle tu souhaite placer le résultat. Mais pour ce que j'ai compris, la donnée "résultante" doit se trouver à la place de la donnée cherchée... Et là, ça marche pas. Faudrait ajouter une colonne
    Tu dis

    somme.si est une formule Excel, ce n'est pas une fonction VBA. Tu as la réponse dans mon post précédent

  10. #10
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    932
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 932
    Par défaut
    Perso, d'apres mes souvenir des formules, j'utiliserai plutot une recherche verticale non?

    si il trouve pas j'ajoute le nom en dessous sinon j'ajoute la valeur au niveau de la ligne qu'il me trouvera. enfin je ne suis toujours pas convaincu que ce sois plus rapide je pense qu'il faudrai modifier mon code mais je sais pas trop comment j'ai deja lu que travailler avec des "array" rendait plus rapide mais bon jvois pas trop si jpeux m'en servir

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Si le nom est deja present il ajoute la valeur à la valeur deja présente.
    C'est qui "il" ?
    Peux-tu nous montrer le code de tes boucles (car je pense que tu as deux boucles imbriquées...)

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

Discussions similaires

  1. [VBA-E] ListBox et Codes postaux
    Par forsay1 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 13/03/2006, 10h07
  2. [VBA-W] Arranger un code HTML
    Par FLCEOAP dans le forum VBA Word
    Réponses: 1
    Dernier message: 10/03/2006, 13h17
  3. [VBA-E]Combobox et code trop long!! (debutante)
    Par legend dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 03/03/2006, 14h23
  4. [VBA] Erreur dans un code. Hierarchie DAO.
    Par snoopy69 dans le forum VBA Access
    Réponses: 3
    Dernier message: 22/10/2005, 22h28

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