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 :

EXCEL VBA Identification des valeurs d'une liste permmettant d avoir une somme


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut EXCEL VBA Identification des valeurs d'une liste permmettant d avoir une somme
    Bonjour à tous,

    j'ai commencé par fouiller tous les forums mais peut-être n'ai-je pas utiliser les bons mots clés pour libeller mon problème...

    Alors voilà, j'ai une liste de valeurs en colonne par : 30 ; 84 ; 150 ; 202 ; 65 etc...
    Je souhaiterai à partir d'une macro identifier les valeurs de la série permettant d'obtenir la somme 180. En l'occurence, Excel afficherai d'une couleur différente les valeurs 150 et 30.

    En gros j'ai plusieurs tableaux sur lesquels des regroupements ont été faits mais la personne fait ces regroupements n'en a pas laissé de traces !

    J'epère que l'exposé de mon problème est clair...
    Merci par avance de votre aide !

    Cordialement.

  2. #2
    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
    Points : 15 543
    Points
    15 543
    Par défaut
    En gros j'ai plusieurs tableaux sur lesquels des regroupements ont été faits mais la personne fait ces regroupements n'en a pas laissé de traces !
    Tu ne penses pas que "la personne" les a fait manuellement ?
    Je ne sais pas si tu réalises l'algorithme qui peut faire ça... Ça risque d'être long... Tu as un micro inoccupé disponible ?
    Pour le principe
    Boucle 1 : Tant que toutes les lignes n'ont pas été parcourues
    .....- n = n + 1
    .....- Tu parcours ta liste ligne par ligne.
    .....- Tu lis chaque nombre (appelons-le A) et tu calcules son écart avec 180
    .....(ce nombre fera partie du Groupe(n)
    .....Boucle 2 : Tant que Groupe(n) < 180 ou A > 180 ou Fin de liste atteinte (*)
    ..........- Tu parcours de nouveau ta liste
    ..........- Tu ne retiens que les nombres inférieurs ou égaux à cet écart (appelons les B)
    ..........- Si la somme A + B = 180, tu as ton groupe(n) et tu sors de la boucle 2
    ..........- Si la somme A + B < écart, tu ajoutes B à ton groupe(n)
    .....Si Groupe(n) "invalide", effacement des nombres "suivants"
    .....Fin Boucle 2

    Fin Boucle 1
    (*) Quand tu es là, tu as un certain nombre de Groupes "invalides" (dont la somme des nombres qu'il contient < 180 puisqu'on n'ajoute que les nombres < au dernier écart)
    Pour ces groupes, tu conserves les nombres du groupe à l'exception des deux derniers nombres ajoutés à exclure l'avant dernier en parcourant de nouveau ta liste, retenir le premier nombre suivant <= écart puis le suivant... etc. Tant que les nombres A + B + C + x <= 180
    En fin de compte il te restera donc encore des groupes invalides...
    Pour les groupes valides :
    Comme tu souhaites donner une couleur à tes groupes valides, que tu ne peux connaître ces groupes qu'une fois cette procédure terminée, il te faut l'adresse des cellules.
    Comme le nombre de nombres constituant un groupe est inconnu, tu ne peux utiliser un tableau d'adresses.
    Pour cela j'utiliserai une collection en concaténant les valeurs des nombres ajoutés séparées des suivantes par un ... séparateur.

    Pour les groupes "invalides" cela te permettrait de connaître la position du nombre à supprimer (avec Split)

    Pour les groupes valides et pour la couleur des cellules du groupe, une recherche par la valeur de chaque membre d'un item de la collection te donnerait l'adresse de la cellule à teinter.

    Je suis certain d'être mal compris et d'être incomplet mais reconnais que j'ai fait l'effort
    Et puis ce n'est pas moi qui ai à réaliser cette procédure. Ouf !

    En fait, je crois que je tenterais une fonction récurrente...

    Ceci dit, que fais-tu si plusieurs groupes occupent une même cellule ?
    S'il faut exclure les cellules d'un groupe avant de passer au groupe suivant, alors pourquoi l'exclure pour ce groupe-ci plutôt que ce groupe-là ?

    Tiens-nous au courant, ton problème est intéressant, dommage que Random ne passe pas par là ces temps-ci, c'est un problème pour lui Mais il y en a d'autres qui aiment bien jouer avec ce type d'exercice...
    Bref, bon courage !

  3. #3
    Futur Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut Merci !
    Bonjour,

    effectivement le travail initial est manuel et du coup j'ai d'un côté un tableau et d'un autre un résultat à partir du tableau... il me manque toute la partie intermédiaire !

    Bref en tout cas un grand merci d'avoir bien voulu te pencher sur mon probème, si je trouve quoi que ce soit je le posterai ici.
    Qui est ce fameux Random ?

    J'imagine que les solutions fournies par ce développeur sont à l'opposé de la définition de son pseudo !
    @+

Discussions similaires

  1. [AC-2010] Utiliser valeur d'une liste de choix dans une liste déroulante d'un autre formulaire
    Par Sébastien1609 dans le forum Macros Access
    Réponses: 1
    Dernier message: 11/06/2015, 15h31
  2. Réponses: 9
    Dernier message: 21/05/2014, 20h21
  3. [LibreOffice][Base de données] Recuperer une liste de tables et une liste de champs d'une table sur LibreOffice & OpenOffice
    Par gerard.sauvage dans le forum OpenOffice & LibreOffice
    Réponses: 2
    Dernier message: 08/04/2014, 12h35
  4. Réponses: 2
    Dernier message: 29/05/2008, 15h59
  5. Réponses: 2
    Dernier message: 26/05/2007, 17h28

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