Suppression spécifique via macro
Bonjour à tous,
Dans l'onglet "trame", j'ai une fonction qui permet d'ajouter des tableaux. J'ai un bouton "suppression spécifique" qui me permet de supprimer un tableau en cas de besoin (erreur ou autre). Le problème c'est que dans mon exemple, j'ai ajouté 3 mêmes tableaux qui sont "BAC ACIER NON PERFORÉ", et que si je choisis de supprimer le tableau du milieu "BAC ACIER NON PERFORÉ" il me supprime le dernier. Je pense vouloir ajouter des boutons "supprimer tableau 1" "supprimer tableau 2" etc... mais l'idée c'est que la suppression soit dynamique et qu'en cas de suppression au milieu, l'emplacement des tableaux s'ajustent pour qu'il n'y ait pas trop d'espaces vides entre les tableaux. Je suis sûre qu'il y a une façon d'optimiser ces actions. J'ai peur que "suppr tableau 1" "suppr tableau 2" etc soit trop lourd en code. Sachant qu'il n'y a jamais d'ordre identique pour l'insertion des tableaux, je pense que c'est aussi ça qui complique la tache... d'avance merci pour votre aide. belle journée !
PS : j'utilise Excel Version 2507
Bonjour et bienvenu sur ce forum
j'utilise Excel Version 2507
Ok mais 2507 correspond à un identifiant de mise à jour mais pas à la version principale à savoir
Exemple : ici 2016, ce que vous avez probablement
Renseignez-la dans votre profil de compte pour ne pas que vous la redemande la prochaine fois
Si vous êtes sous MAC ajoutez-le aussi --> MAC 2016
Pour votre souci de suppression, je suppose que ce n'est pas effacer les données mais bien supprimer les lignes du tableau choisi
Si oui, pourquoi passer par une userform que vous devrez amender à chaque nouveau tableau ajouté ou supprimé
En voyant votre demande, j'irais au plus simple en sélectionnant la cellule concernée dans le tableau puis click sur le bouton suppression
Exemple : si vous voulez supprimer le tableau "Support : bac acier non perforé", sélectionnez la cellules B32 puis click sur suppression pour supprimer les lignes de ce tableau.
Là un seul code de quelques lignes et valable pour tous les tableaux !
Votre avis ?
Bonjour,
merci pour le retour rapide ! concernant la version je n'ai pas d'année, mais ceci :
Microsoft® Excel® pour Microsoft 365 MSO (Version 2507 Build 16.0.19029.20136) 64 bits
alors je ne sais pas trop.. Sinon je suis bien sur PC ;)
Mon but, c'est bien de supprimer le tableau en entier. Et là où mon code ne fonctionne pas, c'est que si l'utilisateur ajoute 6 tableaux (par exemple 4 différents et 2 identiques) et qu'il veut supprimer le 1 qui correspond au 1er "Support : bac acier non perforé" et bien le code supprime le dernier tableau "Support : bac acier non perforé" qui est dans mon exemple illustré ici, en 3eme position. je ne sais pas si c'est très clair..
Sur votre exemple, je ne visualise pas très bien la démarche. je crois que compte tenu de toutes les variantes à l'ajout du tableau, le userform me semblait le plus simple pour choisir le nb d'isolants ou de membranes..
Merci à vous
bonjour Servane, voir macro "test"
re
la version je n'ai pas d'année, mais ceci :
Microsoft® Excel® pour Microsoft 365 MSO (Version 2507 Build 16.0.19029.20136) 64 bits
C'est vrai que parfois ce n'est pas indiqué. Dans votre cas vous pouvez mentionner ceci --> 365 MSO
Sur votre exemple, je ne visualise pas très bien la démarche.
La démarche est de sélectionner la cellule qui mentionne le nom du support
Faites ceci pour voir
1. mettez ce code dans un nouveau module
Option Explicit
Option Compare Text
Sub suppression()
If ActiveCell.Value Like "*Support*" Then 'verifie que la cellule selectionnee contient le mot Support
If MsgBox("Voulez-vous supprimer le tableau faisant partie de la cellule " & ActiveCell.Address & " ?", vbYesNo + vbQuestion + vbDefaultButton2, "Suppression tableau") = vbYes Then
Range("B" & ActiveCell.Row - 2 & ":E" & ActiveCell.Row + 11).Delete xlShiftUp
End If
Range("A1").Select
End If
End Sub2. Liez ce code à votre bouton Suppression
Pour la suppression, sélectionnez par exemple B18 ou B32 ou B46 (support bac non perforé) puis cliquez sur votre bouton.
Avec ce code, la méthode est simple vous sélectionnez la cellule qui mentionne "Support" dans le tableau que vous voulez supprimer puis click sur le bouton
Rem : On n'est pas obligé de choisir "support". Le tout est de choisir un mot qui est récurrent à cette position et qui ne se trouve pas ailleurs dans le tableau (ex : le mot "acier")
je crois que compte tenu de toutes les variantes à l'ajout du tableau, le userform me semblait le plus simple pour choisir le nb d'isolants ou de membranes..
L'USF n'est pas plus simple. Si vous supprimez un tableau, comment allez vous gérer l'usf une fois qu'un tableau n'existe plus mais que son bouton existe toujours...
cela me parait plus compliqué à l'utilisation
EDIT : en y repensant il y a plus simple.
Prenez plutôt ce code (toujours à placer dans un nouveau module) et associez-le à votre bouton
Option Explicit
Option Compare Text
Sub suppression()
With ActiveCell
If .Value = vbNullString Or .Row < 16 Then
MsgBox "Veuillez sélectionner une cellule dans le tableau à supprimer et non vide", vbCritical, "Sélection cellule"
Exit Sub
End If
If MsgBox("Voulez-vous supprimer le tableau faisant partie de la cellule " & ActiveCell.Address & " ?", vbYesNo + vbQuestion + vbDefaultButton2, "Suppression tableau") = vbYes Then
.CurrentRegion.Resize(.CurrentRegion.Rows.Count + 5).Delete xlShiftUp
Range("A1").Select
End If
End With
End SubOn n'a plus besoin de vérifier le mot "support" comme décrit avant, il vous suffit de cliquer dans n'importe quelle cellule non vide de votre tableau à supprimer puis click sur votre bouton.
Si la cellule est vide ou si vous cliquez sur une cellule avant la première ligne contenant un tableau (ici ligne 16), le code vous affichera un message d'erreur
Comme dans le code précédent, si la cellule est non vide et que vous êtes dans un tableau, vous demandera confirmation pour la suppression
Bonjour à tous
Une autre manière de voir la chose :
- on se place sur une cellule quelconque du tableau à supprimer (il n'y a plus de userform)
- puis on clique sur le bouton "Suppression d'un seul tableau"
La macro qui s'appelle EffacerTableauCellule est un peu commentée et se trouve dans le module de la feuille "Trame" :
Sub EffacerTableauCellule()
Dim oldcell As Range, xrg As Range, i&, lig1&, lig2&, rep
For i = ActiveCell.Row To 14 Step -1 ' repérage du début du tableau
Set xrg = Cells(i, "b").MergeArea
If xrg.Rows.Count = 2 And xrg.Columns.Count = 4 Then
If xrg.Row = i Then lig1 = i Else lig1 = i - 1
Exit For
End If
Next i
If lig1 = 0 Then Exit Sub ' pas de début -> on quitte
For i = lig1 + 4 To Rows.Count ' repérage de la fin du tableau
If Cells(i, "e") = "" Then lig2 = i - 1: Exit For
Next i
If lig2 = 0 Then Exit Sub ' pas de fin -> on quitte
' on recherche le prochain titre de tableau
For i = lig2 + 1 To lig2 + 333
If Cells(i, "b") <> "" Then Exit For
Next i
If i > lig2 + 5 Then lig2 = i - 6 Else lig2 = i - 1
Range(Cells(lig1, "a"), Cells(lig2, "e")).Select ' sélection de la plage à supprimer
rep = MsgBox("Voulez-vous supprimer le tableau sélectionné ?", vbDefaultButton2 + vbQuestion + vbYesNo)
If rep = vbYes Then ' si on confirme la suppression
Range(Cells(lig1, "b"), Cells(lig2, "e")).EntireRow.Delete ' suppression de la plage du tableau
End If
ExcesLignesVides ' ôter les lignes vides en trop
End Subnota : Une autre macro (ExcesLignesVides) se trouve dans le module de la feuille "Trame". Elle permet de supprimer les excès de lignes vides (on conserve 2 lignes vides avant le premier tableau et 5 lignes vides entre deux tableaux consécutifs). Pour le fun, je lui ai associé un bouton en haut de page. Elle est aussi appelé quand on supprime un tableau.
...