MACRO : Nommer un tableau en fonction du nom de la feuille

piga25

XLDnaute Barbatruc
Bonjour,

Je n'arrive pas à trouver comment mettre une variable dans le code pour nommer un tableau en fonction du nom de la feuille.
Je copie un TCD sur une feuille en fonction du nom figurant dans une cellule ( la pas de problème cela fonctionne, j'ai 06 feuilles: ED FD SD EH FH SH). Par contre impossible de nommer ce nouveau tableau en fonction du nom de la feuille sélectionnée.

Dans le code suivant, cela ne fonctionne que pour la feuille ED

VB:
Sub impor()
Dim i, j As Variant

Application.ScreenUpdating = False

i = Sheets("TCD").[B2]

'Supression de l'ancien tableau
    Sheets(i).Activate
    j = [B13]
    Application.Goto Reference:="TableauED"
    ActiveSheet().ListObjects("TableauED").Unlist
    Range("D17", Range("C18").End(xlToRight).End(xlDown)).Select
    Selection.ClearContents
    Range("A1").Select
    Sheets("TCD").Select
    Range("D2").Select
    
' mise à jour des calculs TCD
Sheets("TCD").Activate
Calculate
' copie le tableau
Range("A6", Range("C7").End(xlToRight).End(xlDown)).Select
Selection.Copy Destination:=Sheets(i).Range("D17")

' Convertie les données copiées en tableau
Sheets(i).Select
Range("B18", Range("C18").End(xlToRight).End(xlDown)).Select
Sheets(i).ListObjects.Add(xlSrcRange, Range("$B$18", Range("C18").End(xlToRight).End(xlDown)), , xlYes).Name = "TableauED"
    Range("TableauED[[#All],[RangR]]").Select
Calculate
Range("B18").Select

'Trie du tableau
    ActiveWorkbook.Worksheets(i).ListObjects("TableauED").Sort.SortFields _
        .Clear
    ActiveWorkbook.Worksheets(i).ListObjects("TableauED").Sort.SortFields _
        .Add Key:=Range("TableauED[[#All],[RangR]]"), SortOn:=xlSortOnValues, Order _
        :=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets(i).ListObjects("TableauED").Sort
        .Header = xlYes
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    
Application.ScreenUpdating = True
End Sub
 

Pièces jointes

  • TAB MANUEL V5.xlsm
    770.8 KB · Affichages: 71
Dernière édition:

job75

XLDnaute Barbatruc
Re : VBA Nommer un tableau en fonction du nom de la feuille

Bonjour piga25,

Vu ton niveau en VBA, je suis très surpris que tu utilises encore des Select ou Activate.

Ils m'ont découragé d'essayer de comprendre ta macro.

A+
 

piga25

XLDnaute Barbatruc
Re : VBA Nommer un tableau en fonction du nom de la feuille

Bonjour le forum, Job75,

Mon niveau en VBA est très faible. Pour effectuer un code j'utilise l'enregistreur, puis seulement ensuite j'essais de simplifier le code.
Voila pourquoi mes demandes d'aide en VBA.
Ici je n'ai pas encore essayé de simplifier d'ou la présence des Select et des Activate

Si mes connaissances sont bonnes, mettre ceci
VB:
' mise à jour des calculs TCD
Sheets("TCD").Activate
Calculate
' copie le tableau
Range("A6", Range("C7").End(xlToRight).End(xlDown)).Select
Selection.Copy Destination:=Sheets(i).Range("D17")

comme cela
VB:
' mise à jour des calculs TCD
Sheets("TCD").Calculate
' copie le tableau
Range("A6", Range("C7").End(xlToRight).End(xlDown)).Copy Destination:=Sheets(i).Range("D17")

Pour le reste je pense qu'il faire ou inclure des With ... End With

Mais je n'ai toujours pas trouvé comment mettre le nom du tableau en variable

@ +
 

Si...

XLDnaute Barbatruc
Re : VBA Nommer un tableau en fonction du nom de la feuille

salut

pour faire référence à un des tableaux nommés "Tableaunn", tu peux essayer
Code:
  With Evaluate(["Tableau"& B2])
    .Clear 'ou autre
    ...
  End With
où B2 est la cellule contenant la fin du nom soit nn.
 

piga25

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

Bonjour,
Salut SI

Pas bien saisie ou je dois l'intégrer.

Après essai, cela ne fonctionne pas
VB:
' Convertie les données copiées en tableau
Sheets(i).Select
Range("B18", Range("C18").End(xlToRight).End(xlDown)).Select
Sheets(i).ListObjects.Add(xlSrcRange, Range("$B$18", Range("C18").End(xlToRight).End(xlDown)), , xlYes).Name = (["Tableau" & B2])
    Range("TableauED[[#All],[RangR]]").Select
Calculate
Range("B18").Select
Cela nomme en Tableau uniquement sans l’extension du nom de la feuille

Autre problème comment l'intégrer ici
VB:
...
Range("TableauED[[#All],[RangR]]").Select
...
 

Si...

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

salut

je n'avais pas etudié ta macro. La proposition faite n'est pas fiable (ne marche pas toujours :confused:).
un essai avec ce que j'ai compris (copie du tableau du TCD vers le tableau de la feuille avec une sélection d'un seul item).
 

Pièces jointes

  • TCD vers Tableaux.xlsm
    803 KB · Affichages: 52

job75

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

Bonjour piga25, salut Si...

J'ai quand même pris le temps d'étudier le problème.

En commençant par effacer les plages A11:Z16 des feuilles ED EH FH FD SD SH, il faudrait en effet un traitement spécial assez compliqué pour les titres qui s'y trouvaient.

La macro :

Code:
Sub CopierTCD()
Dim ad$, source As Range, deb As Range, dercel As Range
ad = "D17" 'adresse de la cellule de destination, à adapter
ThisWorkbook.RefreshAll 'MAJ du TCD si nécessaire
With Sheets("TCD")
  Set source = Intersect(.UsedRange, .Rows("6:" & .Rows.Count))
  On Error Resume Next 'pour plusieurs raisons
  With Sheets(.[B2].Text)
    Set deb = .Range(ad)(2, -1) 'B18
    .ListObjects("Tableau" & .Name).Unlist
    .Rows.Hidden = False 'si des lignes sont masquées
    .Range(.Range(ad), .Cells(.Rows.Count, 26)).Clear 'RAZ
    source.Copy .Range(ad)
    Set dercel = .Range(ad)(source.Rows.Count, source.Columns.Count)
    .ListObjects.Add(xlSrcRange, .Range(deb, dercel)).Name = "Tableau" & .Name
    .Range("Tableau" & .Name).Sort deb, xlAscending, Header:=xlYes 'tri
    '---masque les lignes pouvant rester sous le tableau---
    deb(dercel.Row - deb.Row + 2).Resize(.Rows.Count - dercel.Row) _
      .SpecialCells(xlCellTypeFormulas).EntireRow.Hidden = True
    .Activate 'facultatif
  End With
End With
End Sub
Fichier joint.

Edit : le fichier n'était pas bon, j'avais introduit des liaisons.

A+
 

Pièces jointes

  • TCD vers tableaux(1).xlsm
    787.8 KB · Affichages: 71
Dernière édition:

piga25

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

Bonsoir le forum, SI, JOB75

Merci.
Rien à voir avec mes codes.
Je vais tester cela en profondeur sur le gros fichier.

SI: Code vraiment très court; Par contre il ne met pas le résultat final (après la copie) sous la forme de tableau qui peu être trié.
Me reste à bien comprendre le code.

Job75: Les premiers tests semblent bon.Comme pour SI, je dois comprendre le principe du code.

En tout cas un gros merci et à bientôt pour vous dire si j'ai bien réussi à tout adapter au gros fichier.
 

job75

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

Re,

Ceci est mieux, les formules en colonnes B:C sont effacées (RAZ) puis rétablies sur la hauteur du tableau :

Code:
Sub CopierTCD()
Dim ad$, source As Range, deb As Range, dercel As Range
ad = "D17" 'adresse de la cellule de destination, à adapter
ThisWorkbook.RefreshAll 'MAJ du TCD si nécessaire
With Sheets("TCD")
  Set source = Intersect(.UsedRange, .Rows("6:" & .Rows.Count))
  On Error Resume Next 'pour plusieurs raisons
  With Sheets(.[B2].Text)
    Set deb = .Range(ad)(2, -1) 'B18
    Set dercel = .Range(ad)(source.Rows.Count, source.Columns.Count)
    .ListObjects("Tableau" & .Name).Unlist
    .Range(.Range(ad), .Cells(.Rows.Count, 26)).Clear 'RAZ
    deb(3).Resize(.Rows.Count - deb(2).Row, 2).Clear 'RAZ
    deb(2).Resize(, 2).AutoFill .Range(deb(2), dercel).Resize(, 2) 'pour les formules
    source.Copy .Range(ad)
    .ListObjects.Add(xlSrcRange, .Range(deb, dercel)).Name = "Tableau" & .Name
    .Range("Tableau" & .Name).Borders.Weight = xlThin
    .Range("Tableau" & .Name).Sort deb, xlAscending, Header:=xlYes 'tri
    .Activate 'facultatif
  End With
End With
End Sub
Fichier(2).

Edit : le fichier n'était pas bon, j'avais introduit des liaisons.

Bonne fin de soirée.
 

Pièces jointes

  • TCD vers tableaux(2).xlsm
    787.7 KB · Affichages: 48
Dernière édition:

job75

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

Re piga25,

J'ai des doutes sur tes formules de calcul des points en colonne C...

Déjà il paraît nécessaire de défusionner les cellules obtenues en E17:I17 :

Code:
Sub CopierTCD()
Dim ad$, source As Range, deb As Range, dercel As Range, ma As Range
ad = "D17" 'adresse de la cellule de destination, à adapter
ThisWorkbook.RefreshAll 'MAJ du TCD si nécessaire
With Sheets("TCD")
  Set source = Intersect(.UsedRange, .Rows("6:" & .Rows.Count))
  On Error Resume Next 'pour plusieurs raisons
  With Sheets(.[B2].Text)
    Set deb = .Range(ad)(2, -1) 'B18
    Set dercel = .Range(ad)(source.Rows.Count, source.Columns.Count)
    .ListObjects("Tableau" & .Name).Unlist
    .Range(.Range(ad), .Cells(.Rows.Count, 26)).Clear 'RAZ
    deb(3).Resize(.Rows.Count - deb(2).Row, 2).Clear 'RAZ
    deb(2).Resize(, 2).AutoFill .Range(deb(2), dercel).Resize(, 2) 'pour les formules
    source.Copy .Range(ad)
    Set ma = .Range(ad)(1, 2).MergeArea: ma.UnMerge: ma(1).Copy ma 'défusionne E17
    .ListObjects.Add(xlSrcRange, .Range(deb, dercel)).Name = "Tableau" & .Name
    .Range("Tableau" & .Name).Borders.Weight = xlThin
    .Range("Tableau" & .Name).Sort deb(1, 2), xlDescending, Header:=xlYes 'tri sur points
    .Activate 'facultatif
  End With
End With
End Sub
Edit 1 : j'ai mis sur toutes les feuilles en C19 la même formule (matricielle) qu'en ED!C19.

Edit 2 : je fais maintenant le tri sur les points (colonne C).

Fichier (3).

A+
 

Pièces jointes

  • TCD vers tableaux(3).xlsm
    798.5 KB · Affichages: 38
Dernière édition:

piga25

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

Bonsoir le forum,
Bonsoir Job75

Déjà un grand merci pour le travail accompli. Jamais je ne serai arrivé à condenser aussi bien le code.
J'en comprends un peu le fonctionnement, juste un peu et avec l'aide de la touche F1.

A quoi correspond le $ après la déclaration de : AD$
Par contre là, je saisie bien le sens sens, mais je ne comprends pas le ".name" dans ".ListObjects("Tableau" & .Name).Unlist". Est-ce bien pour renommer le chemin, c'est à dire le nom complet du tableau. Si c'est le cas comment est-ce possible de connaître le nom (ED ou EF etc)?

Bien le trie. Par contre il en faudrait un second. En premier trie sur les points (ordre décroisant) puis ensuite sur le rangR (ordre croissant)

Pour les formules en colonne C, calcule des points, je dois additionner les 04 meilleurs résultats "CM" + tous les "CHxxx".
Si je ne me suis pas trompé, lorsqu'il y a moins de 4 résultats "CM" cela additionne les "CM" + les "CHxxx" autrement dès 4 résultats "CM", on additionne les 4 meilleurs + les "CHxxx".

Afin de départager les ex-eaquos, j'ai le tableau en AA:AU.
Pour avantager les meilleurs classement, j'ai modifié les valeur en feuille Data. Pour ce faire le premier bénéficie de 0,001 pts supplémentaire, le second de 0.0001, le 3ème de 0.00001 ETC .... (a chaque fois une décimale en plus, comme cela bénéfice au classement pour une même somme de points.

Merci

Edit: § trie modifié

Edit 2 : pour la formule matricielle (Dans le même groupe il y a les "CM" et "GP") - C'est à dire j'ai 2 fichiers similaires, un avec uniquement des "CM" et l'autre avec des "CM" et "GP", c'est pour cette raison que c'est la même formule.
 
Dernière édition:

Si...

XLDnaute Barbatruc
Re : MACRO : Nommer un tableau en fonction du nom de la feuille

re, salut Job

En n'utilisant qu'une feuille de copie cela pourrait simplifier les choses et alléger le fichier, non ?
Dans l'exemple joint, je reviens à des instructions élémentaires et pour les tris, effet bascule par doubleclic sur les titres.
Je comprends un peu mieux pourquoi il y avait du "GP" dans les formules matricielles que je maitrise mal, comme les TCD (ô_ô), donc sans garantie pour les transformations.

Questions auxquelles tu n'es pas obligé de répondre Piga :

- c'est toi Rudy (inventeur du fichier) ?
- comment saisis-tu les données ?
 

Pièces jointes

  • TCD vers Onglet.xlsm
    174.3 KB · Affichages: 51

Discussions similaires