VBA : Nombre de variables inconnu

Résolu
nabhalia Messages postés 23 Statut Membre -  
nabhalia Messages postés 23 Statut Membre -
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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  2. nabhalia Messages postés 23 Statut Membre
     
    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
  3. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
     
    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
  4. nabhalia Messages postés 23 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      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. ccm81 Messages postés 11033 Statut Membre 2 434
       
      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. michel_m Messages postés 18903 Date d'inscription   Statut Contributeur Dernière intervention   3 320
       
      Bon
      nabhalia et la politesse, ça fait 2

      dans la blacklist....
      0
    4. nabhalia Messages postés 23 Statut Membre
       
      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