PB avec la fonction .Refresh BackgroundQuery:=True

Résolu
Aymericci -  
 Aymericci -
Bonjour à tous,

Je viens de récupérer un programme qui vient d'un autre ordinateur et qui permet de récupérer des données du machine de mesure.

J'aimerais donc adapter le code à mon ordinateur et ma machine mais cela ne marche pas.
Lorsque je lance la macro j'ai l'erreur 1004 qui s'affiche : Impossible de trouver le fichier texte pour l'actualisation de cette plage de données externes. Assurer vous que le texte n'a été ni déplacé ni renommé, et réessayez.

Je ne m'y connais pas trop en VBA et j'aimerais savoir si quelqu'un aurait une solution à mon pb, je copie ci-dessous la partie du code qui bug. C'est la dernière ligne Refresh BackgroundQuery := True qui est indiqué en jaune lors du debogage.

Je vous remercie de votre aide,

Aymeric

Dim oFso As Object
Dim amountfiles As Integer
Dim IQ As String

IQ = Cells(10, 1).Text

Set oFso = CreateObject("Scripting.FileSystemObject")
amountfiles = Count_Subfolders(oFso, IQ & ":\DATA\")

Set oFso = Nothing

Dim Batch As Integer

'Starting loop function

Dim i As Integer
Dim name As Integer
Dim file As String
Dim location As String

For i = 1 To amountfiles

name = 0 + i

If i <= 9 Then
file = "BATCH" & ".00" & name
location = IQ & ":\DATA" & "\" & file & "\" & "stats"

Else

If i <= 99 Then
file = "BATCH" & ".0" & name
location = IQ & ":\DATA" & "\" & file & "\" & "stats"

Else

file = "BATCH" & "." & name
location = IQ & ":\DATA" & "\" & file & "\" & "stats"

End If
End If

With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & location & fname, Destination:=Range("A1"))
'With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "H:\DATA\BATCH.001\stats.csv" & fname, Destination:=Range("A1"))

.name = "stats"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = True
.RefreshPeriod = 0
.TextFilePromptOnRefresh = False
.TextFilePlatform = 850
.TextFileStartRow = 1
.TextFileParseType = xlDelimited
.TextFileTextQualifier = xlTextQualifierDoubleQuote
.TextFileConsecutiveDelimiter = False
.TextFileTabDelimiter = True
.TextFileSemicolonDelimiter = False
.TextFileCommaDelimiter = True
.TextFileSpaceDelimiter = False
.TextFileColumnDataTypes = Array(1, 1)
.TextFileTrailingMinusNumbers = True
.Refresh BackgroundQuery:=True
End With

1 réponse

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonsoir, il me semble que le message d'erreur t'indique qu'il est impossible de trouver le fichier texte que tu veux importer.
    au moment du débogage, quelles sont les valeurs de "location" et de "fname"? tu peux les trouver en positionnant le curseur sur ces noms.
    1
    1. Aymericci
       
      Bonjour, Merci de ta réponse, au niveau de location j'ai G:\DATA\BATCH001\stat qui est le chemin correct de l'emplacement des donneés mais la valeur de fname est noté vide !!!! et je ne sais pas ce que cela signifie et ou la renseigner...
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Aymericci
         
        si pas présent, ajoute "option explicit" en début de module.
        tu ne nous montres qu'une partie du code, difficile pour nous d'étre plus précis.
        0
    2. Aymericci
       
      Il me dit que la variable n'est pas définie. Voici le code :

      Option Explicit
      Public Sub Count_Subfolders_Test()





      Dim oFso As Object
      Dim amountfiles As Integer
      Dim IQ As String


      IQ = Cells(10, 1).Text


      Set oFso = CreateObject("Scripting.FileSystemObject")
      amountfiles = Count_Subfolders(oFso, IQ & ":\DATA\")

      Set oFso = Nothing

      Dim Batch As Integer

      'Starting loop function

      Dim i As Integer
      Dim name As Integer
      Dim file As String
      Dim location As String



      For i = 1 To amountfiles

      name = 0 + i

      If i <= 9 Then
      file = "BATCH" & ".00" & name
      location = IQ & ":\DATA" & "\" & file & "\" & "stats"

      Else

      If i <= 99 Then
      file = "BATCH" & ".0" & name
      location = IQ & ":\DATA" & "\" & file & "\" & "stats"

      Else

      file = "BATCH" & "." & name
      location = IQ & ":\DATA" & "\" & file & "\" & "stats"

      End If
      End If





      With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & location & fname, Destination:=Range("A1"))
      'With ActiveSheet.QueryTables.Add(Connection:="TEXT;" & "H:\DATA\BATCH.001\stats.csv" & fname, Destination:=Range("A1"))

      .name = "stats"
      .FieldNames = True
      .RowNumbers = False
      .FillAdjacentFormulas = False
      .PreserveFormatting = True
      .RefreshOnFileOpen = False
      .RefreshStyle = xlInsertDeleteCells
      .SavePassword = False
      .SaveData = True
      .AdjustColumnWidth = True
      .RefreshPeriod = 0
      .TextFilePromptOnRefresh = False
      .TextFilePlatform = 850
      .TextFileStartRow = 1
      .TextFileParseType = xlDelimited
      .TextFileTextQualifier = xlTextQualifierDoubleQuote
      .TextFileConsecutiveDelimiter = False
      .TextFileTabDelimiter = True
      .TextFileSemicolonDelimiter = False
      .TextFileCommaDelimiter = True
      .TextFileSpaceDelimiter = False
      .TextFileColumnDataTypes = Array(1, 1)
      .TextFileTrailingMinusNumbers = True
      .Refresh BackgroundQuery:=True
      End With

      Next i



      ' delete columns
      Dim del As Integer

      For i = 1 To amountfiles

      del = 3 + i

      Columns(del).Select
      Selection.delete Shift:=xlToLeft

      Next i

      Range("C3:HC43").Select
      ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Clear
      ActiveWorkbook.Worksheets("Sheet1").Sort.SortFields.Add Key:=Range("C3:HC3") _
      , SortOn:=xlSortOnValues, Order:=xlAscending, CustomOrder:= _
      "BATCH.001,BATCH.002", DataOption:=xlSortNormal
      With ActiveWorkbook.Worksheets("Sheet1").Sort
      .SetRange Range("C3:HC43")
      .Header = xlGuess
      .MatchCase = True
      .Orientation = xlLeftToRight
      .SortMethod = xlPinYin
      .Apply
      End With
      ActiveWindow.SmallScroll Down:=-15
      Range("B2").Select

      End Sub



      Private Function Count_Subfolders(oFso As Object, folderPath As String) As Long

      Dim Folder As Object, Subfolder As Object

      Set Folder = oFso.GetFolder(folderPath)

      Count_Subfolders = 0
      For Each Subfolder In Folder.Subfolders
      Count_Subfolders = Count_Subfolders + 1 + Count_Subfolders(oFso, Subfolder.path)
      Next

      End Function
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > Aymericci
         
        es-tu certain que le classeur Excel fonctionnait vraiment sur l'autre ordinateur?
        comment s'appelle le fichier à importer qui se trouve dans G:\DATA\BATCH001\stat?
        a-t-il le même nom dans les autres dossiers?
        à tout hasard: ajoute
        const fname as string = ".csv"
        en dessous de
        Public Sub Count_Subfolders_Test() 
        0
    3. Aymericci
       
      Salut yg_be,

      J'ai finalement trouvé l'erreur, elle etait dans le chemin d'acces, c etait pas batch mais essai, tellement l 'habitude de parler de batch que je n'avais pas réaliser que sur cet instrument c'était traduit. En tout cas je te remercie bcp pr ton aide !!
      Bonne fetes
      0