Doubleclic supprime le bon onglet et les lignes y correspondant.

  • Initiateur de la discussion Initiateur de la discussion piga25
  • 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 !

piga25

XLDnaute Barbatruc
Bonjour,

Avec de nombreux essais infructueux (y compris l'enregistreur de macro) , je séche lamentablement vu mon niveau de VBA.
Voila mon problème:
Sur la feuille recap, lorsque je fais un double clic en colonne A, uniquement sur les cellules déprotégées qui contiennent un chiffre ou un nombre (jusque là pas de problème), je souhaiterai que la macro me supprime la feuille qui est associée au lien hypertexte situé sur la même ligne mais en colonne C, puis ensuite qu'elle me supprime la ligne concernée ainsi que les 08 suivantes (soit 09 lignes qui correspondent à la rencontre).
Par exemple dans le fichier joint: la feuille "Doha2" et les lignes "14 à 22".

Voici le bout de code que j'ai essayé (feuille 1 "Recap"):
VB:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim I As Integer, Ligne, Rencontre As Long
Ligne = Target.Row
Unprotect
    If Target.Column = 1 And Cells(Ligne, 2) <> "" Then 'Si en dehors colonne 1 on sort de la procédure
        '----------------------- Selectionne la feuille avec le lien hypertexte, puis la supprime -------------------------
        Target.Offset(1, 2).Hyperlinks(2).Follow NewWindow:=False, AddHistory:=True
        Sheets("doha2").Select
        ActiveWindow.SelectedSheets.Delete
        
        
        '----------------------- Supprime les 09 lignes correspondant à la rencontre --------------------------------------
        
        I = MsgBox("Voulez-vous supprimer la rencontre ?", vbOKCancel, "Suppression") ' Affichage d'une boite de dialogue
            If I = vbCancel Then Exit Sub ' si clique sur non = sort de la procédure
            Rencontre = Target.Rows()
            Rows(Rencontre).Delete
         
       
         Cancel = True
         '---------------------- Fin de procédure et retour sur la feuille -----------------------------------------------
         Target.Offset(1, 3).Select
    End If
Protect
 End Sub
 

Pièces jointes

Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

salut

Si… tu supprimes la feuille, il faut supprimer les lignes correspondantes (nom de feuille dans formules).
Tu peux essayer dans la fenêtre "code" de la feuille "Recap"
Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal R As Range, Cancel As Boolean)
  Dim L As Long
  L = R.Row
  Unprotect
  If R.Column > 1 Or Cells(L, 2) = "" Then Exit Sub
  If MsgBox("Confirmer la suppression", vbYesNo + vbQuestion, "") = vbYes Then
    Application.DisplayAlerts = False
    Sheets(R(1, 3).Text).Delete
    Rows(L & ":" & L + 8).Delete
    Application.DisplayAlerts = True
  End If
  [A4].Select
  Protect
End Sub
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Bonjour piga25,

Il est bien inutile d'utiliser le lien hypertexte pour supprimer la feuille.

Il suffit d'utiliser le texte en colonne C :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim sup As Range, lig As Long
If Target.Column = 1 And Cells(Target.Row, 3) <> "" Then
  Cancel = True
  If MsgBox("Supprimer '" & Cells(Target.Row, 3) & "' ?", 4) = 6 Then
    On Error Resume Next 'si la feuille n'existe pas
    Application.DisplayAlerts = False 'évite le message
    Sheets(Cells(Target.Row, 3).Text).Delete
    Set sup = Rows(Target.Row)
    lig = Target.Row + 1
    While Cells(lig, 3) = "" And Cells(lig, 4) <> ""
      Set sup = Union(sup, Rows(lig))
      lig = lig + 1
    Wend
    Unprotect
    sup.Delete
    Protect
  End If
End If
End Sub
A+
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Bonjour SI et merci

Beaucoup plus conci et simple ton code.
Si j'ai bien compris :
Application.DisplayAlerts = False : Empêche l'apparation des fenêtres pour la suppression des feuilles.
Sheets(R(1, 3).Text).Delete : Supprime la feuille en prenant le nom de celle-ci sur la même ligne 3ème colonne.
Rows(L & ":" & L + 8).Delete : Supprime l'ensemble des 9 lignes en partant de la ligne où il y a eu le doubleclic.
Application.DisplayAlerts = True : Remet à true la visualisation des fenêtres.
Encore une fois merci.
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Re, salut SI...

S'il y a toujours 9 lignes à supprimer c'est bien sûr plus simple :

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 1 And Cells(Target.Row, 3) <> "" Then
  Cancel = True
  If MsgBox("Supprimer '" & Cells(Target.Row, 3) & "' ?", 4) = 6 Then
    On Error Resume Next 'si la feuille n'existe pas
    Application.DisplayAlerts = False 'évite le message
    Sheets(Cells(Target.Row, 3).Text).Delete
    Unprotect
    Rows(Target.Row).Resize(9).Delete
    Protect
  End If
End If
End Sub
A+
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Bonjour Job75

Bien vu le nom de la feuille à supprimer dans la MSGBOX :
If MsgBox("Supprimer '" & Cells(Target.Row, 3) & "' ?", 4) = 6 Then

et la condition en cas d'erreur si la feuille à déjà été supprimée auparavant.
On Error Resume Next 'si la feuille n'existe pas.

Par contre j'espère avoir bien compris ceci:
While Cells(lig, 3) = "" And Cells(lig, 4) <> ""
Set sup = Union(sup, Rows(lig))
lig = lig + 1
Wend
C'est une boucle qui supprime ligne par ligne jusqu'à ce que la cellule en D ne soit plus vide.

Merci
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Re

Par contre moi je ne connaissais pas du tout le Resize.
Si j'ai bien saisie :
Rows(Target.Row).Resize(9).Delete
On part de la ligne selectionnée, puis on augmente la plage (ici 9 lignes), très simple, mais il faut connaître.
Merci à vous pour ce petit cours.
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Re,

Par contre j'espère avoir bien compris ceci:
While Cells(lig, 3) = "" And Cells(lig, 4) <> ""
Set sup = Union(sup, Rows(lig))
lig = lig + 1
Wend
C'est une boucle qui supprime ligne par ligne jusqu'à ce que la cellule en D ne soit plus vide.
Non, tant que la cellule en C est vide et celle en D ne l'est pas, la ligne est ajoutée à la plage sup.

La plage sup est supprimée en bloc à la fin.

A+
 
Re : Doubleclic supprime le bon onglet et les lignes y correspondant.

Re

Autant pour moi, merci pour les explications.

Pour info je garde votre second code, par rapport à celui de Si, car il gère l'erreur si la feuille n'existe pas.

Maintenant il me reste plus qu'une seule tache à réaliser, la sauvegarde de la feuille recap dans un autre fichier, qui lui englobera toutes les sauvegardes de plusieurs fichiers de ce type et ce aux fins de réaliser des stats sur plusieurs années et compétitions, avec la particularité de pouvoir effectuer ces sauvegardes dès l'épreuve finie soit 4 à 10 rencontres, sans prendre en compte les épreuves déjà sauvegardées, mais là c'est un autre problème.
 
- 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
481
Réponses
5
Affichages
241
Réponses
3
Affichages
452
Retour