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 :

Factorisation de ma boucle


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
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut Factorisation de ma boucle
    Bonjour à tous,
    J'ai un léger problème technique. Voici le contexte:

    J'ai un long fichier où figure des codes articles structurés comme ceci: matière-&couleur, et leur consommation réelle et prévue dans des OF.
    Exemple: Boulon-ROU, VIS-JAU, etc.

    Je souhaite créé un tableau récap des consommations de ces articles en fonction de leur coloris.
    J'ai opté pour des compteurs avec boucle de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    BOULONROUGEREEL = 0
     
    dligne = Range("A15000").End(xlUp).Row
     
    For A = 2 To dligne
     
    If Cells(A, 6) = Cells(2, 24) & Cells(1, 25) Then BOULONROUGEREEL = BOULONROUGEREEL + Cells(A, 7)
     
     
    Next A
     
     
    Cells(2, 25)= BOULONROUGEREEL
    Avec en colonne 6 le code article complet, en (2,24)le code article du tableau final sans le coloris, en 1,25 le coloris du tableau final (rappel: cells(2.24)&cells(1,25)= cells(A,6)) et en colonne 7 ma consommation matière.


    Ca fonctionne très bien... Mais j'ai 16 coloris différents pour 9 produits, soit 144 possibilités, à multiplier par 2 car je souhaite obtenir le réel et le prévu. J'ai commencé à m'y mettre malgré le chantier, mais ma macro a bloqué car trop longue.

    Je pense que je passe à côté d'un moyen de factoriser tout ça de manière beaucoup, beaucoup plus simple.


    Est-ce que quelqu'un aurait une piste ?

    Bonne journée à tous,

    Mickamax


    Edit: Pour plus de clarté je voudrais avoir ce rendu final :

    Nom : TABLEAU MATRICIEL.PNG
Affichages : 519
Taille : 12,9 Ko


    Donc pour ma première combinaison, je voudrais que ma macro balaie dans un tableau que je possède toutes les lignes avec comme article: Boulon-BLC et en fasse la somme...

    Merci !

  2. #2
    Membre Expert
    Inscrit en
    Septembre 2007
    Messages
    1 142
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 142
    Par défaut
    Bonjour à tous,
    Citation Envoyé par Mickamax Voir le message
    Je souhaite créé un tableau récap des consommations de ces articles en fonction de leur coloris. J'ai opté pour des compteurs avec boucle
    Je pense que pour avoir tes résultats tu en as pour 2 minutes à faire un Tableau Croisé Dynamique que tu pourras faire évoluer à ta guise.

    Pourquoi inventer des fonctions présentes nativement dans excel ?

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut
    Bonjour Anasecu,
    C'est une bonne remarque.
    Cependant, je n'ai pas précisé que je souhaite avoir ces ratios globaux avant une macro qui me supprime toutes les lignes que je juge inutiles…

    Ainsi, comme le TCD s'adapte à son champ, si je supprime des lignes, les valeurs du TCD vont malheureusement changer… d'où mon choix d'opter pour du "dur".

    Bonne journée

  4. #4
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Bonjour,

    J'aurais travaillé avec des dictionnaire. Je m'explique.
    Le premier dico m'aurait servi à référencer les différentes couleurs (clé) associées à la ligne de ton tableau (Valeur).
    Le second aurait eu la même fonctionnalité mais avec tes pièces.

    Superbe tutoriel sur le dictionnary : Objet Dictionnary

    Après ça, je teste chaque cellule de la colonne pour déterminer quel est le type de pièce (ce qui te retournera un numéro de colonne) et sa couleur (ceci te donnera un numéro de ligne)

    Avec ça, tu pointeras sur la cellule de ton tableau synthèse.

    Magique !

    Piste :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    dim DicoCouleur as new scripting.dictionnary
    dim DicoPiece as new scripting.dictionnary
    dim Clé as variant, Valeur as variant
     
    for i = 2 to 10
     
    clé = worksheets("Test").range("A" & i)
    valeur = i 'Ici tu auras donc la valeur de la ligne associé à ta clé (ta couleur)
    if not dicocouleur.exists(clé) then dicocouleur.add clé, valeur
     
    next i
    Tu fais la même avec le DicoPiece et tu auras ton référencement de colonne.

    Après ça tu utilises les fonctions de traitement de texte (Left, Right, ...) pour obtenir les caractères dont tu as besoin

    Le tour est joué et normalement, rapidement joué !

  5. #5
    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 Mickamax Voir le message
    J'ai un long fichier où figure des codes articles structurés comme ceci: matière-&couleur, et leur consommation réelle et prévue dans des OF.
    Exemple: Boulon-ROU, VIS-JAU, etc.

    Je souhaite créé un tableau récap des consommations de ces articles en fonction de leur coloris.
    Déjà, il me semble peu judicieux de mettre dans une même colonne deux informations (matière et couleur) que tu souhaites par la suite traiter séparément.

    Cela dit, pas besoin de VBA pour faire ça.
    En supposant que ta liste source soit en feuille "Source", que le code soit en colonne A et la donnée de consommation en colonne B.
    En supposant que la cellule en haut à gauche de ton tableau destination soit A1, met en B2 de ce tableau la formule :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SOMME.SI.ENS(Source!$B:$B;Source!$A:$A;B$1&"-"&$A2)
    Copie le case B2 dans toutes les cases de ton tableau.

    Si tu veux le conserver "en dur", fais un copier/coller valeur dessus.

    Tout ceci peut aussi se faire en deux lignes de code VBA.
    Ce sera certainement plus rapide qu'une boucle For To.

  6. #6
    Membre expérimenté
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    254
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 254
    Par défaut
    Je rebondis sur ce que tu dis Menhir ()

    Tout ceci peut aussi se faire en deux lignes de code VBA.
    Ce sera certainement plus rapide qu'une boucle For To.
    Avec la fonction SumIfs ? Dans mes souvenirs, cette fonction est d'une lenteur effroyable !

  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 Trystan441 Voir le message
    Avec la fonction SumIfs ? Dans mes souvenirs, cette fonction est d'une lenteur effroyable !
    La lenteur que l'on peut ressentir lors du rafraichissement d'une feuille dynamique est très différente de ce que l'on peut ressentir au lancement d'une macro.
    1 s de rafraichissement pour un tableau à chaque saisie, c'est lourd.
    1 s de temps de traitement pour une macro, c'est rapide.
    Le ressenti est différent.

    D'un autre côté, une boucle For To n'est pas non plus un exemple de rapidité, surtout quand on commence à en imbriquer plusieurs.

    Je suis prêt à parier (même si je n'ai pas de certitude) que mettre une fonction SOMME.SI dans 144 cellules avec une propriété FormulaLocal puis faire dessus un Copy et un PasteSpecial(xlPasteValues), ce sera plus rapide que trois boucles For To (une pour les matériaux, une pour les couleurs et une pour scruter la liste).

    PS : j'ai fait une erreur dans mon message précédent. Ce code ne se fera pas en 2 lignes mais en 3 (j'avais oublié le Copy).

Discussions similaires

  1. [XSLT] Faire une boucle sur une variable [i]
    Par PoT_de_NuTeLLa dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 07/06/2010, 12h45
  2. [PHP 5.2] factoriser dans une boucle avec variables
    Par mussara dans le forum Langage
    Réponses: 5
    Dernier message: 05/02/2009, 14h58
  3. [directsound] boucle de traitement de son
    Par gargle dans le forum DirectX
    Réponses: 5
    Dernier message: 24/03/2003, 10h47
  4. Sortir d'un progamme qui boucle ou qui refresh
    Par mikevador02 dans le forum C
    Réponses: 12
    Dernier message: 14/12/2002, 09h38
  5. Réponses: 2
    Dernier message: 29/05/2002, 20h43

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