Est-il possible de cr=C3=A9er un tableau structur=C3=A9 par VBA ?
Apr=C3=A8s quelques recherches, je n'ai pas r=C3=A9ussi =C3=A0 trouver d'ex=
emple de cr=C3=A9ation de tableau =C3=A0 partir d'une plage s=C3=A9lectionn=
=C3=A9e...
Bonjour, Voici un petit exemple réalisé il y a déjà un moment en réponse à une question posée sur ce forum...Gestion d'un petit tableau de données à partir d'un formulaire en VBA. https://www.cjoint.com/c/ILkkxkPJj8j Note que dans Excel, feuille de calcul, on peut insérer un "Tableau" à partir d'une plage de cellules. Cette structure offre beaucoup d’avantages, à explorer, c'est plus rapide et facile à élaborer! MichD
Bonjour,
Voici un petit exemple réalisé il y a déjà un moment en réponse à une
question posée sur ce forum...Gestion d'un petit tableau de données à
partir d'un formulaire en VBA.
https://www.cjoint.com/c/ILkkxkPJj8j
Note que dans Excel, feuille de calcul, on peut insérer un "Tableau" à
partir d'une plage de cellules. Cette structure offre beaucoup
d’avantages, à explorer, c'est plus rapide et facile à élaborer!
Bonjour, Voici un petit exemple réalisé il y a déjà un moment en réponse à une question posée sur ce forum...Gestion d'un petit tableau de données à partir d'un formulaire en VBA. https://www.cjoint.com/c/ILkkxkPJj8j Note que dans Excel, feuille de calcul, on peut insérer un "Tableau" à partir d'une plage de cellules. Cette structure offre beaucoup d’avantages, à explorer, c'est plus rapide et facile à élaborer! MichD
ThierryP
Bonjour Denis, Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!! Merci pour ton retour, je vais regarder. Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structu ré ! ThierryP
Bonjour Denis,
Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!!
Merci pour ton retour, je vais regarder.
Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structu ré !
Bonjour Denis, Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!! Merci pour ton retour, je vais regarder. Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structu ré ! ThierryP
ThierryP
Re-bonjour ! Toujours dans mes soucis de tableaux structurés !! Est-il possible, dans un Worksheet_Change, de détecter l'ajout d'un li gne et/ou d'interdire l'ajout d'une colonne ?? Merci d'avance !!! ThierryP
Re-bonjour !
Toujours dans mes soucis de tableaux structurés !!
Est-il possible, dans un Worksheet_Change, de détecter l'ajout d'un li gne et/ou d'interdire l'ajout d'une colonne ??
Re-bonjour ! Toujours dans mes soucis de tableaux structurés !! Est-il possible, dans un Worksheet_Change, de détecter l'ajout d'un li gne et/ou d'interdire l'ajout d'une colonne ?? Merci d'avance !!! ThierryP
MichD
Si tu fais référence à la notion de tableau dans une formule, il faut être explicite. Pour ceux qui ont la virgule comme séparateur décimale. un exemple : =SOMME({1;2;10}) Tableau vertical ou ceci : =SOMME({1.2.1}) : Tableau horizontal MichD Le 10/12/19 à 07:55, ThierryP a écrit :
Bonjour Denis, Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!! Merci pour ton retour, je vais regarder. Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structuré ! ThierryP
Si tu fais référence à la notion de tableau dans une formule, il faut
être explicite.
Pour ceux qui ont la virgule comme séparateur décimale.
un exemple : =SOMME({1;2;10}) Tableau vertical
ou ceci : =SOMME({1.2.1}) : Tableau horizontal
MichD
Le 10/12/19 à 07:55, ThierryP a écrit :
Bonjour Denis,
Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!!
Merci pour ton retour, je vais regarder.
Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structuré !
Si tu fais référence à la notion de tableau dans une formule, il faut être explicite. Pour ceux qui ont la virgule comme séparateur décimale. un exemple : =SOMME({1;2;10}) Tableau vertical ou ceci : =SOMME({1.2.1}) : Tableau horizontal MichD Le 10/12/19 à 07:55, ThierryP a écrit :
Bonjour Denis, Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!! Merci pour ton retour, je vais regarder. Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structuré ! ThierryP
MichD
Bonjour, Copie le code suivant dans le module de la feuille. 3 actions que tu peux faire lorsqu'une ligne complète est sélectionnée : A) Déplacer, B)Supprimer, C)Insérer La procédure suivante n'identifie pas l'action dès qu'une de ces 3 actions s'est produite. Dim Lig As String 'Dans le haut du module. '----------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count = Columns.Count Then MsgBox Lig End If End Sub '----------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count = Columns.Count Then Lig = Target.Address End If End Sub '----------------- Si tu veux quelque chose de plus élaborer, il faut modifier l'action des commandes du menu. Tu dois utiliser ceci : "Custom UI Editor For Microsoft Office" que tu peux télécharger du site de Microsoft. Moi, je ne touche pas à cela dans le cadre d'un forum. MichD
Bonjour,
Copie le code suivant dans le module de la feuille.
3 actions que tu peux faire lorsqu'une ligne complète est sélectionnée :
A) Déplacer, B)Supprimer, C)Insérer
La procédure suivante n'identifie pas l'action dès qu'une de ces 3
actions s'est produite.
Dim Lig As String 'Dans le haut du module.
'-----------------
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Cells.Count = Columns.Count Then
MsgBox Lig
End If
End Sub
'-----------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count = Columns.Count Then
Lig = Target.Address
End If
End Sub
'-----------------
Si tu veux quelque chose de plus élaborer, il faut modifier l'action des
commandes du menu. Tu dois utiliser ceci : "Custom UI Editor For
Microsoft Office" que tu peux télécharger du site de Microsoft. Moi, je
ne touche pas à cela dans le cadre d'un forum.
Bonjour, Copie le code suivant dans le module de la feuille. 3 actions que tu peux faire lorsqu'une ligne complète est sélectionnée : A) Déplacer, B)Supprimer, C)Insérer La procédure suivante n'identifie pas l'action dès qu'une de ces 3 actions s'est produite. Dim Lig As String 'Dans le haut du module. '----------------- Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count = Columns.Count Then MsgBox Lig End If End Sub '----------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Cells.Count = Columns.Count Then Lig = Target.Address End If End Sub '----------------- Si tu veux quelque chose de plus élaborer, il faut modifier l'action des commandes du menu. Tu dois utiliser ceci : "Custom UI Editor For Microsoft Office" que tu peux télécharger du site de Microsoft. Moi, je ne touche pas à cela dans le cadre d'un forum. MichD
ThierryP
Re-bonjour Denis, Je crois que je me suis mal exprimé.... Je parle de tableau structuré créé via l'onglet "Outil de ta bleau" qui crée un ListObject("Tableau1"). Si on supprime une ligne (clic droit -> Supprimer -> Lignes de tableau), le code me donne : Range("E18").Select Selection.ListObject.ListRows(13).Delete mais comment intercepter, puisque je ne sélectionne pas une ligne comp lète ? ThierryP
Re-bonjour Denis,
Je crois que je me suis mal exprimé....
Je parle de tableau structuré créé via l'onglet "Outil de ta bleau" qui crée un ListObject("Tableau1").
Si on supprime une ligne (clic droit -> Supprimer -> Lignes de tableau), le code me donne :
Re-bonjour Denis, Je crois que je me suis mal exprimé.... Je parle de tableau structuré créé via l'onglet "Outil de ta bleau" qui crée un ListObject("Tableau1"). Si on supprime une ligne (clic droit -> Supprimer -> Lignes de tableau), le code me donne : Range("E18").Select Selection.ListObject.ListRows(13).Delete mais comment intercepter, puisque je ne sélectionne pas une ligne comp lète ? ThierryP
MichD
Tu pourrais faire un effort et être plus explicite dans ta demande! Essaie ceci. Cela fonctionne seulement tu ajoutes ou tu supprimes une ligne complète dans le tableau. Dans mon exemple, j'ai utilisé l'index 1 pour désigner le tableau. À toi d'adapter en remplaçant le 1 par l'index ou le nom de ton tableau dans les 2 procédures. Dim NbRows As Long Dim Adr As String '-------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If Target.Cells.Count = Me.ListObjects(1).DataBodyRange.Columns.Count Then If .Rows.Count < NbRows Then MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """ supprimée(s) du tableau." Else MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """ ajoutée(s) du tableau." End If End If End With End Sub '-------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If Target.Cells.Count = .Columns.Count Then NbRows = .Rows.Count Adr = Target.Address End If End With End Sub '-------------------------------- MichD
Tu pourrais faire un effort et être plus explicite dans ta demande!
Essaie ceci. Cela fonctionne seulement tu ajoutes ou tu supprimes une
ligne complète dans le tableau.
Dans mon exemple, j'ai utilisé l'index 1 pour désigner le tableau. À toi
d'adapter en remplaçant le 1 par l'index ou le nom de ton tableau dans
les 2 procédures.
Dim NbRows As Long
Dim Adr As String
'--------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
With Me.ListObjects(1).DataBodyRange
If Target.Cells.Count =
Me.ListObjects(1).DataBodyRange.Columns.Count Then
If .Rows.Count < NbRows Then
MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """
supprimée(s) du tableau."
Else
MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """
ajoutée(s) du tableau."
End If
End If
End With
End Sub
'--------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Me.ListObjects(1).DataBodyRange
If Target.Cells.Count = .Columns.Count Then
NbRows = .Rows.Count
Adr = Target.Address
End If
End With
End Sub
'--------------------------------
Tu pourrais faire un effort et être plus explicite dans ta demande! Essaie ceci. Cela fonctionne seulement tu ajoutes ou tu supprimes une ligne complète dans le tableau. Dans mon exemple, j'ai utilisé l'index 1 pour désigner le tableau. À toi d'adapter en remplaçant le 1 par l'index ou le nom de ton tableau dans les 2 procédures. Dim NbRows As Long Dim Adr As String '-------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If Target.Cells.Count = Me.ListObjects(1).DataBodyRange.Columns.Count Then If .Rows.Count < NbRows Then MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """ supprimée(s) du tableau." Else MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """ ajoutée(s) du tableau." End If End If End With End Sub '-------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If Target.Cells.Count = .Columns.Count Then NbRows = .Rows.Count Adr = Target.Address End If End With End Sub '-------------------------------- MichD
Jacquouille
Bonjour Thierry Nous sommes sur le vieux continent. Ici,nous en sommes toujours à XL2003, malgré les menaces de boycot de Bilou. Nous sommes un peuple galant qui laisse aux jeunes le soin de s'exprimer, de s'épanouir. -)) PS: Nous aimons aussi l'humour. Jacques " Le vin est au repas ce que le parfum est à la femme." . "ThierryP" a écrit dans le message de groupe de discussion : Bonjour Denis, Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!! Merci pour ton retour, je vais regarder. Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structuré ! ThierryP
Bonjour Thierry
Nous sommes sur le vieux continent.
Ici,nous en sommes toujours à XL2003, malgré les menaces de boycot de Bilou.
Nous sommes un peuple galant qui laisse aux jeunes le soin de s'exprimer, de
s'épanouir. -))
PS: Nous aimons aussi l'humour.
Jacques
" Le vin est au repas ce que le parfum est à la femme."
.
"ThierryP" a écrit dans le message de groupe de discussion :
262111dc-9a1d-4131-a68b-fb5d76b0f5ff@googlegroups.com...
Bonjour Denis,
Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à
répondre !!!
Merci pour ton retour, je vais regarder.
Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structuré !
Bonjour Thierry Nous sommes sur le vieux continent. Ici,nous en sommes toujours à XL2003, malgré les menaces de boycot de Bilou. Nous sommes un peuple galant qui laisse aux jeunes le soin de s'exprimer, de s'épanouir. -)) PS: Nous aimons aussi l'humour. Jacques " Le vin est au repas ce que le parfum est à la femme." . "ThierryP" a écrit dans le message de groupe de discussion : Bonjour Denis, Décidément, il semble que soit devenu ton forum, tu es quasiment le seul à répondre !!! Merci pour ton retour, je vais regarder. Entre-temps, j'ai trouvé la syntaxe pour créer ce tableau structuré ! ThierryP
MichD
Même principe que la procédure du message précédent, mais ceci gère aussi l'ajout ou la suppression d'une ou de plusieurs lignes du tableau. La suppression ou l'ajout de lignes de toute la largeur de la feuille de calcul n'est pas traité dans ce qui suit. Dim NbRows As Long Dim Adr As String '---------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If Adr = "" Then Exit Sub If NbRows = 1 Then If Target.Cells.Count = .Columns.Count Then If .Rows.Count <= NbRows Then MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """ supprimée(s) du tableau." Else MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """ ajoutée(s) du tableau." End If End If Else If Target.Count / Target.Rows.Count = .Columns.Count Then If .Rows.Count <= NbRows Then MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """ supprimée(s) du tableau." Else MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """ ajoutée(s) du tableau." End If End If End If Target(1, 1).Select End With End Sub '---------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If .Rows.Count = 1 Then If Target.Cells.Count = .Columns.Count Then NbRows = .Rows.Count Adr = Target.Address End If Else If Target.Cells.Count / Target.Rows.Count = .Columns.Count Then NbRows = .Rows.Count Adr = Target.Address Else Adr = "" End If End If End With End Sub '---------------------------------------------- MichD
Même principe que la procédure du message précédent, mais ceci gère
aussi l'ajout ou la suppression d'une ou de plusieurs lignes du tableau.
La suppression ou l'ajout de lignes de toute la largeur de la feuille de
calcul n'est pas traité dans ce qui suit.
Dim NbRows As Long
Dim Adr As String
'----------------------------------------------
Private Sub Worksheet_Change(ByVal Target As Range)
With Me.ListObjects(1).DataBodyRange
If Adr = "" Then Exit Sub
If NbRows = 1 Then
If Target.Cells.Count = .Columns.Count Then
If .Rows.Count <= NbRows Then
MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr &
""" supprimée(s) du tableau."
Else
MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr &
""" ajoutée(s) du tableau."
End If
End If
Else
If Target.Count / Target.Rows.Count = .Columns.Count Then
If .Rows.Count <= NbRows Then
MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr &
""" supprimée(s) du tableau."
Else
MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr &
""" ajoutée(s) du tableau."
End If
End If
End If
Target(1, 1).Select
End With
End Sub
'----------------------------------------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Me.ListObjects(1).DataBodyRange
If .Rows.Count = 1 Then
If Target.Cells.Count = .Columns.Count Then
NbRows = .Rows.Count
Adr = Target.Address
End If
Else
If Target.Cells.Count / Target.Rows.Count = .Columns.Count Then
NbRows = .Rows.Count
Adr = Target.Address
Else
Adr = ""
End If
End If
End With
End Sub
'----------------------------------------------
Même principe que la procédure du message précédent, mais ceci gère aussi l'ajout ou la suppression d'une ou de plusieurs lignes du tableau. La suppression ou l'ajout de lignes de toute la largeur de la feuille de calcul n'est pas traité dans ce qui suit. Dim NbRows As Long Dim Adr As String '---------------------------------------------- Private Sub Worksheet_Change(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If Adr = "" Then Exit Sub If NbRows = 1 Then If Target.Cells.Count = .Columns.Count Then If .Rows.Count <= NbRows Then MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """ supprimée(s) du tableau." Else MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """ ajoutée(s) du tableau." End If End If Else If Target.Count / Target.Rows.Count = .Columns.Count Then If .Rows.Count <= NbRows Then MsgBox NbRows - .Rows.Count & " ligne(s) """ & Adr & """ supprimée(s) du tableau." Else MsgBox .Rows.Count - NbRows & " ligne(s) """ & Adr & """ ajoutée(s) du tableau." End If End If End If Target(1, 1).Select End With End Sub '---------------------------------------------- Private Sub Worksheet_SelectionChange(ByVal Target As Range) With Me.ListObjects(1).DataBodyRange If .Rows.Count = 1 Then If Target.Cells.Count = .Columns.Count Then NbRows = .Rows.Count Adr = Target.Address End If Else If Target.Cells.Count / Target.Rows.Count = .Columns.Count Then NbRows = .Rows.Count Adr = Target.Address Else Adr = "" End If End If End With End Sub '---------------------------------------------- MichD
ThierryP
Bonsoir Jacques, Tu as raison, mais je ne voudrais pas mourir idiot.... et je lis sur tous l es forums que cette notion de tableau structuré est le top de la manip ulation de données, donc j'essaie d'apprendre à maîtriser la bête ! Quant à l'humour, pour avoir fréquenté le MPFE des grandes a nnées, je confirme que humour et Excel peuvent faire bon ménage ! !! Bonne soirée, ThierryP
Bonsoir Jacques,
Tu as raison, mais je ne voudrais pas mourir idiot.... et je lis sur tous l es forums que cette notion de tableau structuré est le top de la manip ulation de données, donc j'essaie d'apprendre à maîtriser la bête !
Quant à l'humour, pour avoir fréquenté le MPFE des grandes a nnées, je confirme que humour et Excel peuvent faire bon ménage ! !!
Bonsoir Jacques, Tu as raison, mais je ne voudrais pas mourir idiot.... et je lis sur tous l es forums que cette notion de tableau structuré est le top de la manip ulation de données, donc j'essaie d'apprendre à maîtriser la bête ! Quant à l'humour, pour avoir fréquenté le MPFE des grandes a nnées, je confirme que humour et Excel peuvent faire bon ménage ! !! Bonne soirée, ThierryP