[VBA] Ne pas s'occuper d'un 'Delete'

Adrien

XLDnaute Junior
Bonsoir à tous et à toutes !

Voilà, je viens de finir une boucle pour enregistrer les valeurs e situant dans des cellules.

Elle fonctionne très bien chez moi, sauf pour un point.

Lorsque je supprime une valeur via la backspace, tout va bien. Mais si j'use du Delete, j'ai une erreur d'exécution 13 qui m'indique une incompatibilité de type.
Je ne sais pas comment désactiver la macro en cas d'utilisation de cette touche ...

Voici la boucle :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Coms As Integer
Dim Register As Integer
Dim ComsString As String
Dim RegisterSting As String
Coms = 42
Register = 45

Do Until Register = 85
ComsString = CStr(Coms)
RegisterString = CStr(Register)

On Error GoTo Fin
If Target = ActiveSheet.Range("B" & ComsString) Then
ActiveSheet.Range("B" & ComsString).Copy
    If Sheets("Accueil").OptionButton1.Value = True Then
        Sheets("DATA").Select
        ActiveSheet.Range("B" & RegisterString).Select
        Selection.PasteSpecial Paste:=xlPasteValues
        Else
            If Sheets("Accueil").OptionButton2.Value = True Then
                Sheets("DATA").Select
                ActiveSheet.Range("C" & RegisterString).Select
                Selection.PasteSpecial Paste:=xlPasteValues
                Else
                    If Sheets("Accueil").OptionButton3.Value = True Then
                    Sheets("DATA").Select
                    ActiveSheet.Range("D" & RegisterString).Select
                    Selection.PasteSpecial Paste:=xlPasteValues
                    Else
                        If Sheets("Accueil").OptionButton4.Value = True Then
                        Sheets("DATA").Select
                        ActiveSheet.Range("E" & RegisterString).Select
                        Selection.PasteSpecial Paste:=xlPasteValues
                        Else
                        MsgBox ("Veuillez sélectionner une période à partir de l'accueil.")
                        End If
                    End If
                End If
            End If
Else
End If
Fin:
Coms = Coms + 47
Register = Register + 1



Loop
End Sub


Merci à tous,

Adrien
 

JNP

XLDnaute Barbatruc
Re : [VBA] Ne pas s'occuper d'un 'Delete'

Bonjour le fil :),
En supprimant toutes les procédures Select et Paste pas vraiment heureuses dans une procédure Change peut-être :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
Dim Coms As Integer
Dim Register As Integer
Coms = 42
Register = 45
Do Until Register = 85
    On Error GoTo Fin
    If Target = Range("B" & Coms) Then
        If Sheets("Accueil").OptionButton1.Value = True Then
            Sheets("DATA").Range("B" & Register).Value = Range("B" & Coms).Value
        ElseIf Sheets("Accueil").OptionButton2.Value = True Then
            Sheets("DATA").Range("C" & Register).Value = Range("B" & Coms).Value
        ElseIf Sheets("Accueil").OptionButton3.Value = True Then
            Sheets("DATA").Range("D" & Register).Value = Range("B" & Coms).Value
        ElseIf Sheets("Accueil").OptionButton4.Value = True Then
            Sheets("DATA").Range("E" & Register).Value = Range("B" & Coms).Value
        Else
            MsgBox ("Veuillez sélectionner une période à partir de l'accueil.")
        End If
    End If
Fin:
    Coms = Coms + 47
    Register = Register + 1
Loop
End Sub
Pas vraiment suivi l'intérêt de ta gestion d'erreur car je ne vois pas ce qui peut la déclencher :eek:
 

Adrien

XLDnaute Junior
Re : [VBA] Ne pas s'occuper d'un 'Delete'

Bonjour,

J'ai effectivement essayé ce que tu proposais pierrot, en modifiant un peu parce que la fonction ne doit pas se terminer, mais enregister le vide de la cellule dans la case de la variable 'Register'


On dirait que la touche delete provoque cette erreur.
Mais je suis sûr que l'utilisateur touchera à la touche delete pour supprimer le contenu de cette cellule.
Donc, y-a-t-il moyen d'exécuter tout de même la macro ? Ou même de désactiver l'utilisation de cette touche dans cette feuille ...

Sauter la fonction ne changera rien, puisque ce qui a été enregistré avant sera rechargé à l'affichage de la feuille ...

Oui, à part trouver d'où vient cette incompatibilité (dont je suis incapable), je ne vois que l'empêchement de toucher au delete ...

Merci,
Adrien
 

Adrien

XLDnaute Junior
Re : [VBA] Ne pas s'occuper d'un 'Delete'

Salut,

Oui, effectivement, c'est un groupement de cellules allant de B42 à G47

Est-ce là que se situerait l'erreur 13 ? Pourtant, lors de l'exécution par toute autre évènement, je n'ai aucun problème.

Si oui, que faut-il faire ?

Adrien
 

Adrien

XLDnaute Junior
Re : [VBA] Ne pas s'occuper d'un 'Delete'

Salut,

Oui, j'ai vu. Malheureusement, cette ligne arrête la macro. Or, je voudrais que cette dernière continue.

Parce que si l'utilisateur supprime, ne voit plus rien sur sa cellule, mais que le texte n'a pas été modifié sur la feuille "DATA", alors, à la prochaine génération de la feuille, le message (qui aurait donc dû être effacé sur la feuille 'DATA'') sera à nouveau là ...

Non, à part empêcher l'utilisation du Delete, je ne vois pas. Peut-être changer la mise en page puis la refaire via le vba, mais ça alourdira le code ...


Adrien
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

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