Présentation d'un TCD

Bonjour à tous,

Sans doute une question très bête, mais je n'y arrive pas :

Lors de la création de mes Tcd, la présentation est telle que les références de la 1ère colonne ne sont pas répétées lorsque les lignes suivantes lui sont liées, hors je voudrait qu'elles le soient. Un petit exemple simple :

J'obtiens par exemple :

Marc..........12,5.......43

................ 7..........38

................ 8..........25

David..........11..........29

................10..........42

.................9..........34

.................7..........28

Et je voudrais obtenir :

Marc..........12,5.......43

Marc...........7..........38

Marc...........8..........25

David..........11.........29

David..........10.........42

David...........9..........34

David...........7..........28

Soit directement dans mon Tcd si c'est possible, soit en créant un tableau basé sur le Tcd original....

Avez-vous des pistes ?

Merci par avance !!!

Bonjour,

Ce que tu voudrais n'est pas possible à faire avec un TCD.

Vois toutefois les modèles de mise en forme par l'option Format / mise en forme automatique.

Amicalement

bonsoir

ça serait très interessant de pouvoir voir le tableau initial et surtout de à quoi correspondent les 3 lignes pour marc etc... En postant un exemple on pourra se prononcer plus précisemment (ajout d'un champs ou élément calculé) export des lignes correspondant à une personne etc...

cordialement

oups, j'ai édité, je n'avais pas vu que la mise en page avait supprimer mes espaces... Je les ai remplacés par des .... pour la lisibilité...

En fait, j'ai souvent besoin de ce format, je le fait donc "à la main".

Si ce n'est pas possible directement dans 1 Tcd, n'y aurait-il pas la possibilité d'une macro astucieuse qui le génèrerait d'après le Tcd ?

J'ai trouvé une possibilité, dites moi si on peut faire mieux ou plus simple svp :

si mes prénoms sont en colonne A (début du tableau en A1)

Je fait mon nouveau tableau en E1 par exemple.

En E1, je tape "=A1)

En E2, je tape "=SI(A2="";E1;A2)"

Et j'incrémente vers le bas...

Si mon tableau n'a que 3 colonnes :

Je tape en F1 : "=B1" et j'incrémente.

Puis je tape en G2 : "=C1" et j'incrémente...

Le soucis avec cette solution, c'est que si je l'automatise dans une macro, je ne sais pas comment faire pour signaler la fin de l'incrémentation... C'est sans doute simple, mais je ne vois pas... Peut-être une double condition en se servant de la colonne B, mais je ne maîtrise pas les double conditions... Une idée ???

Merci de votre intérêt en tout cas...

Si ce n'est pas clair, j'essaierai de poster un petit fichier exemple, dites moi...

bonjour

bravo pour les efforts d'explication et de tentatives pour trouver une solution...

Ce n'est pas que vos explications ne soient pas claires mais sans un fichier exemple on est un peu obligé de refaire le travail de préparation avant de proposer des solutions ! et il y a beaucoup de questions postées chaque jour. Donc tout le monde gagne du temps avec un classeur exemple sur lequel il est possible de travailler directement.

A bientôt

Désolé, voici donc un fichier exemple.

1er onglet, les données.

2ème onglet :

  • colonnes A et B le TCD tel que je l'obtient
  • colonnes E et F, ce que je veux obtenir automatiquement (soit une mise en forme du TCD que je ne sais pas faire, soit une macro qui permet de l'obtenir, idéalement quelque soit la forme du TCD (adaptable à tout TCD indépendamment du nombre de colonnes qui peut différer, ça, ce serait le top du top).

Merci beaucoup !!!

16essai-tcd.zip (9.55 Ko)

bonsoir

je ne vois pas trop où est le problème ou alors j'ai trop abusé de l'apéro estival !!! (ça peut arriver...)

créer un tcd

mettre le champ nom_enqueteur en champ de ligne

mettre le champ temps en champ de ligne par dessus le champ nom_enqueteur en plaçant le champ à droite

mais un TCD ne sert pas vraiment à ça, il suffirait de trier la base par nom enqueteur puis masquer les colonnes qu'on ne veut pas ou faire deux colonnes avec des formules de liaison

où est le problème ??? (à part mes mirettes qui ne voient peut être plus très clair ! la voiture reste au garage ce soir !)

amicalement

hips

re bonsoir,

Effectivement, l'exemple est ici sans doute mal choisi car les données sont déjà présentes dans le fichier de départ et il suffirait de trier et filtrer. Je l'ai fait rapidement car mon soucis partait du TCD généré..

Toutefois, c'est c'est peut-être moi qui ne vois pas très clair, car dans l'explication que vous donnez, soit je là lit mal, soit c'est exactement ce que j'ai fait pour obtenir mes colonnes A et B du 2ème onglet..... Et mon problème est que je voudrais un résultat tel que ce qui est affiché en colonnes E et F, avec les noms répétés à chaque ligne...

J'ai bidouiller quelques petites formules dans ce nouvel exemple qui me permet d'arriver à mes fins (3ème onglet).

Le soucis maintenant serait de créer une macro qui me permette d'arriver à ce résultat, mais quelque soit le nombre de lignes et de colonnes du TCD.... Le petit plus étant les bordures plus épaisses à chaque changement de la 1ère colonne.....

En tout cas, merci de vous pencher sur mon problème....

Cordialement....

11essai-tcd2.zip (11.01 Ko)

Bonjour à tous,

J'utilise des filtres élaborés plutôt que des TCD,

Ici, j'extrais directement des "Données" les 2 colonnes triées par dates et noms,

que veux-tu faire par la suite ?

Sub NouvBase()
Dim Lg%
'Macros par Claude Dubois pour "Kiriko" Excel-Pratique le 8 Août 2010
    Application.ScreenUpdating = False
    Sheets("Données").Activate
    Lg = Range("A65536").End(xlUp).Row
    With Sheets("Base")
        .Columns(3).Insert
        .Range("a1") = Range("i1") 'enquêteur
        .Range("b1") = Range("g1") 'temps
        .Range("c1") = Range("d1") 'date
        '---- extrait ----
        Range("a1:i" & Lg).AdvancedFilter Action:=xlFilterCopy, CopyToRange:= _
        .Range("a1:c1"), Unique:=True
        '---- tri par date et nom ----
        .Range("a1:c" & Lg).Sort Key1:=.Range("a1"), Order1:=xlAscending, Key2:= _
        .Range("c1"), Order2:=xlAscending, Header:=xlYes
        .Columns(3).Delete
        .Range("a:b").Columns.AutoFit
        .Activate
    End With
End Sub

Amicalement

Claude.

13kiriko-liste.zip (18.94 Ko)

Merci beaucoup, cela pourra m'être utile...

Mais mon besoin est de réellement partir d'un Tcd, idéalement adaptable à n'importe quel Tcd quelque soit son nombre de lignes et de colonnes, pour arriver à ce résultat... Il est vrai que dans mon exemple, il est beaucoup plus pratique de passer par les données, mais cet exemple n'était que pour présenter un tcd simple rapidement, ma problématique part bien d'un tcd, que l'on me fourni souvent sans les données initiales (le créateur me passe un fichier ou il fait un copier/coller des valeurs de son Tcd, je n'ai donc pas les données)... Il faut donc faire "comme si" le 1er onglet de mon exemple n'était pas là.....

Merci de votre attention en tout cas!!!

re,

Ok mais après, tu l'utilise ce TCD ?

Claude

Re,

Oui, j'en reçoit plusieurs de taille différentes, et je les transforme " à la main" pour obtenir le dernier onglet (le nom répété sur chaque ligne).

Comme tu peux voir, j'ai trouvé des formules qui me permettaient d'y arriver, mais je cherche une macro qui le ferait automatiquement quelque soit la taille du Tcd, avec des lignes plus épaisses à chaque changement de nom (Essai Tcd2).

Merci!!

re,

Sub NouvBase()
Dim Lg%, i%
'Macros par Claude Dubois pour "Kiriko" Excel-Pratique le 8 Août 2010
    Application.ScreenUpdating = False
    Sheets("TCD").Activate
    Lg = Range("A65536").End(xlUp).Row - 2
    Range("a1:b" & Lg).Copy
    With Sheets("Base")
        .Range("a1").PasteSpecial Paste:=xlPasteValues
        Application.CutCopyMode = False
        .Columns("b:b").NumberFormat = "[$-F400]h:mm:ss AM/PM"
        .Range("a:b").Columns.AutoFit
        .Activate
    End With
    For i = 2 To Lg
        If Cells(i, 1) = "" Then
            Cells(i, 1) = Cells(i - 1, 1)
        Else
           Range(Cells(i, 1), Cells(i, 2)) _
           .Borders(xlEdgeTop).Weight = xlMedium
        End If
    Next i
    With Range("a1:b" & Lg)
        .Borders(xlEdgeLeft).Weight = xlMedium
        .Borders(xlEdgeTop).Weight = xlMedium
        .Borders(xlEdgeBottom).Weight = xlMedium
        .Borders(xlEdgeRight).Weight = xlMedium
        .Borders(xlInsideVertical).Weight = xlThin
    End With
    Range("a1").Select
End Sub

Amicalement

Claude

12kiriko-liste2.zip (22.62 Ko)

C'est royal !!!

Merci beaucoup !!!

Si tu peux éventuellement me donner le paramètre à modifier pour que le résultat se crée sur un nouvel onglet (ça me permettra de l'appliquer occasionnellement sur un vrai TCD, car ici, ta solution marche parfaitement dans l'exemple que je t'ai décrit, mais en cas de vrai TCD, on ne peut pas "coller par dessus"), ça serait super....

En tout les cas, ça me dépanne vraiment, mille mercis !!!!

Si le "défi" t'intéresse, mais cette fois, ce n'est vraiment pas urgent pour moi, d'autres ont peut-être plus besoin de tes lumières, le cas se présente rarement, une évolution de ta solution pourrait mettre utile:

Un bouton avec une boite de dialogue demandant sur combien des premières colonnes appliquer la "recopie".. Je m'explique : Quelquefois, j'ai en 1ère colonne les noms, puis en 2ème des dates ou autre, qui elles aussi ne sont pas répétées.

Je ne sais pas ce qui est plus simple : "détecter" toutes les colonnes où il n'y a pas répétition automatiquement, ou créer une boite de dialogue demandant à l'utilisateur sur combien de colonnes il veut appliquer la duplication des cellules vers le bas... Je met un nouvel exemple, c'est peut-être plus simple....

En tout cas, encore merci !!!!

10essai-tcd3.zip (13.34 Ko)

Bonsoir,

Comme je disais + haut, je ne connais pas le fonctionnement des TCD,

mais si tu me dis que seule la dernière colonne est complète et que les précédentes

sont à compléter, alors oui on sait détecter sans boite de dialogue,

dans ton dernier exemple, les vides en A et B sont bien sur les mêmes lignes ?

confirme ?

Si tu peux éventuellement me donner le paramètre à modifier pour que le résultat se crée sur un nouvel onglet

on ne peut pas "coller par dessus"

développe, j'ai pas trop pigé ce point.

Claude

Re,

Merci encore de ton intérêt.

Oui, les vides en A et B sont sur les mêmes lignes, si j'ai bien compris la question.. Il peut arriver qu'il y ait dans la colonne B plusieurs "subdivisions" des noms en A. En gros, quelque soit la colonne, si une cellule est vide, il faut répéter ce qu'il y a dans la cellule supérieure...

Dans ta solution, le résultat se met en lieu et place du tableau existant, ce que je souhaitais, c'est qu'il se crée sur un nouvel onglet. En effet, dans le cas d'un vrai Tcd, on ne peut pas remplacer les cellules...

re,

La feuille "Base" est pour moi temporaire,

à toi de la renommer comme tu veux après la macro

Sub NouvBase()
Dim Lg%, CL%, i%, A As Byte
'Macros par Claude Dubois pour "Kiriko" Excel-Pratique le 8 Août 2010
    Application.ScreenUpdating = False
    Sheets("TCD2").Activate
    Lg = Range("A65536").End(xlUp).Row - 2
    CL = Columns(200).End(xlToLeft).Column

        Range(Cells(1, 1), Cells(Lg, CL)).Copy
        With Sheets("Base")
            .Range("a1").PasteSpecial Paste:=xlPasteValues
            Application.CutCopyMode = False
            .Columns(CL).NumberFormat = "[$-F400]h:mm:ss AM/PM"
            .Range("a:g").Columns.AutoFit
            .Activate
        End With
        Range(Cells(1, 1), Cells(Lg, CL)).Borders.LineStyle = xlNone
    '---- boucle sur toutes colonnes moins une ----
    For A = 1 To CL - 1
        For i = 2 To Lg
            If Cells(i, A) = "" Then
                Cells(i, A) = Cells(i - 1, A)
            Else
               Range(Cells(i, A), Cells(i, CL)) _
               .Borders(xlEdgeTop).Weight = xlMedium
            End If
        Next i
    Next A
    '----
        With Range(Cells(1, 1), Cells(Lg, CL))
            .Borders(xlEdgeLeft).Weight = xlMedium
            .Borders(xlEdgeTop).Weight = xlMedium
            .Borders(xlEdgeBottom).Weight = xlMedium
            .Borders(xlEdgeRight).Weight = xlMedium
            .Borders(xlInsideVertical).Weight = xlThin
        End With
    Range("a1").Select
End Sub

Claude

20kiriko-liste3.zip (21.23 Ko)

Bonjour, désolé de la réponse tardive, qui pouvait être interprétée comme un manque de reconnaissance, ce n'est pas le cas...

Mille mercis, je teste ça dès que je récupère mon ordi (je poste depuis mon téléphone)....

J'espère me former à Vba et pouvoir aider à mon tour, je trouve le principe de ce forum d'entraide plus que louable....

Encore merci!!!

Rechercher des sujets similaires à "presentation tcd"