VBA : Nombre de variables inconnu

Résolu/Fermé
nabhalia Messages postés 23 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 12 mars 2015 - 28 févr. 2014 à 09:15
nabhalia Messages postés 23 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 12 mars 2015 - 12 mars 2014 à 07:53
Bonjour à tous,

Je suis confronté à un épineux problème VBA.

Actuellement, j'ai ces données-ci (extraites d'un système impossible à modifier, bien sûr) :

PRODUIT 5 15
VIE 2 10
PRODUIT -2 -6
BLANC 7 9

Ma macro "compense" les données sur doublon (ici PRODUIT) et me donne le résultat suivant :

PRODUIT 3 9
VIE 2 10
PRODUIT Annulé
BLANC 7 9

Je précise qu'il m'est impossible de filtrer ou d'insérer des formules type SOMMEPROD, le fichier est bourré de lignes vides, de cellules fusionnées etc. La seule solution que j'ai trouvée, c'est de repérer les doublons, et de compenser les données correspondantes en définissant une variable pour chacune d'elle.

Mon problème devient beaucoup plus compliqué puisque maintenant, il s'agit de compenser deux, ou trois, ou quatre, ou cinq lignes, voire plus.

PRODUIT 8 16
VIE 2 10
PRODUIT 2 4
PRODUIT -3 -6
BLANC 7 9
PRODUIT 4 8

Dans l'idéal, ma macro donnera le résultat suivant :

PRODUIT 11 22
VIE 2 10
PRODUIT Annulé
PRODUIT Annulé
BLANC 7 9
PRODUIT Annulé

Le grande difficulté, c'est que je ne sais pas à l'avance combien de variables je vais devoir définir, puisque des "PRODUIT", je ne sais pas combien j'en aurais.

Je vous l'accorde, c'est ce qu'on appelle en language courant un véritable m...ier.
Dans l'absolu, la question reviendrait à : Est-il possible de définir autant de variables qu'il y a d'occurence "PRODUIT" (4 lignes produits = 4 variables crées) ?

Merci beaucoup pour votre aide,

5 réponses

michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
28 févr. 2014 à 09:23
Bonjour,

Pas de panique !

faut il conserver "produit annulé" ?

pour essayer d'^tre efficace:


mettre un extrait du classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse

0
nabhalia Messages postés 23 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 12 mars 2015
6 mars 2014 à 10:47
Bonjour et merci pour la réponse.

Voici le lien : https://www.cjoint.com/?DCgkRFLROrt

En rouge, j'ai noté les informations que la macro devra ajouter.

Une boucle permet de recommencer à chaque zone, de vérifier s'il y a un PRODUIT (ou autre) en double ou en triple, d'additionner les chiffres à côté du plus grand montant, et d'annuler à côté des autres.

Vraiment pas simple...

Merci pour votre aide.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
6 mars 2014 à 11:15
Ok, merci; c'est clair

combien de Zones à traiter maxi (pour orienter vers une solution ou une autre mais toujours en VBA)

suis absent cet aprem: je regarderai ce soir ou demain matin...
0
nabhalia Messages postés 23 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 12 mars 2015
6 mars 2014 à 12:02
Le nombre de zones varie chaque jour, de 1 à... une centaine.
Hier, 79, par exemple.

Chaque zone peut contenir entre 2 et 22 lignes (donc 11 produits max).

Pour ma part, j'étais parti sur des variables à définir, mais effectivement, s'il existe une autre solution je suis preneur.

Un grand merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 6/03/2014 à 16:56
Bonjour

@michel cordiales salutations, je me suis lancé dans le cambouis

J'ai fait une tentative (macro), à tester bien sûr
Ctrl+m pour exécuter la macro
https://www.cjoint.com/?DCgqmsXX90O

Bonne suite
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 6/03/2014 à 16:59
Une autre qui n'affiche plus les occurrences simples comme dans le modèle
https://www.cjoint.com/?3CgqZmN0umh
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
7 mars 2014 à 09:35
Bonjour CCM81,

OK, c'est magique l'objet "Dictionary", pas Vrai ?;o)

juste 2 petits trucs pour le purisme

tu n'as pas besoin de
Set dico = Nothing (car dico est déclaré en variable locale: il faudrait utiliser cette ligne si on avait écrit au départ set dico=new.dictionary)

ni de
Application.ScreenUpdating = True

mais ça n'emp^che pas de fonctionner :o)
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
7 mars 2014 à 10:48
Salut michel

Sûr que l'objet dictionary c'est magique
En ce qui concerne le set dico= nothing, pour une fois que je fais du zèle .... mais, au moins j'aurais appris quelque chose!

Bonne journée
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 303
11 mars 2014 à 17:00
Bon
nabhalia et la politesse, ça fait 2

dans la blacklist....
0
nabhalia Messages postés 23 Date d'inscription vendredi 29 octobre 2010 Statut Membre Dernière intervention 12 mars 2015
12 mars 2014 à 07:53
Je ne suis pas au bureau souvent, vraiment désolé.

Merci beaucoup pour cette macro qui fonctionne très bien (il me reste à comprendre comment fonctionne l'objet dictionary, que je découvre).

Merci.

Nb
0