Microsoft 365 effacer cellule dans un tableau structuré

  • Initiateur de la discussion Initiateur de la discussion Bizarre
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Bizarre

XLDnaute Nouveau
Bonjour

Je cherche à supprimer à l’aide d’un code saisi dans une listbox des lignes sur les feuilles (« Achat », » Basededonnée », « tableau de bord » et » « listederoulante »). Pour les 3 premières feuilles avec ce code tout fonctionne parfaitement. Mais pour la feuille « listederoulante » les données sont dans un tableau structuré et le code ne se trouve jamais dans la même cellule du tableau, si quelqu’un a une solution a me proposer cela me permettrais de progresser dans mon projet.
VB:
Sub supp()
Sheets("Achat").Unprotect
Sheets("Basededonnée").Unprotect
Sheets("Listederoulante").Unprotect

    Dim i As Integer
    Dim Editeur As String
    Dim Wsh As Worksheet

    Editeur = InputBox("Entrer la référence colonne A que vous voulez supprimer", "Welcome")
    'la valeur saisie est transmise à la variable Editeur

    For Each Wsh In Worksheets(Array("Achat", "Basededonnée", "Tableau de bord"))
        With Wsh
            NL = .Range("A" & .Rows.Count).End(xlUp).Row
            For i = NL To 3 Step -1
                If .Range("A" & i).Value = Editeur Then
                    .Rows(i).Delete
                End If
            Next i
        End With
    Next Wsh

End Sub
 

Pièces jointes

Solution
RE

Attention à tes copies qui traînent des validations inappropriées dans le Tableau de bord
VB:
Sub supp()
Sheets("Lavage").Unprotect
Sheets("Basededonnée").Unprotect
Sheets("Listederoulante").Unprotect
Sheets("Tableau de bord").Unprotect

    Dim i As Integer
    Dim Editeur As String, Secteur As String
    Dim Wsh As Worksheet

    Editeur = InputBox("Entrer la référence colonne A que vous voulez supprimer", "Welcome")
    'la valeur saisie est transmise à la variable Editeur

    For Each Wsh In Worksheets(Array("Lavage", "Basededonnée", "Listederoulante", "Tableau de bord"))
        With Wsh.ListObjects(1)
            NL = .ListRows.Count
            For i = NL To 1 Step -1
                If .ListColumns(1).DataBodyRange.Cells(i...
Bonjour
VB:
Sub supp()
Sheets("Achat").Unprotect
Sheets("Basededonnée").Unprotect
Sheets("Listederoulante").Unprotect

    Dim i As Integer
    Dim Editeur As String
    Dim Wsh As Worksheet

    Editeur = InputBox("Entrer la référence colonne A que vous voulez supprimer", "Welcome")
    'la valeur saisie est transmise à la variable Editeur

    For Each Wsh In Worksheets(Array("Achat", "Basededonnée", "Tableau de bord"))
        With Wsh.ListObjects(1)
            NL = .ListRows.Count
            For i = NL To 1 Step -1
                If .ListColumns(1).DataBodyRange.Cells(i, 1) = Editeur * 1 Then
                    .ListRows(i).Delete
                    Exit For
                End If
            Next i
        End With
    Next Wsh

End Sub

Edit : oups, j'ai corrigé
 
Dernière édition:
Bonjour Chris ;

Vous êtes plus rapide à répondre que moi pour tester, je viens de faire l’essai et le code n’ais pas effacer dans la feuille « Listedéroulante ». Je me permets donc remettre le fichier en question.
Bonjour @Bizarre🙂 ,@chris😉,

@Bizarre : Pourrais-tu être plus explicite, car sur la feuille "listederoulante" il y a 4 tableaux structurés. Alors que sur les autres feuilles, il n'y a qu'un seul tableau sur lequel le code rechercher est toujours en colonne A. Ce n'est pas le cas de la feuille "listederoulante".

Bonne journée.
 
Bonjour

Arf j'ai manqué d'attention

Pourquoi présenter ainsi ce tableau ? Tu compliques sans doute pour rien...

VB:
Sub supp()
Sheets("Achat").Unprotect
Sheets("Basededonnée").Unprotect
Sheets("Listederoulante").Unprotect

    Dim i As Integer
    Dim Editeur As String, Secteur As String
    Dim Wsh As Worksheet

    Editeur = InputBox("Entrer la référence colonne A que vous voulez supprimer", "Welcome")
    'la valeur saisie est transmise à la variable Editeur

    For Each Wsh In Worksheets(Array("Achat", "Basededonnée", "Tableau de bord"))
        With Wsh.ListObjects(1)
            NL = .ListRows.Count
            For i = NL To 1 Step -1
                If .ListColumns(1).DataBodyRange.Cells(i, 1) = Editeur * 1 Then
                    Secteur = .ListColumns(1).DataBodyRange.Cells(i, 2)
                   .ListRows(i).Delete
                Exit For
                End If
            Next i
        End With
    Next Wsh
   
    With Range("Tableau_code_en_service").ListObject
        With .ListColumns("Sect " & Secteur)
            For i = .Range.Rows.Count - 1 To 1 Step -1
                If .DataBodyRange.Cells(i, 1) = Editeur * 1 Then
                    .DataBodyRange.Cells(i, 1) = ""
                    Lig = i
                    Exit For
                End If
            Next
         End With
        'Suppression ligne si vide
        If WorksheetFunction.CountA(.DataBodyRange.Rows(Lig).Cells) = 0 Then
            .ListRows(i).Delete
        End If
    End With
End Sub

Edit : Bonjour CP4
 
Re ;

Le tableau « Tableau_de_bord » de la feuille « listederoulante » est alimenté par copier-coller des données rentrées en colonne A de la feuille « Basededonnée » vu mon niveau c’est le seul moyen que j’ais trouver pour rentrer les codes afin que ceux-ci ne soient pas en double.

J’ais une ligne en jaune dans le code, pouvez -encore m’aider ?

Je met une capture d’écran de la ligne en question

1643625630479.png
 

Pièces jointes

  • 1643625931637.png
    1643625931637.png
    8.9 KB · Affichages: 23
RE

Ton fichier réel à bien en titre de colonne Sect suivi du nom du secteur trouvé en colonne 2 de l'onglet Tableau de bord ?

Le tableau de bord pourrait être fait en POwerQuery, ce qui limiterait le traitement à une actualisation de ce tableau...
 
RE

Et tu crois qu'avec juste des en-têtes on peut comprendre pourquoi sur une ligne, on a autre chose que ce qui est attendu selon l'exemple manifestement tout sauf REPRÉSENTATIF que tu as fourni ?

C'est parfois désespérant de chercher çà aider des demandeurs qui n'aident pas à les aider...
 
Dernière édition:
RE
Tu devrais relire attentivement la charte...

Tu crois qu'on peut modifier du code sans contexte ?
Si tu passes ta souris sur le lien vers le 1er fichier que tu as transmis tu peux voir qu'il a été ouvert 4 fois et le second 2 fois...

Pourquoi créer et fournir un fichier de type salade de fruits qui n'a rien à voir avec le vrai et nous plonge dans la compote ?
Anonymiser ne veut pas dire transformer la structure, juste remplacer des identifiants par des textes neutres...
 
Dernière édition:
RE

Attention à tes copies qui traînent des validations inappropriées dans le Tableau de bord
VB:
Sub supp()
Sheets("Lavage").Unprotect
Sheets("Basededonnée").Unprotect
Sheets("Listederoulante").Unprotect
Sheets("Tableau de bord").Unprotect

    Dim i As Integer
    Dim Editeur As String, Secteur As String
    Dim Wsh As Worksheet

    Editeur = InputBox("Entrer la référence colonne A que vous voulez supprimer", "Welcome")
    'la valeur saisie est transmise à la variable Editeur

    For Each Wsh In Worksheets(Array("Lavage", "Basededonnée", "Listederoulante", "Tableau de bord"))
        With Wsh.ListObjects(1)
            NL = .ListRows.Count
            For i = NL To 1 Step -1
                If .ListColumns(1).DataBodyRange.Cells(i, 1) = Editeur * 1 Then
                    If Wsh.Name = "Tableau de bord" Then Secteur = .ListColumns(1).DataBodyRange.Cells(i, 2)
                   .ListRows(i).Delete
                Exit For
                End If
            Next i
        End With
    Next Wsh
  
    With Range("Tableau_code_en_service").ListObject
        With .ListColumns(Secteur)
            For i = .Range.Rows.Count - 1 To 1 Step -1
                If .DataBodyRange.Cells(i, 1) = Editeur * 1 Then
                    .DataBodyRange.Cells(i, 1) = ""
                    Lig = i
                    Exit For
                End If
            Next
         End With
        'Suppression ligne si vide
        If WorksheetFunction.CountA(.DataBodyRange.Rows(Lig).Cells) = 0 Then
            .ListRows(i).Delete
        End If
    End With
End Sub
 
Bonjour Chris

Votre solution me convient parfaitement, je vous remercie pour le temps passé a trouver une solution à mon problème. J'ai suivi vos conseils et supprimer les validations inappropriées. Je pense regarder un tuto sur PowerQuery rapidement et encore merci vraiment de votre patience.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
280
Réponses
3
Affichages
611
Réponses
5
Affichages
86
Retour