Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

Réponse
 
Outils de la discussion
Vieux 26/08/2008, 09h57   #1 (permalink)
Invité de passage
 
Date d'inscription: décembre 2007
Messages: 4
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.
xbb12 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 26/08/2008, 19h32   #2 (permalink)
Modérateur
 
Avatar de ouskel'n'or
 
Date d'inscription: février 2005
Localisation: Une petite rue qui "avait" un merle
Messages: 11 574
Par défaut

Citation:
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
Citation:
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 !
__________________
Je...ne...réponds...pas....aux...questions...techniques... par...mp
La recherche (VBA-E) : Le Forum, La FAQ, Les cours et tutoriels, Contribuez, Les Sources et... l'Aide en ligne !!!
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 28/08/2008, 08h52   #3 (permalink)
Invité de passage
 
Date d'inscription: décembre 2007
Messages: 4
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 !
@+
xbb12 est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > Excel > VBA Excel

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide


Fuseau horaire GMT +1. Il est actuellement