Supprimer uniquement 2 cellules dans une liste

Résolu/Fermé
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022 - 26 mai 2022 à 10:08
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022 - 27 mai 2022 à 15:40
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 !
A voir également:

9 réponses

_Ritchi_ Messages postés 21288 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 11 novembre 2024 6 079
26 mai 2022 à 10:30
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
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022
26 mai 2022 à 11:29
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
_Ritchi_ Messages postés 21288 Date d'inscription samedi 17 mars 2007 Statut Contributeur Dernière intervention 11 novembre 2024 6 079
Modifié le 26 mai 2022 à 12:08
il y a alors ceci: https://www.mrexcel.com/board/threads/vba-macro-to-delete-cells-and-shift-up.1117528/
ou cela: https://analysistabs.com/vba-code/range/m/delete/
Cela utilise range.delete et tu peux indiquer le décalage (haut, droite, gauche) qui sera fait pour combler les cellules effacées
En voici une version illustrée dans la partie "Difference Between Clear & Delete Methods": https://www.wallstreetmojo.com/vba-clear-contents/
0
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022
26 mai 2022 à 16:45
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
cs_Le Pivert Messages postés 7904 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 14 août 2024 729
26 mai 2022 à 17:25
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022
26 mai 2022 à 20:27
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
via55 Messages postés 14496 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 22 novembre 2024 2 735
Modifié le 26 mai 2022 à 20:49
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
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022
26 mai 2022 à 20:52
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
ccm81 Messages postés 10903 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 19 novembre 2024 2 427
Modifié le 26 mai 2022 à 21:04
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
balou11 Messages postés 26 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 1 juin 2022
27 mai 2022 à 15:40
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