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
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.
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,