IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Word Discussion :

Supprimer lignes du tableau si checkbox décochées ?


Sujet :

VBA Word

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi

    Informations forums :
    Inscription : mai 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut Supprimer lignes du tableau si checkbox décochées ?
    Bonsoir,

    Je me permet de créer un topic car j'ai besoin de votre précieuse aide pour finaliser un projet perso.

    Je débute sur VBA Word, jusqu'ici je me suis débrouillé à l'aide de vidéos et de certaines réponses par des personnes beaucoup + savantes sur ce langage que moi mais actuellement je bute sur une étape.

    J'ai créé un un formulaire UserForm1 qui pop au moment ou j'ouvre un document Word.
    Ce formulaire m'aide à créer une saisie sur le document Word en question à l'aide de TextBox, ComboBox et CheckBox.

    Jusqu'ici j'arrive a bien paramétrer mes TextBox et ComboBox qui sont liés à de Signets (Bookmarks).

    En revanche je souhaite faire correspondre mes CheckBox avec des lignes de mon tableau :

    Nom : test.jpg
Affichages : 149
Taille : 426,6 Ko

    Comme vous pouvez le voir, certaines CheckBox doivent être reliées à plusieurs lignes.

    L'idée c'est que si une CheckBox n'est pas cochée au moment ou je click sur mon bouton créer, la ou les lignes correspondantes à cette CheckBox soit supprimées.

    Un personne m'a répondu en anglais "The simple solution is to loop backwards through your checkboxes to test whether they're checked and, if not, delete the corresponding rows from the table"

    Je vous avoue que cela ne m'a pas vraiment aidé

    Une personne sait elle par ou je dois commencer pour réaliser cette action ?

    Merci infiniment !

    Bonne soirée

  2. #2
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    octobre 2007
    Messages
    4 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : octobre 2007
    Messages : 4 194
    Points : 6 459
    Points
    6 459
    Par défaut
    Salut,
    Post crossing
    Effectivement la personne qui vous a répondu en anglais vous donne la piste à suivre.
    Vous devez exécuter 2 boucles du type For i = 1 to ??
    - une boucle pour parcourir les cellules de la 1ère colonne de votre tableau
    - une autre boucle pour parcourir les checkbox de votre USF
    - de trouver une correspondance entre valeur d'une cellule de la 1ère colonne de votre tableau et valeur du Caption de vos checkbox.
    - et si correspondance supprimer la ligne du tableau
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  3. #3
    Membre averti
    Inscrit en
    avril 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : avril 2008
    Messages : 198
    Points : 393
    Points
    393
    Par défaut
    Bonjour K1ngsTi, hyperion13, le forum,

    Peux-tu s’il te plait nous fournir un exemple de document Word avec le tableau et le formulaire s’il te plait ?
    Ce sera plus simple pour t’aider.

    A+

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi

    Informations forums :
    Inscription : mai 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Merci Hyperion13 pour votre retour,

    je devrais commencer par ce type de code ?


    Dim i As Integer

    If CheckBox1.Value = False Then
    For i = 1 To 7

    Le souci c'est que je ne me suis pas vraiment formé au VBA Word, j'ai juste étudié le code d'autres personnes et l'ai adapté à mon profil + quelques vidéos YouTube qui aident bien.
    Dans mon cas je ne trouve pas d'exemple précis pour du VBA Word mais + pour du VBA Excel

    Je ne sais pas comment faire correspondance 1 checkBox avec plusieurs lignes d'un tableau.
    D'après mes maigres connaissances il faut que je passe par ce type de commande pour sectionner mon tableau :

    ThisDocument.Tables(1).Cell(Row:=1, Column:=1).Range /// Table(1) est donc le premier tableau de mon document Word si je comprends bien ?

    Mromain, j'ai posté une image regroupant une partie de mon USF et de mon tableau Word sur mon premier post mais elle ne semble pas s'afficher. Hyperion13 a mis une image qui montre ce que j'ai de mon coté.

    Bonne soirée à vous

  5. #5
    Membre averti
    Inscrit en
    avril 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : avril 2008
    Messages : 198
    Points : 393
    Points
    393
    Par défaut
    Bonjour K1ngsTi,

    Mromain, j'ai posté une image regroupant une partie de mon USF et de mon tableau Word sur mon premier post mais elle ne semble pas s'afficher. Hyperion13 a mis une image qui montre ce que j'ai de mon coté.
    J'avais bien vu oui, mais ça reste une image.
    Pour te faire une proposition pertinente, ça vaut le coup d’avoir ton fichier :
    • Voir comment sont nommées tes checkbox
    • Voir si les codes correspondent (C3 <> C0003)
    • ...


    Après, c'est toi qui vois.

    A+

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi

    Informations forums :
    Inscription : mai 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par mromain Voir le message
    Bonjour K1ngsTi,


    J'avais bien vu oui, mais ça reste une image.
    Pour te faire une proposition pertinente, ça vaut le coup d’avoir ton fichier :
    • Voir comment sont nommées tes checkbox
    • Voir si les codes correspondent (C3 <> C0003)
    • ...


    Après, c'est toi qui vois.

    A+
    Oui, je comprends ton point de vue mais le fichier sur lequel je boss contient quelques info perso concernant ma boite, par mesure de sécu je préfère ne pas le rendre public.
    Je peux te dire que :

    Les checkbox se nomment C3, C4, C5, C6 etc...
    Mon document = ThisDocument
    Le tableau concerné c'est le 3 dans mon .word donc logiquement Tables(3) ?

    Merci pour ton aide aussi en tout cas.

    Bonne soirée

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi

    Informations forums :
    Inscription : mai 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Je suis passé par cette commande :

    If UserForm1.C3.Value = False Then _
    ThisDocument.Tables(3).Rows(3).Delete

    Très certainement pas la plus opti et désolé pour celles et ceux que ca va rebuté mais avec mes connaissances actuelles difficile pour moi de sortir autre chose.

    Ma question c'est comment supprimer plusieurs lignes en même temps car ici je ne supprime uniquement la lige 3 de mon tableau.
    J'ai beau chercher , pas moyen de trouver une commande qui englobe la ligne 3 à 6 par exemple. J'ai essayé ThisDocument.Tables(3).Rows("3:5").Delete mais cela ne fonctionne pas.

  8. #8
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    octobre 2007
    Messages
    4 194
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : octobre 2007
    Messages : 4 194
    Points : 6 459
    Points
    6 459
    Par défaut
    re,
    Comme l'impression qu'il y a un problème sur le forum Word et les pj image
    J'ai créé un tableau et un USF selon ta capture d'écran Post#1
    Pour des questions de pratique :
    - j'ai gardé les noms (Name) respectifs donnés par défaut (CheckBox1, etc.) à toutes les chk.
    - j'ai renommé les légendes (Caption) respectives (C0001, C0002, etc.)
    Pour la sub()
    - L3 à L7 on déclare
    - L9, L10, L18, L20 on instancie
    - L11 on compte le nombre de lignes dans le tableau 1
    - L17 on parcourt le tableau 1 de la dernière ligne jusqu'à la 2ème, ligne par ligne
    - L19 on parcourt dans l'USF les chk qui nous intéresse
    - L21 on vérifie que des chk sont cochées
    - L22 on vérifie que la valeur d'une cellule de la 1ère colonne (Cell(r, 1)) soit égale au Caption d'une chk
    - L23 si c'est vrai on supprime la ligne r correspondante.
    - L29/31 on réajuste largeur colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Option Explicit
    Private Sub CommandButton1_Click()
    Dim wdDoc As Word.Document
    Dim wdTable As Word.Table
    Dim wdCell As Word.Range
    Dim ctrl As MSForms.Control
    Dim i As Long, r As Long, iRows As Long
     
    Set wdDoc = ActiveDocument
    Set wdTable = wdDoc.Tables(1)
    iRows = wdTable.Rows.Count
     
    Unload UserForm1
     
    Application.ScreenUpdating = False
     
    For r = iRows To 2 Step -1
    Set wdCell = wdTable.Cell(r, 1).Range
        For i = 1 To countChkC(Me)
        Set ctrl = Me.Controls("CheckBox" & i)
            If ctrl.Value = False Then
                If Left(wdCell.Text, 5) = ctrl.Caption Then
                    wdTable.Rows(r).Delete
                End If
            End If
        Next i
    Next r
    With wdTable
        .Columns(1).Width = CentimetersToPoints(3)
        .Columns(2).Width = CentimetersToPoints(6)
        .Columns(3).Width = CentimetersToPoints(7)
    End With
    Application.ScreenUpdating = True
    End Sub
    Dans un module standard
    Pour calculer L19 dans la sub()
    On compte le nombre de chk dont la Caption comme par C
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Function countChkC(nomUSF As UserForm) As Integer
    Dim ctrl As MSForms.Control
     
    For Each ctrl In nomUSF.Controls
        If TypeOf ctrl Is MSForms.CheckBox And Left(ctrl.Caption, 1) = "C" Then
            countChkC = countChkC + 1
        End If
    Next
    End Function
    C'est une proposition parmi d'autres.
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  9. #9
    Membre averti
    Inscrit en
    avril 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : avril 2008
    Messages : 198
    Points : 393
    Points
    393
    Par défaut
    Bonjour K1ngsTi, hyperion13, le forum,

    Ci-joint une autre proposition.
    Elle contient une fonction permettant de nettoyer les codes en supprimant les zéros superflus. Du coup, C3 correspond bien à C0003 comme dans ton screenshot initial.
    Le code du bouton et la fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    Private Sub Btn_Test_Click()
    Dim ctrl As MSForms.Control
    Dim dicoKeepCodes As Object     'Scripting.Dictionary
    Dim codeService As String
    Dim iRow As Long
     
        ' 1 - récupérer les codes à garder (les checkbox cochées) dans un dictionnaire
        Set dicoKeepCodes = CreateObject("Scripting.Dictionary")
        For Each ctrl In Me.Controls    'boucler sur tous les contrôles
            If (TypeOf ctrl Is MSForms.CheckBox) And (ctrl.Object.Caption Like "C*") Then   'filtrer sur les checkbox dont le caption commence par "C"
                If ctrl.Object.Value Then           'si la checkbox est cochée
                    codeService = CleanCode(ctrl.Object.Caption)    'récupérer le code service "nettoyé"
                    dicoKeepCodes.Add codeService, codeService      'l'ajouter au dictionnaire
                End If
            End If
        Next ctrl
     
        ' 2 - boucler sur toutes les lignes du tableau et supprimer les lignes non cochées
        With ThisDocument.Tables(3)
            For iRow = .Rows.Count To 3 Step -1     'boucler sur toutes les lignes
                codeService = CleanCode(.Cell(iRow, 1).Range.Text)  'récupérer le code service "nettoyé"
                'si le code service n'est pas  coché, supprimer la ligne
                If Not dicoKeepCodes.Exists(codeService) Then .Rows(iRow).Delete
            Next iRow
        End With
     
        ' 3 - masquer le formulaire
        Me.hide
    End Sub
     
     
    'fonction dédiée à "nettoyer un code" (remplace 'C0001' en 'C1')
    Private Function CleanCode(rawCode As String) As String
    Dim iCar As Long
    Dim nbCar As Long
    Dim firstLine As String
        'si le code contient un saut de ligne, récupérer uniquement la partie avant celui-ci
        If InStr(rawCode, vbCr) = 0 Then
            firstLine = rawCode
        Else
            firstLine = Left(rawCode, InStr(rawCode, vbCr) - 1)
        End If
        'identifier la position de la partie numérique à droite
        nbCar = Len(firstLine)
        For iCar = nbCar To 1 Step -1
            If Not IsNumeric(Mid(firstLine, iCar, 1)) Then Exit For
        Next iCar
        'nettoyer les "zéros en trop"
        If iCar = nbCar Then
            CleanCode = firstLine
        Else
            CleanCode = Left(firstLine, iCar) & Val(Right(firstLine, nbCar - iCar))
        End If
    End Function
    exemple.zip

    A+
    Fichiers attachés Fichiers attachés

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi

    Informations forums :
    Inscription : mai 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Un GRAND merci à vous 2 pour vos retours.
    Hâte de pouvoir tester tout ça.

    J'actualiserai la discussion si des problèmes persistes et que je n'arrive pas à les résoudre

    Merci encore à vous

  11. #11
    Membre averti
    Inscrit en
    avril 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : avril 2008
    Messages : 198
    Points : 393
    Points
    393
    Par défaut
    Bonjour K1ngsTi,

    Je préfère te répondre ici.
    De manière générale, il vaut mieux éviter les MP et préférer continuer sur le fil de discussion pour avoir des compléments. Tu auras plus de chance d’avoir des réponses.

    Pour ta demande, à savoir :
    Mon petit problème c'est que quand aucunes checkbox "C*" n'est cochées, effectivement toutes les lignes de mon tableau sont effacées SAUF les 2 premières (voir image sur le lien) Image : https://www.noelshack.com/2023-05-4-...37-testest.jpg
    Comment selon je peux faire pour indiquer si aucunes cases n'est cochées, alors supprimer le tableau ?
    Tu peux modifier le code du bouton ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Btn_Test_Click()
    Dim ctrl As MSForms.Control
    Dim dicoKeepCodes As Object     'Scripting.Dictionary
    Dim codeService As String
    Dim iRow As Long
     
        ' 1 - récupérer les codes à garder (les checkbox cochées) dans un dictionnaire
        Set dicoKeepCodes = CreateObject("Scripting.Dictionary")
        For Each ctrl In Me.Controls    'boucler sur tous les contrôles
            If (TypeOf ctrl Is MSForms.CheckBox) And (ctrl.Object.Caption Like "C*") Then   'filtrer sur les checkbox dont le caption commence par "C"
                If ctrl.Object.Value Then           'si la checkbox est cochée
                    codeService = CleanCode(ctrl.Object.Caption)    'récupérer le code service "nettoyé"
                    dicoKeepCodes.Add codeService, codeService      'l'ajouter au dictionnaire
                End If
            End If
        Next ctrl
     
        ' 2 - supprimer les lignes du tableau ou le tableau entier
        With ThisDocument.Tables(3)
            If dicoKeepCodes.Count = 0 Then
                'si aucun code n'est coché, supprimer le tableau
                .Delete
            Else
                'sinon, boucler sur toutes les lignes du tableau et supprimer les lignes non cochées
                For iRow = .Rows.Count To 3 Step -1     'boucler sur toutes les lignes
                    codeService = CleanCode(.Cell(iRow, 1).Range.Text)  'récupérer le code service "nettoyé"
                    'si le code service n'est pas  coché, supprimer la ligne
                    If Not dicoKeepCodes.Exists(codeService) Then .Rows(iRow).Delete
                Next iRow
            End If
        End With
     
        ' 3 - masquer le formulaire
        Me.hide
    End Sub
    A+

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Recherche d'emploi
    Inscrit en
    mai 2018
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Recherche d'emploi

    Informations forums :
    Inscription : mai 2018
    Messages : 10
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par mromain Voir le message
    Bonjour K1ngsTi,

    Je préfère te répondre ici.
    De manière générale, il vaut mieux éviter les MP et préférer continuer sur le fil de discussion pour avoir des compléments. Tu auras plus de chance d’avoir des réponses.

    Pour ta demande, à savoir :


    Tu peux modifier le code du bouton ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Btn_Test_Click()
    Dim ctrl As MSForms.Control
    Dim dicoKeepCodes As Object     'Scripting.Dictionary
    Dim codeService As String
    Dim iRow As Long
     
        ' 1 - récupérer les codes à garder (les checkbox cochées) dans un dictionnaire
        Set dicoKeepCodes = CreateObject("Scripting.Dictionary")
        For Each ctrl In Me.Controls    'boucler sur tous les contrôles
            If (TypeOf ctrl Is MSForms.CheckBox) And (ctrl.Object.Caption Like "C*") Then   'filtrer sur les checkbox dont le caption commence par "C"
                If ctrl.Object.Value Then           'si la checkbox est cochée
                    codeService = CleanCode(ctrl.Object.Caption)    'récupérer le code service "nettoyé"
                    dicoKeepCodes.Add codeService, codeService      'l'ajouter au dictionnaire
                End If
            End If
        Next ctrl
     
        ' 2 - supprimer les lignes du tableau ou le tableau entier
        With ThisDocument.Tables(3)
            If dicoKeepCodes.Count = 0 Then
                'si aucun code n'est coché, supprimer le tableau
                .Delete
            Else
                'sinon, boucler sur toutes les lignes du tableau et supprimer les lignes non cochées
                For iRow = .Rows.Count To 3 Step -1     'boucler sur toutes les lignes
                    codeService = CleanCode(.Cell(iRow, 1).Range.Text)  'récupérer le code service "nettoyé"
                    'si le code service n'est pas  coché, supprimer la ligne
                    If Not dicoKeepCodes.Exists(codeService) Then .Rows(iRow).Delete
                Next iRow
            End If
        End With
     
        ' 3 - masquer le formulaire
        Me.hide
    End Sub
    A+
    Salut Mromain,

    Oui tu as raison, c'est mieux d'échanger ici pour que d'autres personnes puissent voir la discussion et peut être y trouver des réponses.

    Ton code marche super bien et effectivement maintenant le tableau est effacé si rien n'est coché

    J'ai cependant une erreur "438" quand je souhaite ajouter à mon USF une zone de liste modifiable ou une zone de texte (sans y inscrire de code, uniquement sur le formulaire)
    J'ai cette ligne qui est surlignée en jaune : If (TypeOf ctrl Is MSForms.CheckBox) And (ctrl.Object.Caption Like "C*") Then 'filtrer sur les checkbox dont le caption commence par "C"

    J'ai pensé à un problème de "caption" mais visiblement non

    Merci

  13. #13
    Membre averti
    Inscrit en
    avril 2008
    Messages
    198
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : avril 2008
    Messages : 198
    Points : 393
    Points
    393
    Par défaut
    Bonjour K1ngsTi,

    J'ai bien réussi à reproduire le problème dont tu parles.
    Tu trouveras ci-dessous le code du bouton modifié :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub Btn_Test_Click()
    Dim ctrl As MSForms.Control
    Dim dicoKeepCodes As Object     'Scripting.Dictionary
    Dim codeService As String
    Dim iRow As Long
     
        ' 1 - récupérer les codes à garder (les checkbox cochées) dans un dictionnaire
        Set dicoKeepCodes = CreateObject("Scripting.Dictionary")
        For Each ctrl In Me.Controls    'boucler sur tous les contrôles
            If TypeOf ctrl Is MSForms.CheckBox Then         'filtrer sur les checkbox
                If (ctrl.Object.Caption Like "C*") And ctrl.Object.Value Then     'si le caption commence par "C" et la checkbox est cochée
                    codeService = CleanCode(ctrl.Object.Caption)    'récupérer le code service "nettoyé"
                    dicoKeepCodes.Add codeService, codeService      'l'ajouter au dictionnaire
                End If
            End If
        Next ctrl
     
        ' 2 - supprimer les lignes du tableau ou le tableau entier
        With ThisDocument.Tables(3)
            If dicoKeepCodes.Count = 0 Then
                'si aucun code n'est coché, supprimer le tableau
                .Delete
            Else
                'sinon, boucler sur toutes les lignes du tableau et supprimer les lignes non cochées
                For iRow = .Rows.Count To 3 Step -1     'boucler sur toutes les lignes
                    codeService = CleanCode(.Cell(iRow, 1).Range.Text)  'récupérer le code service "nettoyé"
                    'si le code service n'est pas  coché, supprimer la ligne
                    If Not dicoKeepCodes.Exists(codeService) Then .Rows(iRow).Delete
                Next iRow
            End If
        End With
     
        ' 3 - masquer le formulaire
        Me.hide
    End Sub
    A+

Discussions similaires

  1. [XL-2003] Problème pour supprimer une ligne quand checkbox décoché
    Par babou81 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/07/2018, 14h13
  2. Réponses: 4
    Dernier message: 25/11/2008, 09h46
  3. Ajouter ligne dans tableau / Ajouter checkbox & signet
    Par TIREUR dans le forum VBA Word
    Réponses: 5
    Dernier message: 16/06/2007, 00h45
  4. supprimer ligne de tableau ou div
    Par trax44 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 22/11/2006, 11h32
  5. Style d'une ligne d'un tableau et Checkbox
    Par echecetmat dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 25/01/2005, 15h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo