VBA : Nombre de variables inconnu

Résolu
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

  1. Contributeur
    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
    1. 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
      1. Contributeur
        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
        1. 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
          1. 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
            1. Contributeur
              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
            2. 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
            3. Contributeur
              Bon
              nabhalia et la politesse, ça fait 2

              dans la blacklist....
              0
            4. 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