Aide formule VBA qui efface des cellules

Bonjour,

Ci dessous une formule VBA que j’avais mis au point avec l’aide d’une amie.
Elle fonctionne très bien pour mon utilisation, sauf, que je ne comprends pas pourquoi elle efface les Cellules B4, D4 et F4 de la feuille Formulaire…Je ne vois pas où dans le code VBA cette action est demandée. Des avis?

Sub SAISIE()

'On déclare les variables
Dim data As Variant
Dim i As Byte

'#######################################################################################
'########################### INSERTION INFO DANS TABLEAU CRA ###########################
'#######################################################################################

ActiveSheet.Unprotect Password:="xxxxxxx" ' en début de macro






Dim MaPlage As Range, Cel As Range

Set MaPlage = Sheets(« FORMULAIRE »).Range(« B5,D5 »)
For Each Cel In MaPlage 'pour toutes les cellules de la plage
If Cel.Value = «  » Then 'si elle est vide alors
'message à l’utilisateur
MsgBox « La cellule DATE ou CLIENT n’est pas remplie. »
'sortie de la procédure
Exit Sub
End If
Next

    'Avec la feuille "FORMULAIRE", on remplie la variable data avec un tableau contenant les données du rdv
With Worksheets("FORMULAIRE")
    data = Array(.Range("B5").Value, .Range("F5").Value, .Range("B8").Value, .Range("H5").Value, _
                 .Range("J5").Value, .Range("N5").Value, .Range("P5").Value, _
                 .Range("D8").Value, .Range("O9").Value, .Range("G9").Value, "", "")
End With


'Avec la feuille "CRA", on rajoute une ligne et on la remplie avec les données de data
With Worksheets("CRA").ListObjects("Tableau_CRA")
    .ListRows.Add
    .DataBodyRange.Rows(.DataBodyRange.Rows.Count) = data
End With

'#######################################################################################
'####################### INSERTION INFO DANS TABLEAU INSTALLATEUR ######################
'#######################################################################################

'Pour chacun des installateurs possible
For i = 13 To 25 Step 6

    'Si des informations à propos de l'installateur sont entrées, alors
    If Worksheets("FORMULAIRE").Range("C" & i).Value <> "" Then

        'Avec la feuille "FORMULAIRE", on remplie la variable data avec un tableau contenant les données de l'installateur
        With Worksheets("FORMULAIRE")
            data = Array(.Range("B5").Value, .Range("C" & i).Value, .Range("F" & i).Value, .Range("I" & i).Value, _
                         .Range("M" & i).Value, .Range("P" & i).Value, .Range("B8").Value, _
                         .Range("C" & i + 2).Value, "", "", "", "", "", "", "", "")
        End With

        'Avec la feuille "CRA", on rajoute une ligne et on la remplie avec les données de data
        With Worksheets("Liste Installateur").ListObjects("Tableau_ListeInstallateur")
            .ListRows.Add
            .DataBodyRange.Rows(.DataBodyRange.Rows.Count) = data
        End With
        
    End If
    
Next

'#######################################################################################
'######################## NETTOYAGE DES CELLULES DU FORMULAIRE #########################
'#######################################################################################

'Avec la feuille "FORMULAIRE", on nettoie les cellules
With Worksheets("FORMULAIRE")
    .Range("B5:D5").ClearContents
    .Range("D8:D8").ClearContents
    .Range("G9:O9").ClearContents
    .Range("C13:C27").ClearContents
    .Range("F13:F25").ClearContents
    .Range("F13:F25").ClearContents
    .Range("I13:I25").ClearContents
    .Range("M13:M25").ClearContents
    .Range("P13:P25").ClearContents
End With

Sheets("Nombre de RDV").Select
Range("A5").Select
Selection.Group Start:=True, End:=True, Periods:=Array(False, False, False, _
    False, True, False, False)

        

Sheets("FORMULAIRE").Select
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= _
    True, Password:="xxxxxxx"

End Sub

Je me réponds à moi même… Le code est bon, l’erreur ne venait pas de là. Désolé impossible de supprimer mon message.

Bonjour,
C’était lié a un évènement ?

a mon avis ceci est une amélioration

With Worksheets("CRA").ListObjects("Tableau_CRA")
    .ListRows.Add
    .DataBodyRange.Rows(.DataBodyRange.Rows.Count) = Data
End With

Worksheets("CRA").ListObjects("Tableau_CRA").ListRows.Add.Range.Resize(, UBound(Data) + 1).Value = Data

C’etait le restant d’une vieille macro oublié. :wink:

Je suis effectivement preneur de toute simplification de la formule VBA. !!

With Worksheets(« FORMULAIRE »)
.Range(« B5:D5 »).ClearContents
.Range(« D8:D8 »).ClearContents
.Range(« G9:O9 »).ClearContents
.Range(« C13:C27 »).ClearContents
.Range(« F13:F25 »).ClearContents
.Range(« F13:F25 »).ClearContents
.Range(« I13:I25 »).ClearContents
.Range(« M13:M25 »).ClearContents
.Range(« P13:P25 »).ClearContents
End With

ou

Worksheets(« FORMULAIRE »).Range(« B5:D5,D8:D8,G9:O9,C13:C27,… »).ClearContents

1 « J'aime »

Ce sujet a été automatiquement fermé après 30 jours. Aucune réponse n’est permise dorénavant.