Doubleclic supprime le bon onglet et les lignes y correspondant.

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

  • escrime v 7.xlsm
    642 KB · Affichages: 177

Si...

XLDnaute Barbatruc
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
 

job75

XLDnaute Barbatruc
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+
 

piga25

XLDnaute Barbatruc
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.
 

job75

XLDnaute Barbatruc
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+
 

piga25

XLDnaute Barbatruc
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
 

piga25

XLDnaute Barbatruc
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.
 

job75

XLDnaute Barbatruc
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+
 

piga25

XLDnaute Barbatruc
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.
 

Discussions similaires

Réponses
6
Affichages
142
Réponses
7
Affichages
369

Membres actuellement en ligne

Statistiques des forums

Discussions
312 305
Messages
2 087 084
Membres
103 459
dernier inscrit
Arnocal