Erreur à l'ouverture xlsm

Hello les pros du Tableau :)
J'ai un fichier xlsm avec une macro assez basique et un lien avec un fichier txt pour importer des données.

Problème :
Lors de l'ouverture du fichier xlsm j'ai cette alerte (ci-dessous). Je clique sur OUI, tout fonctionne et je dois enregistrer une nouvelle version du fichier. Puis à chaque ouverture je dois refaire cette procédure.

"Désolé... Nous avons trouvé un problème dans le contenu de « Tableau de bord.xlsm », mais nous pouvons essayer de récupérer le maximum de contenu. Si la source de ce classeur est fiable, cliquez sur Oui."

Merci d'avance pour vos lumières sur cette erreur <3

4nouvelle-reservation.txt (247.00 Octets)

Bonjour,

Edit : Quel est le but de cette macro ? Car je ne vois pas d'import de donnée via fichier txt dans le code et j'ai du mal à me représenter son fonctionnement. Pourriez-vous nous indiquer comment vous procéderez .. Car c'est ce lien qui provoque cet effet de bord, en la supprimant le message n'apparaît plus.

2021 05 10 08 17 25 connexions du classeur

Cdlt,

Voici le code de la macro.

La mise à jour de la liaison avec le fichier txt est faite avec cette commande (ligne 3) :

 ActiveWorkbook.Connections("Nouvelle réservation").Refresh
Sub Macro3()
'
' Macro3 Macro
'

'
    Sheets("Importation").Select
    Range("B4").Select
    ActiveWorkbook.Connections("Nouvelle réservation").Refresh

' Condition pour ne pas répéter une réservation déjà enregistrée.
    If Range("N2") = "NON" Then

        Sheets("Suivi_reservations").Select
        Range("A9").Select
        Selection.ListObject.ListRows.Add (1)
        Sheets("Importation").Select
        Range("B2:M2").Select
        Selection.Copy
        Sheets("Suivi_reservations").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Range("A9").Select
        Sheets("Suivi_reservations").Select
        Application.CutCopyMode = False
        ActiveWorkbook.Worksheets("Suivi_reservations").ListObjects("Tab_reservations") _
            .Sort.SortFields.Clear
        ActiveWorkbook.Worksheets("Suivi_reservations").ListObjects("Tab_reservations") _
            .Sort.SortFields.Add2 Key:=Range("Tab_reservations[[#All],[Checkin]]"), _
            SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        With ActiveWorkbook.Worksheets("Suivi_reservations").ListObjects( _
            "Tab_reservations").Sort
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
        Sheets("Suivi_reservations").Select

        Sheets("Accueil").Select
        MsgBox "Nouvelle réservation enregistrée."

    Else

        Sheets("Accueil").Select
        MsgBox "Pas de nouvelle réservation."

    End If
End Sub

Bonjour,

Ci-contre un exemple qui pourrait se substituer à la liaison :

Sub IMPORT()
Dim WB As Workbook
Workbooks.OpenText "C:\Users\****\Desktop\nouvelle-reservation.txt", , 6, xlDelimited, xlTextQualifierDoubleQuote, , , True, False, , , , _
        Array(Array(1, 1), Array(2, 1), Array(3, 4), Array(4, 4), Array(5, 1), Array(6, 1), Array(7, 1), Array(8, 1), Array(9, 1), _
        Array(10, 1), Array(11, 1), Array(12, 1)) 'Lien a adapter
Set WB = ActiveWorkbook
WB.ActiveSheet.UsedRange.Copy
ThisWorkbook.Worksheets("Importation").[B4].PasteSpecial
Application.CutCopyMode = False
WB.Close False
End Sub

L'import se fait directement à partir de la ligne 6 du TXT, donc au final vous pouvez directement importer en B4 (et donc remodifier la ligne 2). Les array permettent de convertir les données dans le bon format.

Cdlt,

@Ergotamine

Merci pour cette solution

Une dernière question : comment définir le séparateur sur ";" et non les espaces du txt ?

Workbooks.OpenText "/Users/julienmayer/Desktop/Nouvelle réservation.txt", , 6, xlDelimited, xlTextQualifierDoubleQuote, , , , False, , , , _

Bonjour,

C'est ce que fait l'argument False que vous avez mis. La méthode est décomposée comme suit : expression.OpenText (FileName, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo, TextVisualLayout, DecimalSeparator, ThousandsSeparator, TrailingMinusNumbers, Local)

Donc soit vous mettez True au 10ème argument (donc après la 10ème virgule), soit vous écrivez Space :=True et dans ce cas là l'ordre des arguments ni leur précision n'est pas nécessaire. Donc deux solutions :

Workbooks.OpenText "/Users/julienmayer/Desktop/Nouvelle réservation.txt", , 6, xlDelimited, xlTextQualifierDoubleQuote, , , , , True, , , _
'Ou
Workbooks.OpenText "/Users/julienmayer/Desktop/Nouvelle réservation.txt", , 6, xlDelimited, xlTextQualifierDoubleQuote, Space:=True _

Cdlt,

Rechercher des sujets similaires à "erreur ouverture xlsm"