Double Click Date en VBA et Tableau Structuré

un grand merci pour ce coup de main

J'avoue que j'ai encore du mal a tout comprendre, mais j'y vois de plus en plus clair.... mais si tout ne st ppas encore logique pour moi

Sinon, j'ai une autre maccro que j'ai enregistrer.... rien a voir, ca fonctionne a 90%....

Voila, j ai utilisé l'enregistreur de macro avec les pas a pas de ce que je dois faire "manuellement"

Le but etant de copié collé des donné a la fin de mon tableau en ayant selectionné que les colonnes qui m'interessent dans un autre...

Cela donne ca

Sub Testajoutimport()
'
' Testajoutimport Macro
'

'
Sheets("IMPORT").Select
Columns("A:D").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("B:E").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:E156").Select
Range("B11").Activate
Selection.Copy
Sheets("CAPELLA").Select
[B12].End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End Sub

Le truc, c est que je souhaite que es données soient collées après la derniere ligne si elle est remplie, ou sur la derniere ligne si elle est vide

La ca colle direct a +1

Ce qui fait que si la derniere n'est pas rempli, les fonctions ne sont pas deversées.....

bonsoir,

@LouReed

Sub SupTabStruc()
     With Range("Tableau").ListObject
          If .ListRows.Count > 1 Then .DataBodyRange.Offset(1).Resize(.ListRows.Count - 1).Delete     'delete toutes les lignes sauf la première
          On Error Resume Next
          .DataBodyRange.SpecialCells(xlConstants).ClearContents     'effacer tout sauf les formules
          On Error GoTo 0
     End With
End Sub

merci pour ce retour c est sympa ;)

pour ma derniere question, tu en penses quoi ?

@jujudeva,

je n'ai pas tout lu, mais c'est quelque chose comme çà que vous voulez

Sub teste()
     a = Range("A1:E156").Value
     Range("Tableau").ListObject.ListRows.Add.Range.Range("A1").Resize(UBound(a), UBound(a, 2)).Value = a
End Sub

au lieu de value, c'est mieux d'utiliser value2, quand on a des dates ou des currency dans la source

j ai fais une macro a l aide de l'enregistreur (je débute)

Je vais dans un autre onglet du fichier (IMPORT), je supp les colonnes , lignes etc etc , je copie tout le reste et je reviens sur mon tableau principale.

je veux copié ces données a la suite en sachant qu avec ce que j ai fait, il prend toujours la dernière ligne + 1

Mais celle ci peut être vide

Ce que je veux, c est qu il copie SUR la dernière ligne si elle est VIDE, mais sur la +1 si la derniere n est pas vide

image

Du coup, dans cet exemple, la ligne est vide, voila ce que ca fait

image

Et les formule ne sont donc pas reprise....

Voici la macro en détail (avec quelques merdouilles en trop mais bon...

Sub MAJfichierCapella()

Sheets("IMPORT").Select
Columns("A:D").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("B:E").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Delete Shift:=xlUp
Range("A1:E156").Select
Range("B11").Activate
Selection.Copy
Sheets("CAPELLA").Select
[B22].End(xlDown).Offset(1, 0).Select
ActiveSheet.Paste
End Sub

la première ligne, c'est la plage que vous voulez copier

la 2ième ligne, le nom du tableau structuré, je suppose qu'il est "Tableau" et, sans importance, si le tableau est vide ou pas, il ajoute sur le bon endroit avec Range("Tableau").ListObject.ListRows.Add.Range.Range("A1") et puis les bonnes dimensions avec Resize(UBound(a), UBound(a, 2))

Range("Tableau").ListObject >>> le tableau

.ListRows.Add.Range >>>> la nouvelle ligne ajoutée

.Range("A1") >>>> la premiere cellule de cette nouvelle ligne

Je ne connais pas les colonnes avec les formules, donc s'il y a une la dedans, il faut le dire !

Sub teste()
     a = sheets("Import").Range("A1:E156").Value
     Range("Tableau").ListObject.ListRows.Add.Range.Range("A1").Resize(UBound(a), UBound(a, 2)).Value = a
End Sub

Non ca va pas

Le tableau dans IMPORT n'est pas un tableau structuré, c est un export d un lien intranet, brut

Mon tableau structuré dans l'onglet CAPELLA s'appel "IMPORTCapella"

je veux que les données soient collée dans mon exemple a partir de B23 car la cellule est vide

B24 si elle n etait pas vide

voici ce que j ai fait et ce que ca donne

la il me maque des données du coup (reception, délai etc...)

image

est ce que ca donne ca bien formulé ?

Sheets("IMPORT").Select
Columns("A:D").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
Columns("B:E").Select
Selection.Delete Shift:=xlToLeft
Columns("C:C").Select
Selection.Delete Shift:=xlToLeft
Columns("E:E").Select
Selection.Delete Shift:=xlToLeft
Columns("F:F").Select
Selection.Delete Shift:=xlToLeft
Rows("1:1").Select
Selection.Delete Shift:=xlUp
a = sheets("Import").Range("A1:E156").Value
Range("IMPORTCapella").ListObject.ListRows.Add.Range.Range("A1").Resize(UBound(a), UBound(a, 2)).Value = a
End Sub

insérer une ligne dans un tableau, cela ne cause pas de problèmes, mais plusieurs lignes quand ce n'est pas après la derniere ligne, il faut créer un boucle oubien il faut insérer autant de lignes pour toute la feuille , donc je ne sais pas si cela cause des problèmes.

Ce "listrows(1)", le 1, c'est la ligne où vous voulez insérer des lignes.

Sub CC()

     'autres lignes .....

     a = Sheets("import").Range("A1:E156").CurrentRegion.Value     'plage >>> matrice
     With Range("IMPORTCapella").ListObject     'le tableau structuré
          .ListRows(1).Range.Resize(UBound(a)).EntireRow.Insert     'ajouter au tant de lignes vides pour toute la feuille !!!!!
          .DataBodyRange.Cells(1).Resize(UBound(a), UBound(a, 2)).Value = a     'coller les données
     End With
End Sub

je sais pas si on s est bien compris du coup je suis perdu.

J'ai remis un post ou je m'explique bien et ou j'ai tout détaillé si besoin ;)

c'est mieux d'ajouter un fichier au lieu d'une description, vous voulez insérer vos données où dans votre tableau ?

a la suite

j'ai tout bien re expliqué ici

https://forum.excel-pratique.com/excel/vba-copie-colle-sur-ligne-vide-ou-ligne-1-174547

J'aurai bien voulu mettre le fichier mais il est beaucoup trop complexe pour le rendre anonyme... etc

la seule réponse que j'avais besoin, c'est où on colle ces données, au début, quelque part au milieu ou en dessous du tableau.

dans cette macro, le variable "Ligne" represente la ligne du tableau où vous voulez commencer cela, donc si Ligne=1, il colle au début, si ligne est inférieur ou egal aux nombre de lignes dans ce tableau, il insére dans le tableau, dans les autres cas, il ajoute après la fin.

Sub Insérer()
     Dim c, Nmb, Ligne

     Ligne = 7     '1 pour la premiere ligne, 2 pour la 2ieme, ...,-1 pour la derniere

     Set c = Sheets("import").Range("A1").CurrentRegion
     Nmb = c.Rows.Count - 1

     With Range("IMPORTCapella").ListObject     'le tableau structuré
          If 1 <= Ligne And Ligne <= .ListRows.Count Then     'si ligne est le un numéro actuelle du tableau, c'est insérer dans le tableau
               .ListRows(Ligne).Range.Resize(Nmb).EntireRow.Insert   'ajouter au tant de lignes vides pour toute la feuille !!!!!
               Set c2 = .DataBodyRange.Cells(Ligne, 1)     'cellule en haut à gauche de cette nouvelle plage
          Else     'autrement
               Set c2 = .ListRows.Add.Range.Range("A1").Resize(Nmb)     'ajouter en dessous
          End If

          For Each charactère In Array("E", "J", "L", "M", "O")     'copier ces colonnes individuellement
               ptr = ptr + 1     'pointer vers colonne x de cette nouvelle plage
               c2.Cells(1, ptr).Resize(Nmb).Value = c.Offset(1, Asc(charactère) - 65).Value     'coller les données
               c2.Cells(1, ptr).Resize(Nmb).Interior.ColorIndex = WorksheetFunction.RandBetween(3, 55)     'plus tard vous pouvez supprimer cette ligne, qui colorise cette plage vec un couleur aléatoire
          Next
     End With
End Sub

Si on ne sait pas rendre son fichier anomyme, on crée un "lookalike"

5jujudeva.xlsb (29.42 Ko)

Quand vous insérez des lignes et il y a d'autre chose à côté de ce tableau, alors il faut le dire !!! J'avais déjà demandé cela.

la macro que j'utilise fait en sorte de faire le tri dans mon tableau brut, de sorte que je ne copie au finale que les 3 ou 4 premières colonne. Que je vient ensuite transposé dans mon tableau structuré oui, en première colonne de celui ci car il contient des colonnes masquée vers la droite, et des colonnes avec des fonctions.

Ainsi, les nouveaux ajout gardent toujours les fonctions que j'ai ajouté précédemment.

Bon, la pour le coup, j'avoue que je ne comprend plus trop comment faire, cela me dépasse, je n'arrive pas a transposé votre réponse a ma macro de base.

en tout cas, merci beaucoup du coup de main, c est gentil a vous.

la réponse était insérer ou ajouter, insérer une ligne ou ajouter plusieurs lignes, c'est facile, insérer plusieurs ligne, cà, c'est plus compliqué.

C'est quoi ???????????????????????????????????????????

est ce que tu as moyen de venir sur mon dernier post, on y verra plus clair et justement j'ai tout expliqué dans le détail ce que je souhaite

Bonsoir,

@BsAlv : simple et efficace !

@ bientôt

LouReeD

bonjour,

@LouReed, tout dépend des formules, il y a des fois qu'une ligne n'est pas assez, qu'il faut garder 2 lignes.

Sub SupTabStruc()

     With Range("Tableau").ListObject
          If .ListRows.Count > 1 Then .DataBodyRange.Offset(1).Resize(.ListRows.Count - 1).Delete 'tout sauf 1 ligne
          On Error Resume Next
          .DataBodyRange.SpecialCells(xlConstants).ClearContents'tout sauf les formules
          On Error GoTo 0
     End With

End Sub

merci beaucoup a tous pour votre aide c est top :)

Rechercher des sujets similaires à "double click date vba tableau structure"