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 :

Tri multi-conditionnel avec VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Chargé de projet en BE
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé de projet en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut Tri multi-conditionnel avec VBA
    Bonjour,

    Après un paquet de recherches sur le net et un nombre incalculable d'essais infructueux, je me tourne vers vous pour un coup de main. Voilà, j'ai un fichier excel qui me permet de calculer des pertes de charges. Je l'ai intégralement automatisé, de même que pour un premier tri de solution. Mon problème c'est qu'il faudrait que je puisse supprimer des "doublons" (en fait les solutions plus faibles mais valables) d'une plage de données.
    En gros mon problème est le suivant, j'ai 7 variables qui évoluent chacune sur une plage donnée, et une dernière variable issue d'un précédent tri (j'ai déjà éliminé les solutions incorrectes en mettant cette valeur à 0 si on dépassait certains seuils et en la mettant à 1 si les seuils sont respectés).

    Appelons les colonnes A, B, C, D, E, F, G et Tri
    A varie de 0 à 7, B de 0 à 4, C de 0 à 3, D de 0 à 4, E de 0 à 4, F de 0 à 2, G de 0 à 2 et Tri entre 0 et 1.

    Je voudrais renvoyer 0 dans la ligne correspondant au concatener(A;B;C;D;E;F;G) si une solution de type concatener(A-1;B;C;D;E;F;G)=(7-1)434422 soit 6434422 existe. De même pour une solution qui serait de type 7232111, etc. sachant que dans le cas d'une solution de type 7034422 ou 7000022 et autres soutions du genre, je veux aussi garder la plus grande.

    Cela fait un paquet de test de type "IF" à lancer (36000-n avec n allant de 1 à 35999) pour chaque ligne n. C'est un peu lourd.
    En ayant déjà renvoyé un 1 ou un 0 selon si la solution est valable ou non, il me reste quand même près de 5000 lignes à tester ainsi.

    Auriez-vous une idée de code plus simple qu'une série monstrueuse de "IF" combinée avec des "FOR" pour gérer cela?

    Merci d'avance pour les retours, en espérant avoir été suffisamment clair.

  2. #2
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir.

    Je n'ai pas compris la question, mais je signale quand même que traiter 36 000 lignes, cela n'a rien d'extravagant.
    Par contre, pour un traitement rapide, il est fortement conseillé de ne pas travailler avec les cellules de la feuille, mais plutôt de charger toutes les données dans une variable tableau.

    Cordialement,

    PGZ

  3. #3
    Candidat au Club
    Homme Profil pro
    Chargé de projet en BE
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé de projet en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut
    Bonsoir.

    Merci pour le retour.
    Je sais bien que cela n'a rien d’extravagant et qu'il serait plus rapide de faire le traitement par une variable tableau plutôt que de les remettre dans une feuille, mais j'ai besoin du retour visuel.

    En gros, je veux renvoyer un 1 dans la première colonne libre à droite de celle du tableau si la solution est optimum, ou un 0 si il existe une meilleure solution. sachant que les solutions optimums comportant seulement quelques branches et dont les autres seraient à 0 sont à retenir.

    Par exemple, admettons que les branches soient nommées A, B, C, D, E, F et G avec respectivement des maxis à 7, 4, 3, 4, 4, 2 et 2
    On a un extrait de tableau qui ressemblerait à ce qui suit :
    A B C D E F G
    0 0 0 0 0 0 0
    0 3 3 3 2 2 2
    0 3 3 3 1 0 1
    0 3 3 3 2 1 0
    0 3 3 3 2 1 1
    0 3 3 4 2 1 1
    0 3 3 4 2 2 1
    1 3 3 3 3 2 1
    2 0 0 4 4 2 2


    Les solutions qui seraient retenues seraient celles en gras.

    Je pensais utiliser la fonction FIND, pour permettre de les sélectionner afin de mettre un 1 ou un 0 comme expliqué plus haut, mais j'avoue que je sèche un peu.

    Si jamais une idée fait surface ou une explication sur la manière d'utiliser le FIND dans ce cas, je suis preneur.

    PS : Désolé pour le temps de réponse, mais je fait ça sur mon temps perso étant donné que j'ai d'autres priorités pour le moment au boulot et je ne travaille pas dessus tous les soirs.

  4. #4
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonsoir

    Citation Envoyé par Suc_Pith Voir le message
    Je sais bien que cela n'a rien d’extravagant et qu'il serait plus rapide de faire le traitement par une variable tableau plutôt que de les remettre dans une feuille, mais j'ai besoin du retour visuel.
    Si tu sais résoudre ton pb dans un tableau à 2 dimensions, pas de difficulté pour l'écrire dans une feuille Excel quand le traitement est terminé.

    Sinon, je n'ai toujours pas compris de quoi tu pars et ce que tu veux obtenir.

    Cordialement,

    PGZ

  5. #5
    Candidat au Club
    Homme Profil pro
    Chargé de projet en BE
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Chargé de projet en BE
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Par défaut
    Bonsoir de nouveau PGZ,

    Hum, alors en gros, je pars de plusieurs variables qui sont mes branches, que je peux ou non utiliser seules ou plusieurs en même temps. J'ai un calcul de pertes de charge qui s'effectue automatiquement, et quand je dépasse les valeurs de fonctionnement, j'ai un marqueur qui me le signale (une variable à 0, ou si les paramètres de fonctionnement sont respectés à 1)
    Chaque branche peut supporter un certains nombre d'enrouleurs utilisés en parallèle. les valeurs des variables A, B... (qui sont donc pour simplifier le nom de mes branches) .

    Grâce à ça, j'ai un tableau avec toutes les possibilités de combinaison et les résultats qui correspondent pour pouvoir faire un filtre auto par la suite.
    Le dernier point qui me reste, c'est de ne garder que les solutions optimum. Donc en gros si au mieux une branche support 4 enrouleurs, je ne veux garder que celle-ci. Si trois branches avec chacune disons 4, 3 et 4 enrouleurs peuvent fonctionner, je ne veux garder que celle-ci et pas les solutions plus faibles du type 2 ,1 et 1 enrouleurs.

    Donc l'idée pour permettre un filtre auto est de mettre une variable, ou une cellule dans mon cas vu que je souhaite pour le temps du développement voir tout le tableau, afin de réaliser mon filtre sur cette variable.

    Je ne sais pas si j'ai réussi à répondre à ta question sur mon problème actuel.

Discussions similaires

  1. [XL-2010] Installer une mise en forme conditionnelle avec VBA
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 04/04/2019, 15h33
  2. [XL-2007] Tri rapide avec vba excel
    Par bigfrit dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/05/2015, 21h04
  3. userform avec checkbox ou bouton multi choix avec tri dans excel
    Par lucioleyankee dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 01/06/2011, 17h38
  4. [AC-2003] Tri et affichage avec VBA
    Par stan057 dans le forum VBA Access
    Réponses: 8
    Dernier message: 19/05/2009, 17h29
  5. [XL-2003] format conditionnel avec vba
    Par didinette56 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/05/2009, 15h37

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