XL 2016 Supprimer ligne d'un tableau structuré en vba

halecs93

XLDnaute Impliqué
Bonjour à toutes et à tous.

Et d'abord merci pour toute l'aide rencontrée ici.

J'ai pu presque finaliser mon fichier. Je n'arrive pas à ajouter une dernière fonction : une macro qui permettrait à l'utilisateur de supprimer une ligne (en utilisant les numéros qui s'incrémentent de 1 en 1 en colonne A) tout en renumérotant ces lignes pour que cela reste logique (1, 2, 3, etc.)

Quoi qu'il en soit... grand merci.
 

Pièces jointes

  • CALCUL DES POINTS - DEFI MOBILITE - TEST2.xlsm
    266.7 KB · Affichages: 20

patricktoulon

XLDnaute Barbatruc
Piste intéressante.... mais cela efface la dernière ligne.... or je cherchais moyen de demander à l'utilisateur d'effacer la ligne de son choix. (je m'aperçois que le total des points en B4.... n'apparait plus...). Merci beaucoup
re
non ca efface la ligne sélectionnée c'est pas la même chose
l'indexation par formule serait une bonne idée
 

patricktoulon

XLDnaute Barbatruc
hoh purée j'avais pas regardé le code dans le userform 😰🥳

donc j'ai bloqué cette ligne de code
VB:
'ws.Cells(nextRow, 1).Value = rowNum ' Colonne A (Numéro de ligne)

et dans la ligne 1 donc après le header
en colonne A je met =ligne()-2

voilà l'indexation est automatique en ajout et en suppression
du coup ceci suffit a supprimer la ligne active et l'indexation en "A" se refait automatiquement


Code:
Sub deleteListrow()
    Dim I&
    ActiveSheet.Unprotect
    'suppression de la shape
    For Each shap In ActiveSheet.Shapes
        If shap.TopLeftCell.Row = ActiveCell.Row Then shap.Delete
    Next

    'suppression de la ligne
    With Range("Tableau1").ListObject
        .ListRows(ActiveCell.Row - .Range.Row).Delete
    End With
    DoEvents

    
    'ActiveSheet.Protect
End Sub
 

Cousinhub

XLDnaute Barbatruc
et dans la ligne 1 donc après le header
en colonne A je met =ligne()-2

voilà l'indexation est automatique en ajout et en suppression
du coup ceci suffit a supprimer la ligne active et l'indexation en "A" se refait automatiquement
Re-,
C'est un tout petit peu (voire dans l'entièreté), ce que j'ai dit dans ma première intervention...
Dans la conception du TS.
Inutile de masquer la ligne 3 (contre-productif)
Démasque-là, et dans la cellule A3, tu mets cette formule :
Code:
Code:
=LIGNE()-2
Puis, clic droit dans cette ligne, "Supprimer-Ligne de tableau"
Dès que tu entres une donnée (dans la cellule Date, par exemple), la formule se met automatiquement...
Donc, rien à "Ajouter/Supprimer", le TS garde en mémoire la formule
 

patricktoulon

XLDnaute Barbatruc
re
j'ai commencé a nettoyer ton userform
pour commencer le initialyse et le keydown de ton textboxdate
VB:
Private Sub TextBoxDate_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim dateValue$
    dateValue = Me.TextBoxDate.Value
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        ' Vérifier le format de la date
        If IsDate(TextBoxDate.Value) Then
            TextBoxDate = CDate(TextBoxDate.Value)
            Label1.Visible = True
            ComboBoxB5.Visible = True
            ComboBoxB5.SetFocus
        Else
            MsgBox "Format de date invalide. Utilisez le format jj/mm/aaaa (par exemple, 01/01/2023).", vbExclamation
            Me.TextBoxDate.Value = ""

        End If
    End If

End Sub

Private Sub UserForm_Initialize()
' Ajouter les options possibles pour ComboBoxB5
    ComboBoxB5.List = Array("Co-voiturage", "Vélo classique", "Vélo électrique", "Multi mobilité", "Marche")

    ComboBoxC5.List = Array(2, 3, 4)

    ComboBoxE5.List = Array("Trajet domicile - travail", "Temps de travail dont formation")

    ComboBoxF5.List = Array("- de 10", "de 10 à 20", "+ de 20")

    ComboBoxG5.List = Array(1, 2, 3, 4)

    For Each ctrl In Me.Controls
    If Not " TextBoxDate labeldate " Like "* " & ctrl.Name & " *" Then ctrl.Visible = False
    Next
    TextBoxDate = Date
End Sub
alors le textboxdate maintenant tu peux lui entrer une date sous tout les format
a partir du moment ou elle est valide au keydown (TAB ou ENTER) elle est formatée au format "jj/mm/aaaa"
autrement dit tu peux taper
1/1/23-->valide
1/1/2023-->valide
2023/1/1-->valide
ta date sera transformée en 01/01/2023
par contre si tu tape par exemple
2023/15/11
11/15/2023
32/12/2023
là tu aura ton message
et hop je shunte la fonction de validité de date
et il y a du boulot encore ;)
 

halecs93

XLDnaute Impliqué
re
j'ai commencé a nettoyer ton userform
pour commencer le initialyse et le keydown de ton textboxdate
VB:
Private Sub TextBoxDate_Keydown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    Dim dateValue$
    dateValue = Me.TextBoxDate.Value
    If KeyCode = vbKeyReturn Or KeyCode = vbKeyTab Then
        ' Vérifier le format de la date
        If IsDate(TextBoxDate.Value) Then
            TextBoxDate = CDate(TextBoxDate.Value)
            Label1.Visible = True
            ComboBoxB5.Visible = True
            ComboBoxB5.SetFocus
        Else
            MsgBox "Format de date invalide. Utilisez le format jj/mm/aaaa (par exemple, 01/01/2023).", vbExclamation
            Me.TextBoxDate.Value = ""

        End If
    End If

End Sub

Private Sub UserForm_Initialize()
' Ajouter les options possibles pour ComboBoxB5
    ComboBoxB5.List = Array("Co-voiturage", "Vélo classique", "Vélo électrique", "Multi mobilité", "Marche")

    ComboBoxC5.List = Array(2, 3, 4)

    ComboBoxE5.List = Array("Trajet domicile - travail", "Temps de travail dont formation")

    ComboBoxF5.List = Array("- de 10", "de 10 à 20", "+ de 20")

    ComboBoxG5.List = Array(1, 2, 3, 4)

    For Each ctrl In Me.Controls
    If Not " TextBoxDate labeldate " Like "* " & ctrl.Name & " *" Then ctrl.Visible = False
    Next
    TextBoxDate = Date
End Sub
alors le textboxdate maintenant tu peux lui entrer une date sous tout les format
a partir du moment ou elle est valide au keydown (TAB ou ENTER) elle est formatée au format "jj/mm/aaaa"
autrement dit tu peux taper
1/1/23-->valide
1/1/2023-->valide
2023/1/1-->valide
ta date sera transformée en 01/01/2023
par contre si tu tape par exemple
2023/15/11
11/15/2023
32/12/2023
là tu aura ton message
et hop je shunte la fonction de validité de date
et il y a du boulot encore ;)
Merci pour cette partie de code. Bien plus simple pour entrer la date ;)
 

halecs93

XLDnaute Impliqué
Bonjour,
Quand tu affirmes "très perfectible", je ne peux que plussoyer...
Surtout que tu n'écoutes rien de ce qu'on te dit...
Donc perfectible, mais par qui, si tu ne fais aucun effort?
Bon courage
Bonjour... j'écoute, je lis plutôt, et j'essaie de comprendre. Tout ne m'est pas accessible. Voilà pourquoi j'applique (je crois) ce que je comprends. Encore une fois, je n'ai aucune compétence... et j'essaie de me perfectionner... d'où le perfectible. En effet, le fichier que je viens de poster correspond à ce que je souhaitais au départ.

Alors, encore merci à tout le monde
 

Cousinhub

XLDnaute Barbatruc
Bonsoir,
Pas de soucis, c'est juste que tu avais plusieurs pistes, dont la formule en 1ère colonne de ton TS (solution la plus fiable) et la neutralisation de la ligne de code que patrick et moi t'avons citée en post 5 et 18.
Pour l'utilisation des codes propres aux TS, je t'ai indiqué un petit tuto, mais si effectivement ton niveau ne te permet pas de mettre en application, nul doute que tu trouveras de l'aide ici (pour ma part, refaire des codes n'est plus dans mes "priorités")
Bon courage
 
Dernière édition:

Discussions similaires

Réponses
22
Affichages
772

Statistiques des forums

Discussions
312 207
Messages
2 086 248
Membres
103 164
dernier inscrit
axelheili2