Création d'un tableau dans une nouvelle feuille par un usf

gulibert

XLDnaute Junior
Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

Bonjour à tous,
je suis actuellement face à un léger problème, je souhaite créer une copie de ligne de tableau en fonction du mois dans une nouvelle feuille qui portera le nom du mois et sera trié chronologiquement.... C pas trés facile à comprendre et comme un bon exemple vaut mieux qu'un long discours je vous joint un petit fichier qui vous montrera ou j'en suis...;)
Merci d'avance à vous tous
 

Pièces jointes

  • création tableau.zip
    42.3 KB · Affichages: 39
Dernière édition:

gulibert

XLDnaute Junior
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

Rebonjour à toi ami lecteur,
Mon explication est elle incompréhensible?
Ma question est-elle trop bête?
Indique le moi s'il te plait car je suis vraiment bloqué de chez bloqué.
Pardon pour mon insolence,
Merci infiniment
 

Gorfael

XLDnaute Barbatruc
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

gulibert à dit:
Rebonjour à toi ami lecteur,
Mon explication est elle incompréhensible?
Ma question est-elle trop bête?
Indique le moi s'il te plait car je suis vraiment bloqué de chez bloqué.
Pardon pour mon insolence,
Merci infiniment
Salut
Si j'ai bien compris :
Tu as un tableau de synthèse et tu veux l'éclater :
une feuille par Mois/Année
Toutes les lignes de tableau doivent être reportée sur les feuilles correspondantes en fonction des la date en H

Si c'est pas ça précise
autre petite question : le titre de tes feuille c'est : le mois en texte suivi de l'année : c'est faisable comme ça, mais pas très pratique
- il faut convertir le texte en date . donc, il faut éliminer les feilles qui ne peuvent pas correspondre à une date pour ne pas générer d'erreur
Après le titre est facile, sauf que si on mettais dans l'onglet année-mois, ça simplifierais notablement la tâche.
Mais chacun à des habitudes alors, on s'adaptera !

Par contre, même si pour toi, c'est hyper urgent, pense toujours que si le forum n'était pas là, tu n'aurais rien. Alors (encore) un peu de patience

A+
PS j'ai besoin des noms des autres feuilles possibles dans le classeurs pour éliminer les erreurs
Question : pas de ligne de titres ni dans tableau, ni dans les feuilles ???
 
Dernière édition:

gulibert

XLDnaute Junior
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

Bonjour gorfael,

merci beaucoup de m'accorder un peu de temps,

Gorfael à dit:
même si pour toi, c'est hyper urgent, pense toujours que si le forum n'était pas là, tu n'aurais rien. Alors (encore) un peu de patience???
Je m'excuse sincérement je ne voulais pas paraitre si préssé et je suis tout à fait conscient de la chance qu'est ce forum et je l'aprécie énormément

Gorfael à dit:
Salut
Si j'ai bien compris :
Tu as un tableau de synthèse et tu veux l'éclater :
une feuille par Mois/Année
Toutes les lignes de tableau doivent être reportée sur les feuilles correspondantes en fonction des la date en H???
OUI c'est exactement ça

Gorfael à dit:
le titre de tes feuille c'est : le mois en texte suivi de l'année : c'est faisable comme ça, mais pas très pratique
- il faut convertir le texte en date . donc, il faut éliminer les feilles qui ne peuvent pas correspondre à une date pour ne pas générer d'erreur ???
J'ai essayé des nouveaux trucs dans mon code et maintenant c'est bon pour le titre des onglets, ils ont des noms compréhensible. Ton idée du année-mois ne me gène absolument pas mais comme j'ai plus de mois que d'année je me disais que ca irait plus vite:confused:



Gorfael à dit:
Question : pas de ligne de titres ni dans tableau, ni dans les feuilles ???
Bah en fait je crois que non je mettrais surement cela dans un unique workbook et j'irais chercher ma liste dans un autre.
Mais oui il y'aura des titres en haut des colonnes de "tableau" et des feuilles créees"
 

Gorfael

XLDnaute Barbatruc
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

Re...
tu peux m'expliquer comment tu as colorié la colonne H de tableau ?
L'index de couleur et la couleur sont totalement indépendant de la coloration de la colonne
et s'il y a d'autres manips de ce style, merci de me les dires, que je ne cherhce pas des problèmes là où il n'y en a pas

Je fais juste une édition, pour coller le résultat de mes élucubration
feuille Cde : 2 boutons
- création des onglets de dates
il faudrait peut-être voir soit à tester la présence des enregistrements dans les onglets de dates, soit à supprimer les onglets de dates
- tri des onglets de date uniquement, qui viennent se mettre derrière tableau

A+
 

Pièces jointes

  • création tableau Mod .zip
    39.5 KB · Affichages: 48
Dernière édition:

gulibert

XLDnaute Junior
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

Re,

Merci beaucoup pour ce programme assez imposant... J'essaye de le comprendre et je bloque sur des petits trucs;
Tout d'abord le Tab_F(1,X) je comprends pas trop ce que c'est et je le trouve pas dans les fonctions de l'aide...:confused:
Ensuite je ne comprends pas à quel moment du code s'effectue la copie des lignes vers les feuilles.:confused:
Et que veux tu dire en parlant de tableau feuille?:confused:

Sinon merci c'est super, :) c'est exactement le résultat que je cherchais, je vais ajouter un bouton pour supprimer les feuilles et puis des traitements graphiques (je crois que j'ai vu ca qq part).
merci beaucoup,
A+
 

Gorfael

XLDnaute Barbatruc
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

Salut gulibert
Quand tu connais, c'est tellement évident, que c'est difficile de se dire que l'autre ne connaît pas ;)

Pour la copie, cherche COPY

Tab_F est une variable tableau à 2 dimensions
pour le nom de mes variables, j'utilise des noms qui en rapport avec leurs usages :
Tableau_des_Feuilles étant un peut long, je l'ai tronqué en Tab_F
dans la première partie je charge ce tableau avec le nom des feuilles
Code:
For X = 1 To Sheets.Count
    Tab_F(1, X) = Sheets(X).Name
    If Asc(Left(Tab_F(1, X), 1)) >= Asc("0") And _
    Asc(Left(Tab_F(1, X), 1)) <= Asc("9") Then
        Tab_F(2, X) = CDate(Tab_F(1, X))
    End If
    If Tab_F(1, X) = "tableau" Then Flg_Test = True
Next X
en fançais :
pour X = 1 jusqu'au nombre de feuilles du classeur
variable Tab_F(1,X) = nom feuille (index X)
Si le premier caractère du nom de la feuille est compris entre 0 et 9, alors
comme tu n'as pas d'autres feuilles que Cde, Tableau et les mois, ça veut dire que l'onglet représente un mois
-variable Tab_F(2,X) = le 1er du mois représenté par l'onglet)
fin du test
si le nom de l'onglet est "tableau" Flg_Test=VRAI
plus loin je teste si Flg_test = FAUX, comme "tableau" est essentiel, si on ne l'a pas, on avertit et on arrête la macro
Fin de boucle

Un petit exemple valant mieux qu'un long texte, on va dire qu'on a que 3 feuilles :
index 1(feuilles) = "Cde"
index 2(feuilles) = "tableau"
index 3(feuilles) = "2006-03"
Comme on vient juste de déclarer les variables, elle sont soit vides (texte), soit égales à 0 (nombre), soit égales à FAUX (Booléenne), soit égale à rien/Nothing (objet)

X = 1 => (X>3(nb feilles=3)) = FAUX => ligne suivante
Tab_F(1,1) = "Cde"
1re lettre (Tab_F(1,1) ) Comprise entre 0 et 9 : "C" compris entre "0" et "9"
code ASCII de C : 67 / 0 : 48 / 9 : 57
Non => pas de sinon => instruction qui suit End If
(Tab_F(1,1) = tableau) = FAUX on passe à la ligne suivante
Next on retourne à la ligne For X=1

X=X+1(step 1 par défaut) => X = 2 => (X>3) = FAUX => ligne suivante
Tab_F(1,2) = "Tableau"
(0 <= 1re lettre Tab_F(1,2) : t <= 9) = FAUX => ligne après End If
(Tab_F(1,2) = "Tableau") = VRAI => 2me partie de la ligne Flg_Test = VRAI
Next => retour Ligne For X

X = X + 1 = 3 => (X > 3) = FAUX => ligne suivante
Tab_F(1,3) = "2006-03"
(0 <= 1er caractère de Tab_F(1,3) : 2 <= 9 ) = VRAI => ligne suivante
Tab_F(2,3)=conversion du texte de Tab_F(1,3) en une date => Tab_F(2,3) = 01/03/2006 (Plus exatement #01/03/2006#)
On passe à la ligne suivant End IF
(Tab_F(1,3) = "tableau") = FAUX =>ligne suivante
Next => retour à la ligne For X=1

X = 3+1 = 4 : (X > 3) = VRAI => on va directement à la ligne suivant Next

En final on a donc :
Tab_F(1,1) = "Cde" _______/___ Tab_F(2,1) = ""
Tab_F(1,2) = "Tableau" ___/___ Tab_F(2,1) = ""
Tab_F(1,3) = "2006-03" ___/___ Tab_F(2,1) = #01/03/2006#

Tu peux le visualiser en exécutant ta macro en mode Pas-à-pas et en mettant ton curseur sur les variables
Attention, il faut que l'instruction correspondante soit déjà effectuée, donc que le surlignage en jaune soit à la ligne suivante - Les variables étant liées à la déclaration, si tu regardes une variable en cours, à différentes lignes, même si l'instruction que tu pointes dis de fixer la variable à une valeur, par exemple Y=1, si la dernière ligne de code exécutée fait que Y=10, même dans la ligne Y=1, y est égal à 10

J'utilise le même nom de variable pour les 2 macros : Tab_F
Dans la macro d'éclatement, c'est un tableau à 2 dimensions, dont la première est du texte et la seconde des dates : je suis obligé de la déclarer en Variant (valeur par défaut)
Dans l'autre macro, elle n'a qu'une dimension (un seul indice) et je la déclare en texte(string) pour économiser de la mémoire.

J'espères que malgré mon laïus, t'arriveras à comprendre, sinon, redemande des explications, j'essaierais d'être plus compréhensible.
Il y a sans doute des points que tu connais, mais ne sachant pas lesquels, il est plus facile de partir du principe que tu ne connais rien : C'est pas pour vexer ou pour dévaloriser, c'est pour que tu comprennes quelque soit ton niveau

A+
 
Dernière édition:

gulibert

XLDnaute Junior
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

re,
merci beaucoup pour ton explication détaillé, je comprends enfin les subtilités de ton code...:)
Il est trés efficace, j'ai rajouté un boutton pour supprimer toutes les nouvelles feuilles crées (c'était plus simple:p ) et je vais maintenant m'attaquer à un ajout de graphique avec le tableau:eek: .
Merci beaucoup pour ton aide trés précieuse et trés efficace.
Juste pourrais tu m'indiquer comment je pourrais ajouter à chaque feuille les titres des colonnes? (je croyais que je m'en sortirais mais en fait je galère un peu:D )
Merci encore,
au plaisir
 

Gorfael

XLDnaute Barbatruc
Re : Création d'un tableau dans une nouvelle feuille par un usf (avec tri chronologique)

gulibert à dit:
re,
merci beaucoup pour ton explication détaillé, je comprends enfin les subtilités de ton code...:)
Il est trés efficace, j'ai rajouté un boutton pour supprimer toutes les nouvelles feuilles crées (c'était plus simple:p ) et je vais maintenant m'attaquer à un ajout de graphique avec le tableau:eek: .
Merci beaucoup pour ton aide trés précieuse et trés efficace.
Juste pourrais tu m'indiquer comment je pourrais ajouter à chaque feuille les titres des colonnes? (je croyais que je m'en sortirais mais en fait je galère un peu:D )
Merci encore,
au plaisir
Re...
Le plus simple : tu crées ta ligne de titre en ligne 1 de la feuille tableau
il faut que tu modifies cette ligne de code :
For Each Cel In F.Range("H1:H" & F.UsedRange(F.UsedRange.Cells.Count).Row)
et que tu la remplaces par
For Each Cel In F.Range("H2:H" & F.UsedRange(F.UsedRange.Cells.Count).Row)

un chiffre à changer, pour que la boucle évite la ligne de titre
ensuite, à la création de la nouvelle feuille :
If Flg_Test = False Then
'redimmensionnement du tableau feuilles en conservant les données
ReDim Preserve Tab_F(1 To 2, 1 To X)
'nouvelle feuille et nommage
Set NewSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))
NewSheet.Name = Format(Cel_Date, "yyyy-mm")
Tab_F(1, X) = NewSheet.Name
Tab_F(2, X) = Cel_Date
End If
il faut ajouter une ligne :
If Flg_Test = False Then
'redimmensionnement du tableau feuilles en conservant les données
ReDim Preserve Tab_F(1 To 2, 1 To X)
'nouvelle feuille et nommage
Set NewSheet = Worksheets.Add(after:=Worksheets(Worksheets.Count))
NewSheet.Name = Format(Cel_Date, "yyyy-mm")
Tab_F(1, X) = NewSheet.Name
Tab_F(2, X) = Cel_Date
F.Rows(1).Copy (NewSheet.Rows(1))
End If
et tant que j'y suis, j'ai fais une erreur dans la macro de tri

If Y = 1 And Tab_F(Y) = "" Then
MsgBox ("rien à trier")
Exit Sub
End If
à remplacer par
If Y = 1 And Tab_F(1) = "" Then
MsgBox ("rien à trier")
Exit Sub
End If

avec ça, les ça devrait répondre à tes soucis.
La ligne de code en rouge, les balises de mise en forme sont sur les lignes avant et après, donc tu peux la sélectionner et faire du copier/coller si tu veux
Les 2 autres modifs ne concernent qu'un caractères, ça sera plus facile de le changer directement

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 520
Messages
2 089 292
Membres
104 089
dernier inscrit
salimgtu