Supprimer uniquement 2 cellules dans une liste

Résolu
Bonjour,

Voila mon problème !
J'ai un fichier excel avec plusieurs onglets, dont un qui se nomme "Liste"
Dans cette onglet "liste" j'ai créé plusieurs "liste" (Contrat de travail, retraité, fonction, entreprise, nombre de salarie etc......) ces listes me permette de faire des menu déroulant dans un formulaire (jusque la tout va bien.)

Voila le problème : j'aimerais pouvoir supprimer par exemple (une entreprise colonne G, avec le nombre de salariés colonne H) via un autre formulaire, et pour ce faire j'ai utilisé le code suivant :

'Private Sub BtnSuppression_Click()
'Sheets("Liste").Select
'If MsgBox("Confirme tu la suppression de cette ENTREPRISE ?", vbYesNo, "Demande de suppression de l'entreprise") = vbYes Then
'Rows([G02:G1048576].Find(TxtEntrepriseRecherche.Value).Row).EntireRow.Delete
' Unload Me
' FrmEntreprise.Show
'End If

'End Sub

Le problème c'est que :

Rows([G02:G1048576].Find(TxtEntrepriseRecherche.Value).Row).EntireRow.Delete

me supprime entièrement la ligne alors que je souhaiterais pouvoir supprimer que les valeurs correspondantes dans les colonne G et H et que les cellules se décalent vers le haut. Si je supprime la ligne entière je viens modifier les autres listes et cela je ne le veut pas.

J’espère avoir été clair, et je vous remercie par avance de vos réponse !
Bon courage a tous !

9 réponses

  1. Bonjour

    Juste une info: EntireRow signifie ligne entière et donc la commande Delete qui suit efface ... la ligne entière.
    Toi ce que tu veux c’est effacer la/les cellules trouvées : pourquoi ne pas demander à Excel de remplacer la valeur par rien comme dans cet exemple qui devrait t’inspirer:
    https://www.extendoffice.com/documents/excel/4088-excel-button-to-clear-specific-cells.html

    Ritchi
    0
    1. Bonjour Ritchi,

      Oui cela j'y avait pensé, mais les cellules sont nominatives, je veux juste au lieu de supprimer la ligne, supprimer l'entreprise avec le nombre de salariés. Elle peut (l'entreprise) se trouver en G12 ou G20 ou G3012 ou ....etc, donc je ne peux pas utiliser la macro de ton exemple, en plus et il faut en même temps de supprimer l'entreprise, supprimer le nombre d'employés qui se trouve a coté en colonne H !
      Donc l'idée c'est de trouver le code qui va bien, pour remplacer celui ci dessous car il fonctionne très bien mais il supprime la ligne entière effectivement a cause de la valeur EntireRow. Le début du code est bon je pense a savoir :

      Rows([G02:G1048576].Find(TxtEntrepriseRecherche.Value).Row)

      Mais c'est la fin que je ne trouve pas il faut remplacer (.EntireRow.Delete) par ????

      En tout cas merci Ritchi d'voir pris du temps pour me répondre !
      Bonne journée
      0
  2. Je viens d'essayer un tas de lignes de commandes, mais en vain !
    Sais tu me dire par quoi je dois remplacer cette ligne :

    Rows([G02:G1048576].Find(TxtEntrepriseRecherche.Value).Row).EntireRow.Delete

    pour résoudre mon problème !

    Merci,
    0
    1. Contributeur
      Bonjour,

      voici un exemple. J'ai remplacé TxtEntrepriseRecherche par une InputBox:

      Sub test()
      Dim entreprise As String
      Dim ligne As Integer
       entreprise = InputBox("Entrez le nom de l'entreprise:", "Suppression")
      ligne = Cells.Find(entreprise, , xlValues, xlWhole).Row
      Range("G" & ligne & ":H" & ligne).ClearContents
      End Sub


      voilà à adapter

      0
      1. Bonjour le pivert,

        Alors après plusieurs essais infructueux, je ne m'en sort toujours pas .....je vais continuer mes investigations.
        Je vais continuer de chercher a moins que ....... !

        Merci beaucoup
        0
        1. Bonsoir à vous tous

          Balou, Le Pivert t'a aiguillé vers la solution mais incomplètement car il n'y a pas suppression des vides

          En utilisant son instruction combinée à la tienne tu peux obtenir
          ligne = Cells.Find(TxtEntrepriseRecherche.Value, , xlValues, xlWhole).Row
          te donnant le n° de la ligne où effacer les valeurs en G et H
          que tu effaceras avec l'instruction de Le PIvert :
          Range("G" & ligne & ":H" & ligne).ClearContents

          Ensuite pour supprimer les blancs ainsi créés dans tes listes en G et H il te suffit de faire trier ta liste en G et ta liste en H en même temps sur la colonne G par ordre alphabétique. Fais ce tri "manuellement" une fois en ayant lancé avant l'enregistreur de macros et tu auras les lignes de macros à ajouter à la fin de la tienne après l'effacement des cellules

          Cdlmnt
          Via

          0
          1. Bonsoir Via,

            C'est super sympa.
            Je vais essayer de combiné tout ça, si je trouve quelque chose de simple et efficace , je vous ferais passer le code.
            Merci beaucoup, a vous tous !

            Bonne soirée
            0
            1. Bonjour à tous

              En reprenant la solution de via55, une fois ligne trouvée, en utilisant la remarque de _Ritchi_ (post 3)
              Range("G" & ligne & ":H" & ligne).Delete
              permet de supprimer les deux cellules et de remonter la suite des colonnes G et H d'une ligne
              Là, tu n'auras plus besoin d'effacer le contenu des cellules à supprimer

              Cdlmnt
              0
              1. Bonjour a tous,
                Voila le code qui fonctionne parfaitement bien et ceci grâce a votre aide précieuse !

                Private Sub BtnSuppression_Click()
                Dim entreprise As String
                Dim ligne As Integer

                Sheets("Liste").Select
                If MsgBox("Confirme tu la suppression de cette ENTREPRISE ?", vbYesNo, "Demande de suppression de l'entreprise") = vbYes Then

                ligne = Cells.Find(TxtEntrepriseRecherche.Value, , xlValues, xlWhole).Row 'correspond a la ligne recherchée

                Range("G" & ligne & ":H" & ligne).Delete Shift:=xlUp ' permet de supprimer les cellules sélectionnées et de remonter vers le haut

                Sheets("tableau de bord").Activate

                End If

                Encore merci a tous.
                0