Réduction de synthèse de TCD. Gérer (supprimer?) les blancs?

Bonjour à tous,

Dans le fichier exemple joint : 2 onglets

  • Le 1er ("Source")est un copiage de valeur de résultats que j'obtiens avec un Tableau Croisé Dynamique.
  • Le second ("Résultat souhaité"), comme son nom l'indique, est le résultat que je souhaiterais obtenir par macro.

La consultation du fichier est certainement plus probante que mes explications, l'idée étant de supprimer les "blancs" ligne par ligne mais en conservant la référence à l'entête (ici "C", ou "E", ou "CE"), et en les numérotant si possible.

Plutôt que "supprimer les blancs", je pensais qu'une méthode consistant à "supprimer les doublons" serait peut-être plus rapide, mais resterait le soucis du "blanc" en 1ère colonne (J ici).

Les particularité :

  • Le nombre de "C", de "E" et de "CE" est aléatoire, et tous ne sont pas forcément présents (quelquefois uniquement du "C",...)
  • Le nombre de lignes peut aller jusqu'à 3000
  • Il n'y a jamais 2 fois le même chiffre sur la même ligne (à partir de la colonne J)
  • Le nombre de colonnes total est variable.

Merci par avance si vous vous penchez sur mon soucis.

J'espère que le fichier sera explicite...

Si vous avez une suggestion pour modifier le titre du post, n'hésitez pas !

Salut,

vois si ça te convient (à tester)

Bonjour Game Over, et merci de ton intérêt.

Malheureusement, cela ne fonctionne pas du tout, je me suis sans doute mal expliqué...

Ton code supprime les colonnes complètement vides, mais les blancs restent à leurs places... L'idée étant de "resserrer" chaque ligne le + à gauche possible, et en conservant l'entête (C, E ou CE).

Le Bonus serait, comme dans l'exemple fourni, que la 1ère colonne C se nomme C1, la 2nde C2,... La 1ère colonne E se nomme E1, la 2nde E2,...

Merci encore,

Oups, j'ai mal compris...

je te corrige ça

Non, c'est moi qui n'étais pas clair je pense...

Merci de te pencher sur mon cas...

Moins évident que la première proposition !

A tester tout de même.

Bonsoir GameOver,

Merci beaucoup, cela semble bien fonctionner..

8 secondes environ pour un fichier de 800 lignes!

Si tu acceptes de m'aider encore sur le sujet, j'aurais 2 requêtes supplémentaires sur le sujet...

J'ai essayé de rentrer dans ton code pour adapter, mais c'est au delà de mes compétences :

- Je crois comprendre que le code se sert des couleurs de remplissage des entêtes de colonnes. Est-il possible de s'en passer (que le code fonctionne même s'il n'y a pas de différentiation de couleur sur les entêtes ? J'ai mis en page et en forme pour aider la compréhension, mais ce ne sera pas le cas avec le TCD, et j'ai essayé avec une Mise en forme conditionnelle, ça ne fonctionne pas...

- La "copie" de la Feuille peut me gêner, car la l'onglet "Source" est censé être en un Tableau Croisé Dynamique normalement (j'ai dans l'exemple uniquement coller les valeurs et le format du TCD original pour simplifier et éviter de poster trop d'onglets). Peut-on adapter le code pour qu'il copie les valeurs et le format des données dans l'onglet "Résultat Final" plutôt que dupliquer la Feuille ?

En tous les cas, merci beaucoup déjà, cela m'aide déjà beaucoup...

Je t'envoie une version modifiée de la proposition précédente qui bugait lorsque toutes les cellules du tableau étaient remplies.

Cette version prend également en charge le cas invraisemblable où ton résultat serait le même que ton tableau initial (J'ai mis un onglet pour l'exemple - n'oublie pas que l'onglet de référence est toujours celui nommé Source).

Macro à vérifier de façon plus poussée tout de même.

Pour répondre à tes questions :

1 - La macro ne prend maintenant plus pour référence la couleur de l'entête mais sa valeur (C - E - CE).

2 - C'est trop abstrait pour moi pour pouvoir te répondre, je préfèrerais d'abord voir le format original de ton document.

Bonsoir et encore merci Game Over,

Ci joint un fichier "complet" intégrant le fameux TCD sur l'onglet source.

Il n'a que des C et des E, pas de CE pour l'exemple.

Par contre, il y a un décalage d'une ligne au regard du 1er fichier fourni (les C, E,.. sont ligne 2 dans le dernier fichier (avec le TCD) alors que dans le fichier initial, ils sont ligne 1).

Avec encore tous mes remerciements !

Salut,

je pense qu'on y est maintenant...

Version à tester.

Bonjour Game Over,

Merci beaucoup, cela semble parfait !!!

J'ai simplement rajouter (avec l'enregistreur de macros) le copier/coller du format, pour conserver les formats de date et d'heures...

Encore Merci !!!

Bonsoir à tous, Bonsoir Game Over,

Ouille, je tombe sur un soucis incompréhensible pour moi.

Soudain, sur la partie :

Function DernierL(zz As String) As Long
 DernierL = Sheets(zz).Cells.Find("*", , , , xlByRows, xlPrevious).Row
End Function

j'obtiens une erreur :

Erreur d'éxécution '91': Variable objet ou variable de bloc with non définie

.

Je ne comprends pas pourquoi.

J'ai essayé d'intégrer cette partie dans un énorme fichier (avec beaucoup d'autres onglets, beaucoup d'autres macros, beaucoup de modules...

J'ai collé le code dans un nouveau module..

Et j'obtiens ce message d'erreur.

Si tu (ou quelqu'un tu pouvais encore m'aider sur ce point, je t'en serais de nouveau très reconnaissant...

bonjour,

cette fonction recherche le numéro de la dernière ligne non vide d'une feuille.

Le message d'erreur indique que la feuille sur laquelle est faite la recherche est vide.

J'en déduis qu'une plage de ton TCD (C - E - CE) ne contient pas d'info.

J'ai donc modifié la macro pour qu'elle prenne aussi en charge ce cas de figure (Plage C vide) avec un exemple.

Comme d'hab. à vérifier

(onglet planning supprimé pour permettre l'envoi)

Bonjour Game Over,

Merci de ta réponse et de ton suivi !

Malheureusement, il me reste un soucis.

Effectivement, la macro semble tourner en boucle à la fin avec l'exemple joint suivant.

Ce qui est notable dans ce fichier:

Les C, E,... débutent en colonne K (au lieu de I).

J'ai changé l'ordre des colonnes avant K (je ne pense pas que cela soit important)

Il y a une colonne C (vide) avant les E..

J'espère que tu pourras m'aider sur ce dernier point !

Il semble que des colonnes vides affectaient le bon fonctionnement de la macro.

J'ai donc ajouté une boucle qui efface toutes les colonnes vides avant le traitement des cellules vides.

Re bonjour,

Merci encore,

Malheureusement, il y a toujours un soucis.

L'exemple joint tourne en boucle.

Sans doute encore un soucis de (vide), (vide1)...

Autant pour moi, j'avais joint le mauvais fichier.

Voici le bon

Superbe, merci beaucoup, c'est parfait !

Temps d'exécution très rapide!

J'ose abuser en te demandant s'il est possible de supprimer également la dernière ligne (ou il est écrit "vide" dans plusieurs colonne).

A défaut, je pense faire un simple rechercher/ remplacer que je ferais avec l'enregistreur de macro...

Merci encore !!


J'ai bidouiller un peu :

Tu sais que ma source est un TCD

J'ai modifier la source de ce TCD afin qu'elle soit "dynamique" (en fonction de la taille des plannings).

Du coup, plus de "vide" (ni en dessous, ni en colonne...)

Encore tous mes remerciements !

Ici, la macro considère que seule la dernière ligne peut avoir la mention (vide).

D'autre part, si la première colonne de la dernière ligne contient le mot vide, alors toute la ligne est vide.

Si ces suppositions ne sont pas toujours vraies, fais moi parvenir des exemples les contredisant et j'adapterai la macro.

pour info, ta feuille source contenait une ligne d'en-têtes en en ligne 312, je ne sais pas trop ce que c'est et je l'ai enlevée mais si c'est présent de façon récurrente, ça fera planter la macro.

Je pense que je vais partir sur ton fichier précédent finalement.

En effet, il peut arriver (très rarement) que la 1ère colonne soit vide et pas les autres...

Du coup, je pense que définir dynamiquement la source du TCD (que j'ai réussie à faire, c'est ok) est la solution pour ces histoires de vide, en restant donc sur ton fichier précédent.

Dis moi juste si tu penses que je fais fausse route.

Je me répète, mais merci beaucoup !!!

Saurais-tu me dire d'autres cas qui potentiellement peuvent faire planter? J'imagine que si une cellule de la colonne J (heure de fin) est vide, ça plante ?

Merci encore !!

Rechercher des sujets similaires à "reduction synthese tcd gerer supprimer blancs"