Microsoft 365 Tableau dynamique

Batourouciss

XLDnaute Nouveau
Bonjour,

J'essaie de faire un code qui va créer un tableau qui est initialisé à la ligne 1 et aux colonnes 1 à 3.
Ensuite à chaque fois que je vais rajouter une ligne non vide dans excel (juste en dessous de la première), je veux que mon tableau s'actualise et prenne en compte cette nouvelle ligne c'est à dire que mon tableau sera désormais :
ligne 1 à 2
colonne 1 à 2

Pour ça, j'ai essayé d'utiliser une boucle mais je suis bloqué. Voici mon code :

Sub Tableau()

Dim ligne As Integer
Dim colonne As Integer
Dim Tab_1

colonne=1
ligne = 1

ReDim Tab_1(ligne)

Tab_1 = Range("A1")

For colonne = 1 To 3

For ligne = 1 To 5

"Je ne sais quel code mettre ici"

Next ligne

Next colonne


End Sub


Merci d'avance pour vos réponses.
 

Lolote83

XLDnaute Barbatruc
Bonjour,
N'ayant aucune visibilité sur le fichier joint, un tableau structuré pourrait faire ce que tu souhaites.
A chaque nouvelle ligne insérée, le tableau s'agrandira.
Sélectionner les premières lignes du tableau et faire

Insertion -> Tableau -> cocher "Mon tableau comporte des entêtes.
@+ Lolote83
 

Batourouciss

XLDnaute Nouveau
Bonjour,
N'ayant aucune visibilité sur le fichier joint, un tableau structuré pourrait faire ce que tu souhaites.
A chaque nouvelle ligne insérée, le tableau s'agrandira.
Sélectionner les premières lignes du tableau et faire

Insertion -> Tableau -> cocher "Mon tableau comporte des entêtes.
@+ Lolote83

Bonjour, tu vois avec un tableau dynamique qu'on peut créer grâce à excel, lorsque tu rajoutes une nouvelle ligne (juste à la suite de ton tableau) ou une nouvelle colonne (juste à droite de ton tableau), celle-ci est automatiquement considérée comme appartenant au tableau.

Je cherche donc à coder ce processus pour ne pas avoir à passer par le tableau de excel. En effet, je ne serais pas la seule à utiliser le code que je veux produire et les autres personnes qui vont l'utiliser ne vont pas forcément penser à utiliser le tableau dynamique fourni par excel lol bref

Ces personnes là vont copier et coller leurs données puis appuyer sur un bouton pour créer le tableau et l'actualiser à chaque fois.

Est ce qu'il a une possibilité de coder ce processus ?

Dans mon fichier joint, quand tu sélectionnes la cellule A1 à C7, tu peux voir que j'ai nommée cette plage de cellules "Tableau1"

Mon objectif c'est donc de faire un code qui va intégrer les nouvelles lignes et colonnes dans "Tableau1" de façon automatique (en appuyant sur le bouton).

Merci d'avance.
 

Pièces jointes

  • Refresh tableau explication.xlsm
    12.5 KB · Affichages: 6

Lolote83

XLDnaute Barbatruc
Bonjour BATOUROUCISS,

D'après le fichier joint au post précédent, voici ce que j'ai imaginé.
VB:
Sub DéplaceColonneEtLigne()
    With Sheets("Feuil1")
        Application.ScreenUpdating = False
        '--------------------------------------- Pour les colonnes
        
        xDercol = .Range("ZZ1").End(xlToLeft).Column                                'Dernière colonne de la feuille
        xDerlig = Cells(100, xDercol).End(xlUp).Row                                 'Dernière ligne en fonction de la dernière colonne
        xColVide = .Range("A1").End(xlToRight).Column + 1                           'Première colonne vide dans le tableau
        .Range(.Cells(1, xDercol), .Cells(xDerlig, xDercol)).Cut .Cells(1, xColVide)  'Couper / Coller
    
        '--------------------------------------- Pour les lignes
        xLigVide = .Range("A1").End(xlDown).Row + 1                                 'Première ligne vide du tableau
        xDerlig = .Range("A100").End(xlUp).Row                                      'Dernière ligne de la feuille
        xDercol = .Range("A" & xLigVide - 1).End(xlToRight).Column + 1              'Dernière colonne en fonction de la dernière ligne
        .Range(.Cells(xDerlig, 1), .Cells(xDerlig, xDercol)).Cut .Cells(xLigVide, 1)   'Couper / Coller
        
        Application.ScreenUpdating = True
    End With
End Sub

En espérant avoir bien compris la demande
@+ Lolote83
 

Deadpool_CC

XLDnaute Accro
Bonjour,
Autre piste de solution => faire une plage nommée et dans la fonction sheetchange() ou sheetactivate() du Workbook tu mets du code pour mettre à jour les références de ta plage nommée.
ensuite toutes tes formules doivent être modifiées pour faire référence à la plage nommée.
A+
 

Batourouciss

XLDnaute Nouveau
Bonjour BATOUROUCISS,

D'après le fichier joint au post précédent, voici ce que j'ai imaginé.
VB:
Sub DéplaceColonneEtLigne()
    With Sheets("Feuil1")
        Application.ScreenUpdating = False
        '--------------------------------------- Pour les colonnes
       
        xDercol = .Range("ZZ1").End(xlToLeft).Column                                'Dernière colonne de la feuille
        xDerlig = Cells(100, xDercol).End(xlUp).Row                                 'Dernière ligne en fonction de la dernière colonne
        xColVide = .Range("A1").End(xlToRight).Column + 1                           'Première colonne vide dans le tableau
        .Range(.Cells(1, xDercol), .Cells(xDerlig, xDercol)).Cut .Cells(1, xColVide)  'Couper / Coller
   
        '--------------------------------------- Pour les lignes
        xLigVide = .Range("A1").End(xlDown).Row + 1                                 'Première ligne vide du tableau
        xDerlig = .Range("A100").End(xlUp).Row                                      'Dernière ligne de la feuille
        xDercol = .Range("A" & xLigVide - 1).End(xlToRight).Column + 1              'Dernière colonne en fonction de la dernière ligne
        .Range(.Cells(xDerlig, 1), .Cells(xDerlig, xDercol)).Cut .Cells(xLigVide, 1)   'Couper / Coller
       
        Application.ScreenUpdating = True
    End With
End Sub

En espérant avoir bien compris la demande
@+ Lolote83
Bonjour, malheureusement cela ne réponds pas à mon problème 😅
Je vais donc essayer de le traiter autrement.
Merci encore
 

Batourouciss

XLDnaute Nouveau
Bonjour,
Autre piste de solution => faire une plage nommée et dans la fonction sheetchange() ou sheetactivate() du Workbook tu mets du code pour mettre à jour les références de ta plage nommée.
ensuite toutes tes formules doivent être modifiées pour faire référence à la plage nommée.
A+
Bonjour, ça n'a pas fonctionné malheureusement.
Je vais essayer de traiter le problème d'une autre façon.
Merci encore
 

Batourouciss

XLDnaute Nouveau
Re bonjour à tous,
Pouvez-vous expliquer ce qui ne va pas.
Je pensais vraiment avoir répondu à la demande.
Peut être un nouveau fichier avec plus de données et des exemples.
Cordialement
@+ Lolote83
En fait je n'observe aucun changement quand je lance le code
J'ai donc décider de copier coller mes données de la source vers ma feuille excel et écraser les données existantes à chaque fois.
J'ai aussi fixé le nombre de ligne et de colonne et nommer mes plages de cellules. C'est plus fastidieux mais bon ça fonctionne
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
Dans le fichier initialement joint (voir post#3),
1655711170074.png

Mon code, ne copie-t-il pas la colonne E en colonne D et la ligne 11 en ligne 8 ?
C'est ce que j'ai compris d'après le fichier joint.
Merci de me dire
@+ Lolote83
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
Une fois la macro lancée, la colonne E est bien copiée en colonne D et la ligne 11 en ligne 8.
Voir résultat ICI
1655711392110.png


Je joins le fichier pour test

@+ Lolote83
 

Pièces jointes

  • Copie de BATOUROUCISS - Refresh tableau explication.xlsm
    17.5 KB · Affichages: 2

Batourouciss

XLDnaute Nouveau
Re bonjour,
Une fois la macro lancée, la colonne E est bien copiée en colonne D et la ligne 11 en ligne 8.
Voir résultat ICI
Regarde la pièce jointe 1142874

Je joins le fichier pour test

@+ Lolote83
L'avant dernière ligne se supprimait à chaque fois. J'ai donc enlevé le bout de code qui créait problème.
Effectivement, le copié collé fonctionne mais pour les besoins de mon travail ( il faut que je rafraîchisse un graphique par la suite) je n'arrivait pas à adapter ton code. Contrairement à mon exemple, les données sont récupérées d'une feuille pour les coller sur une autre. Je me rend compte que je ne me fais peut être pas très bien comprendre 😅 désolé

Donc je suis passé par la formule "définir un nom", j'ai fixé un nombre de ligne et de colonne, et ça fonctionne.

Merci encore
 

Lolote83

XLDnaute Barbatruc
Re bonjour,
OK, je prends note de ta réflexion
Donc je suis passé par la formule "définir un nom", j'ai fixé un nombre de ligne et de colonne, et ça fonctionne.
Mais vu la demande initiale et le fichier fourni, ma macro faisait la demande.
Quand tu dis
Contrairement à mon exemple, les données sont récupérées d'une feuille pour les coller sur une autre
Ça, je ne pouvais pas le deviner.
C'est pour cela qu'une demande bien expliquée dès le départ est très appréciée (surtout pour celui qui cherche une solution).
Les exemples fournis doivent correspondre au plus proche de la demande
En tout cas, bravo si tu as réussi à t'en sortir.
Bonne continuation
@+ Lolote83
 

Batourouciss

XLDnaute Nouveau
Re bonjour,
OK, je prends note de ta réflexion

Mais vu la demande initiale et le fichier fourni, ma macro faisait la demande.
Quand tu dis

Ça, je ne pouvais pas le deviner.
C'est pour cela qu'une demande bien expliquée dès le départ est très appréciée (surtout pour celui qui cherche une solution).
Les exemples fournis doivent correspondre au plus proche de la demande
En tout cas, bravo si tu as réussi à t'en sortir.
Bonne continuation
@+ Lolote83

Effectivement, mes explications auraient pu être plus explicitent. Désolé
Merci
 

Discussions similaires

Réponses
8
Affichages
388
Réponses
12
Affichages
243

Statistiques des forums

Discussions
312 169
Messages
2 085 923
Membres
103 041
dernier inscrit
Ousmane