VBA : Nombre de variables inconnu

Résolu
nabhalia Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -  
nabhalia Messages postés 23 Date d'inscription   Statut Membre Dernière intervention   -
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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   Statut Membre Dernière intervention  
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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   Statut Membre Dernière intervention  
 
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 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
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 10909 Date d'inscription   Statut Membre Dernière intervention   2 433
 
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 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Bon
nabhalia et la politesse, ça fait 2

dans la blacklist....
0
nabhalia Messages postés 23 Date d'inscription   Statut Membre Dernière intervention  
 
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