Regroupement valeurs par mois sans doublon

Bonjour,

Je fais suite à un précédent sujet où vous m'aviez bien aidé et ai donc essayé d'adapter vos solutions à mon projet pour progresser mais je bloque vraiment depuis 2 jours pour une erreur toute bête j'en suis sûr ...

Le Excel en PJ est un échantillon de mon vrai projet, d'où le fait qu'il peut paraître incomplet, j'ai essayé de garder le strict nécessaire.

Le but du fichier est de rassembler dans une feuille "Regroupement" plusieurs données (c'est là que la macro est présente) en fonction du mois défini dans cette feuille.

A partir de 5 feuilles (des sites de réservation d’hôtel pour l'exemple), je veux regrouper successivement les villes qui y sont présentes associées leur date. Sur la feuille regroupement, j'aimerais d'abord afficher les villes (sans doublon !) du site Booking, ensuite les villes de Last minute et ainsi de suite.

Mais voilà en testant uniquement sur 2 mois j'ai déjà plusieurs grosses erreurs :

  • La feuille Showroom privé n'est JAMAIS prise en compte
  • Beaucoup de données manquent
  • La feuille Lastminute a l'air de prendre le dessus sur d'autres feuilles ...
  • Et sûrement d'autres ...

J'ai au début pensé qu'Excel calculait trop vite chaque boucle For et réécrivait toujours sur la même ligne donc j'ai tenté de mettre des tempos mais toujours le même problème ...

J'ai essayé de "fusionner" les variables m,n,o,p,q en les nommant toutes m pour afficher un maximum d'infos mais je ne comprends pas non plus le problème

J'ai essayé d'ajouter des Exit For pour séparer les boucles peut-être ? Mais toujours rien !

En conclusion j'ai essayé beaucoup de choses mais n'arrive pas à avoir ma macro fonctionnelle, et comme vous le voyez elle est longue pour au final pas grand chose et je suis certain que vous l'écririez vous en à peine 10 lignes Mais j'essaie de progresser

Dernier problème j'aimerais beaucoup utiliser le mode Pas à pas détaillé pour voir l'avancement des variables mais le débogueur n'indique pas d'erreur ...

En vous remerciant par avance de l'aide que vous pourriez m'apporter, même minime

PS: je tiens absolument à utiliser VBA (le but est aussi et surtout de me perfectionner)

Arthur

Bonjour Arthur,

J'ai parcouru ton fichier. Je cherche où se trouve ton main car la procédure que tu as proposée prend en arguement une plage de cellules.

Où se trouve la procédure principale? Histoire de comprendre ce qu'est la variable "target"

bien à toi,

Yeshua.

bonjour

j'ai fait pour les 2 premiers sites

astuce : mettre des zones pleines de "=" qui vont afficher les valeurs des autres sites sous le premier

pense à laisser des lignes vierges entre chaque zone, car elles vont s'allonger !

ensuite un bête TCD (qui ne sert qu'à filtrer)

aucun VBA

aucune formule (autre que des "=" )

amitiés

Bonjour Arthur,

J'ai parcouru ton fichier. Je cherche où se trouve ton main car la procédure que tu as proposée prend en arguement une plage de cellules.

Où se trouve la procédure principale? Histoire de comprendre ce qu'est la variable "target"

bien à toi,

Yeshua.

Tout d'abord merci d'avoir jeté un oeil !

Je pense avoir du coup mal utilisé Target car je n'ai pas de procédure principale, toute est concentré dans la feuille Regroupement ... Si le problème vient de là alors tant mieux ! Le but des premières lignes était simplement de supprimer les plages concernées à chaque changement de mois (pour réinitialiser on va dire).

@jmd merci pour la solution elle n'est pas mal du tout ! Malheureusement j'aimerais beaucoup utiliser du VBA pour progresser là dessus plutôt que des filtres

@jmd merci pour la solution elle n'est pas mal du tout ! Malheureusement j'aimerais beaucoup utiliser du VBA pour progresser là dessus plutôt que des filtres

re

mon avis perso : ne pas apprendre VBA tout de suite. Commencer par bien apprendre Excel et toutes ses magnifiques fonctionnalités.

amitiés

Pour des affichages sans doublons, je te recommanderais de créer des variables dictionnaires pour enregistrer de manière unique tes couples villes et date de booking.

Option explicit
Sub Regroupement()
    Dim c as range, i ,a as integer
    Dim Mydico1, Mydico2, Mydico3,  Mydico4 as object,   'Créer autant de dictionnaires que de feuilles du classeur moins 1.
    Dim ws as worksheet, wb , wbR as workbook

    Set wb=workbooks("TonClasseurDansLequelTuTravailles")
    Set wsR=wb.worksheets("FeuilleDansLaquelleTuVeuxRegrouper")
    i=1
    For each ws in wb.worksheets
        If ws.name <> wsR.name then
            Set Mydico & i=createobject("Scripting.dictionary") 'après avoir vérifié que la référence Microsoft Scripting Runtime est activée à partir de l'onglet "Tool" > "Références"
            With ws
                For each c in range(.range("A1"), .Range("A" & .range("A" & rows.count).end(xlup).row) ) '   Si la cellule des villes est dans la colonne A de toutes feuilles
                    If not MyDico & i.exists(c.value) then MyDico & i.add c.value, c.offset(,5)   ' si les dates sont situées cinq colonnes à droite de la colonne parcourue des villes (colonne A)
                Next c
            End with

            a=5   'Je veux afficher à partir de la ligne 5 dans la sheet de regroupement

            With wbR
                .[J & a].resize(Mydico & i.count)=application.transpose(MyDico & i.keys)   'On colle les ville dans la colonne J à partir de la ligne 5
                .[K & a].resize(Mydico & i.count)=application.transpose(MyDico & i.items) 'On colle les date heure dans la colonne K à partir de la ligne
                b = a + MyDico & i.count 'On redéfinit la prochaine ligne de collage des valeurs

                For each c in range(.range("I" & a), .range("I" & b))
                    c.value=ws.name
                Next c
                a=b
            End With
            i=i+1
        End if
    Next ws
End sub

Je n'ai pas eu le temps de la tester. Mais une proposition pour parcourir et remplir tous les nom de sites en colonne I, les villes dans la colonne J, les heures date dans la colonne K dans la feuille de regroupement.

Tu n'as plus qu'à:

  • t'arranger que l'organisation de tes feuilles de données (Hors feuille de regroupement) soit standardisé (même structure)
  • Modifier le A du code pour adapter à la colonne qui contient tes villes ( tu as colonne C je crois)
  • Compter le nombre de colonnes qui séparent la colonne ville de la colonne date-heure (4 dans ton cas je crois, donc a=4)
  • Modifier tes colonnes de destination dans la feuille regroupement (dans ton cas, I=C, J=D, K= ? )

Pour les mois, tu pourras enfin faire une dernière boucle sur les dates affichées désormais dans ta feuille regroupement qui contient l'historique des autres feuilles. Tu fais un couper-coller de tout ton historique dans une autre feuille de sauvegarde (nommée historique par exemple que tu peux cacher ) et tu fais ensuite un if la date parcourue est égale à la date souhaitée, tu l'affiche dans la feuille regroupement si j'ai bien compris le besoin. Tu peux aussi faire un tri croisssant à la fin pour rendre joli l'affichage.

Je pense enfin que tu devrais plutôt créer un module dans lequel travailler (au lieu de travailler directement dans la feuille de destination).

En espérant t'avoir aidé....

Bien à toi,

Yeshua.

Rechercher des sujets similaires à "regroupement valeurs mois doublon"