Validation en VBA : erreur à l'ouverture du fichier

Bonjour,

J'ai un soucis lorsque je rajoute des validations par l'intermédiaire d'un script VBA : cela fonctionne parfaitement jusqu'à la fermeture du fichier mais à la réouverture le message suivant apparaît : "Désolé... Nous avons trouvé un problème dans le contenu de "stage.xlsm", mais nous pouvons essayer de récupérer un maximum de contenu. Si la source du classeur est fiable cliquer sur oui"

Une fois que je clique sur oui, je n'ai plus que les données brutes du fichier et perds toute la mise en forme (couleur, police, mise en forme conditionnelles, largeur et hauteur des cellules, boutons de déclenchement des macros...)

Je précise que tout fonctionne très bien lors d'une validation mise en place à la main ou lorsque j'enlève toutes les validations introduites par le script VBA.

Savez-vous comment corriger cela?

Merci d'avance pour vos retours,

zigzag12

Sub MAJliens()
'Déremination du nombre de ligne de barème
nb_lignes_bareme = 2
While ThisWorkbook.Sheets("Barème").Cells(nb_lignes_bareme, 1).MergeArea.Rows.Count > 1
    Fusbar = ThisWorkbook.Sheets("Barème").Cells(nb_lignes_bareme, 1).MergeArea.Rows.Count
        nb_lignes_bareme = nb_lignes_bareme + Fusbar
Wend
nb_lignes_bareme = nb_lignes_bareme - Fusbar

'Nombre de lignes de liste stages
nb_lignes_stage = 1
While ThisWorkbook.Sheets("Stages").Cells(nb_lignes_stage, 1) <> ""
    nb_lignes_stage = nb_lignes_stage + 1
Wend
nb_lignes_stage = nb_lignes_stage - 1

'Mise en place des validation
'Liste des entrepirses
Dim entre() As String
nb_ent = 1
j = 2
While ThisWorkbook.Sheets("Barème").Cells(j, 1).MergeArea.Rows.Count > 1
    ReDim Preserve entre(nb_ent) As String
    entre(nb_ent) = ThisWorkbook.Sheets("Barème").Cells(j, 1)
    Fus = ThisWorkbook.Sheets("Barème").Cells(j, 1).MergeArea.Rows.Count
    j = j + Fus
    nb_ent = nb_ent + 1
Wend
tri entre, 1, nb_ent - 1
entre2 = ""
For i = 1 To nb_ent - 1
    entre2 = entre2 & entre(i) & ","
Next i

'liste des sites
Dim site() As String
nb_site = 1
j = 2
While ThisWorkbook.Sheets("Barème").Cells(j, 2).MergeArea.Rows.Count > 1
    ReDim Preserve site(nb_site) As String
    site(nb_site) = ThisWorkbook.Sheets("Barème").Cells(j, 2)
    Fus = ThisWorkbook.Sheets("Barème").Cells(j, 1).MergeArea.Rows.Count
    j = j + Fus
    nb_site = nb_site + 1
Wend
tri site, 1, nb_site - 1
site2 = ""
For i = 1 To nb_site - 1
    site2 = site2 & site(i) & ","
Next i

'Validation sur les entreprise
For i = 2 To nb_lignes_stage + 5
    With ThisWorkbook.Sheets("Stages").Cells(i, 2).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=entre2
        .IgnoreBlank = True
        .InCellDropdown = True
        .ErrorTitle = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
    End With

    If ThisWorkbook.Sheets("Stages").Cells(i, 2) = "" Then
        With ThisWorkbook.Sheets("Stages").Cells(i, 3).Validation
        .Delete
        .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
        xlBetween, Formula1:=site2
        .IgnoreBlank = True
        .InCellDropdown = True
        .ErrorTitle = ""
        .ErrorMessage = ""
        .ShowInput = True
        .ShowError = True
        End With
    'Cas où l'entreprise est déjà sélectionnée
    Else
        For j = 1 To nb_lignes_bareme
            If ThisWorkbook.Sheets("Stages").Cells(i, 2) = ThisWorkbook.Sheets("Barème").Cells(j, 1) Then
                Fus = ThisWorkbook.Sheets("Barème").Cells(j, 1).MergeArea.Rows.Count
                Dim a As String
                a = ""
                For k = 0 To Fus - 1
                    If ThisWorkbook.Sheets("Barème").Cells(j + k, 2) <> "" Then
                    a = a & ThisWorkbook.Sheets("Barème").Cells(j + k, 2) & ","
                    End If
                Next k
                With ThisWorkbook.Sheets("Stages").Cells(i, 3).Validation
                    .Delete
                    .Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
                    xlBetween, Formula1:=a
                    .IgnoreBlank = True
                    .InCellDropdown = True
                    .ErrorTitle = ""
                    .ErrorMessage = ""
                    .ShowInput = True
                    .ShowError = True
                End With
                Exit For
            End If
        Next j
    End If
Next i
End Sub
Rechercher des sujets similaires à "validation vba erreur ouverture fichier"