XL 2013 Insertion automatique d'une ligne dans un tableau

Ananas94

XLDnaute Junior
Bonjour,

J'ai un tableau de bord avec des noms de groupes, qui rassemblent des équipes. Je souhaite créer une macro qui ajoute quelqu'un , dans la bonne ligne, selon le groupe sélectionné.
Ainsi, je souhaite insérer automatiquement une ligne dans un tableau, dans le groupe choisi.
Voici ma macro (je vous joins un fichier teste également).

Sub insertion_ligne()
'Procédure pour insérer une ligne dans le tableau une fois qu'un nom de groupe a été trouvé'

Dim Cellule As Range
cat_groupe = InputBox("A quel groupe souhaitez-vous ajouter un membre ?")

'1-rechercher le nom du groupe dans la colonne Groupe, donc après la cellule B6 (40 est arbitraire)'
With Worksheets("test").ListObjects("Tableau_general")
Set Cellule = .ListColumns("Groupe").Range.Find(Range(cat_groupe), SearchDirection:=xlPrevious)
If Not Cellule Is Nothing Then
'recherche dans tableau de suivi de la dernière ligne correspondant à la catégorie produit et type produit sélectionné
Set cellule1 = Cellule
Do
i = cell.Row - .HeaderRowRange.Row 'numéro de ligne du tableau
'inserer une ligne en-dessous la dernière cellule de la catégorie de groupe concernée'
Set Cellule = .ListColumns("Groupe").Range.FindPrevious(Cellule)
'On intègre le nom du groupe dans la cellule'
Cellule.Value = Groupe
Loop Until cell.Address = cell1.Address 'On continue l'action tant que l'on rencontre une cellule de la catégorie du groupe pour que la cellule soit joutée en-dessous de la dernière'

Range(Cellule).EntireRow.Insert xlShiftDown
i = i + 1
.ListRows.Add i
.ListColumns("Groupe").DataBodyRange.Rows(i) = Range("MDB")


End If
End With

End Sub


Je vous remercie vivement,

Anna
 

Pièces jointes

  • test.xlsm
    19.5 KB · Affichages: 17
Solution
Re

Si le tri alpha existe, c'est qu'il doit y avoir une raison ;)
Donc moi je ne me complique pas la vie (et j'aime pas que la hiérarchie me la complique ;))
Les bordures, ça me rappelle les frontières, et je déteste les frontières.
(Tu me diras avec plus de frontières, moins de pandémie ;))
Quant aux formules, c'est là un des bénéfices des tableaux structurés, les formules sont recopiés à chaque insertion de ligne
(Comme le montrait mon exemple de test)

Staple1600

XLDnaute Barbatruc
Re

•>Anna
ATTENTIVEMENT, adv.
De manière attentive.
A.− [Avec un verbe de perception] Dévisager, écouter, percevoir, regarder attentivement.
B.− [Avec un verbe exprimant une activité intellectuelle, une mise en œuvre du jugement] Analyser, examiner, lire, réfléchir, suivre attentivement.
:rolleyes:
NB: Fais le test sur un classeur vierge (où il y aura une feuille nommée: test), lance cette macro pour créer le tableau.
Puis pour tester, lance la macro: insert_C
C'est donc parce ton attention est optimale, que le nom de ta feuille sur ta dernière PJ est : test2
:eek:

PS: message redigé en mode humoristico-ironique mais en toute amitié néanmoins ;)
Donc inutile que tu passes toi en mode "vénère" ;)
 

Ananas94

XLDnaute Junior
Re
Oui j'avais vu ça après avoir posté le mot .. j'ai donc modifié chez moi entre temps.

Je viens de modifier à nouveau mon code (avec le formulaire, car c'est tout de même la commande pour laquelle ma hiérarchie m'a appelée ...) et ça ne fonctionne toujours pas je suis déséspérée
 

Pièces jointes

  • test.xlsm
    38.2 KB · Affichages: 8

Staple1600

XLDnaute Barbatruc
Re

J'ai tout le temps. Confinement oblige
1) J'avais écrit: 1 classeur vierge avec 1 feuille
(et ce juste pour faire un test, je répète: un test)
Ni plus, ni moins
Donc ta dernière PJ => Trashcan illico ;)
2) Dans ta PJ, ton tableau (le tien) n'est plus un Tableau (au sens Excel du terme.

Conclusion: les macros du message#8 ne sont à utiliser que sur un classeur de test (donc créer juste pour faire le test)
Test à faire dans cette seule optique : comprendre avec un exemple quelques éléments de syntaxe VBA pour ListObject.

Donc tu devrais avoir deux classeurs désormais.
Un classeur de test (fait comme l'explique le message#8)
et ton classeur original
(mais surtout pas un mix des deux)

PS: Et tu diras à ta hiérarchie de ma part: Mollo, les gars !!
On n'est pas aux pièces! On est confiné !.
 

Staple1600

XLDnaute Barbatruc
Re

•>Anna
Remplace le code de ton userform par celui-ci
VB:
Option Explicit
Dim Ws As Worksheet
Private Sub UserForm_Initialize()
Dim i As Long 'Indice de la ligne ajoutée
Dim j As Integer 'Numéro d'élément à remplir
ComboBox1.ColumnCount = 1 'Pour la liste déroulante Groupe
ComboBox1.List() = Array("", "MDB", "AMT", "AEC ChapX", "AEC PIL", "RGT A", "RGT B") 'Liste des groupes possibles
Set Ws = Sheets("test") 'Correspond au nom de l'onglet dans le fichier Excel
End Sub
'Pour le bouton Valider
Private Sub CommandButton1_Click()
Dim LO As ListObject 'Déclaration du tableau
Set LO = Worksheets("test").ListObjects("Tableau_general") 'On attribue ce tableau à Tableau_general créé précedemment
 If MsgBox("Confirmez-vous l'insertion de ce nouveau membre ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
   With LO.ListRows.Add(AlwaysInsert:=True)
   .Range(1, 1) = ComboBox1.Value 'On insère une ligne dans le tableau, appartenant à ce groupe
   .Range(1, 2) = TextBox1
   End With
    LO.DataBodyRange.Sort Key1:=Range("Tableau_general[Groupe]"), Order1:=xlAscending, Header:=xlYes
 End If
End Sub
Private Sub CommandButton2_Click()
Me.Hide
End Sub
Et comme désormais, tu es ultra-attentive, ton prochain message sera:
"Bingo! Ca marche ;)"
Tant que je ne lirai pas ce genre de phrases, je reste confiné dans mon fauteuil à écouter David G. ou autres "vieilleries"des seventies ;)
 

Ananas94

XLDnaute Junior
Ahaha !
Mille MERCIS , je peux te dire désormais que ça marche ... presque !!!
en effet, il y a une dernière coquille : les groupe sont en fait triés par ordre alphabétique mais ce n'est pas mon souhait ... je souhaite juste ajouter une ligne SOUS le groupe ajouté.
Je reviens donc à mon premier amour: la recherche d'une valeur dans le tableau :

Sub insertion_lignebis()
'Procédure pour insérer une ligne dans le tableau une fois qu'un nom de groupe a été trouvé'

Dim Cellule As Range
cat_groupe = ComboBox1.Value
groupetrouve = False
lig = 7
Do While Cells(lig, 2) <> ""
groupelu = Cells(lig, 2)
If groupelu = cat_groupe Then
groupetrouve = True
Else
If groupetrouve Then
liginsertion = lig
groupetrouve = False
End If
End If
lig = lig + 1
Loop
Cells(liginsertion, 2).Select
Selection.EntireRow.Insert
Cells(liginsertion, 2) = cat_groupe
End Sub

c'est moche mais dans l'idée c'est un peu ça ... qu'en pensez-vous ? N'est-ce pas un peu barbare pour ajouter ça à un UserForm?

Par ailleurs, je pense qu'il serait également de bon ton au passage de réarranger les bordures afin que chaque groupe (par catégorie donc, je ne sais pas si je suis claire ndlr) soit en bordure noire plus épaisse.
Je vais potasser là-dessus en attendant votre réponse.
NB : idéalement, il faudrait aussi au passage, copier les formules des lignes plus hautes mais nous y reviendrons plus tard....

Merci quand même
A tout à l'heure j'espère

Anna
 

Ananas94

XLDnaute Junior
Re

J'ai ajouté un bout de code pour arranger les bordures (toujours dans le formulaire, sous le bouton validation).
Lorsque je lance la macro, j'arrive sur "Propriété ou méthode non gérée par cet objet" en désignant la ligne de code ;
Worksheets("test").LO.ListRows.Range(ComboBox1.Value).Select

Je ne comprends toujours pas ce qui ne va pas....

Je vous remercie d'avance si vous avez une idée pour me débloquer ...

Excellente journée,

Anna
 

Pièces jointes

  • test2.xlsm
    43 KB · Affichages: 8

Staple1600

XLDnaute Barbatruc
Re

Si le tri alpha existe, c'est qu'il doit y avoir une raison ;)
Donc moi je ne me complique pas la vie (et j'aime pas que la hiérarchie me la complique ;))
Les bordures, ça me rappelle les frontières, et je déteste les frontières.
(Tu me diras avec plus de frontières, moins de pandémie ;))
Quant aux formules, c'est là un des bénéfices des tableaux structurés, les formules sont recopiés à chaque insertion de ligne
(Comme le montrait mon exemple de test)
 

Ananas94

XLDnaute Junior
Re

Le tri alpha, c'est une excellente idée. Je viens de le faire, c'est vraiment génial !
Je ne me suis pas encore occupée des bordures.

Pour les formules, je verrai cela lundi, je suis un peu fatiguée. A chaque jour suffit sa peine comme on dit :)

Mille mercis en tout cas, vous me sauvez la vie (professionnelle !), vous ne vous imaginez peut-être pas !

Merci beaucoup, !!!

A lundi du coup, je reviendrai avec d'autres questions (moins pénibles promis)

Anna
 

Staple1600

XLDnaute Barbatruc
Re,

•>Anna
[relativisons, relativisons]
Je ne sauve la vie de personne.
Ce n'est que du VBA
Par contre, le corps médical sauve des vies
Des civils, des ONG en Syrie sauvent des vies
[/relativisons, relativisons]

Moi, je ne fait que taper sur un clavier pour aider d'autres gens qui tapent aussi sur un clavier.
(De vrais nid à microbes d'ailleurs, ces claviers ;))
 

Discussions similaires

Statistiques des forums

Discussions
315 094
Messages
2 116 144
Membres
112 669
dernier inscrit
Guigui2502