VBA Excel : page web et QueryTable

Résolu

Bonjour,
Le  bout de code suivant
        ' Copier la page web dans "Feuil2"
        Sheets("Feuil2").Select
        Cells.Clear
        ' ajouter une QueryTable
        Set QT = ActiveSheet.QueryTables.Add(Connection:="URL;" & URL, 
       Destination:=Range("A1"))
        ' configurer la QueryTable...
        With QT
        .WebSelectionType = xlEntirePage '... pour sélectionner toute la page
        .Refresh BackgroundQuery:=False  '... pour rafraîchir les données et les coller dans la feuille
        End With
        ' libérer l'objet QueryTable
        Set QT = Nothing
......

copie une page web entière dans la Feuill2 à partir de A1 et il fonctionne de façon satisfaisante pour mes besoins. Cependant, certaines zones de la page web contiennent des indications de la forme 1-14 (par exemple) et sont importées dans les cellules Excel par une date du type janv-14 ... Est-il possible d'éviter cet écueils et retrouver 1-14 ?
 


Windows / Chrome 124.0.0.0


Windows / Chrome 124.0.0.0

1 réponse

  1. Contributeur

    bonjour,

    Tu peux voir que tu as le même comportement si tu entres "1-14" à la main dans une cellule.

    Pour éviter que Excel n'interprète les données, il faut préalablement mettre les cellules en format "Texte".

            Cells.Clear
            Cells.NumberFormat = "@"
    
    1
    1. Contributeur

      Tu aurais également pu tester, simplement, en assignant une valeur ainsi:

              Cells.Clear
              [a5] = "1-14"
              Cells.NumberFormat = "@"
              [a6] = "1-14"
      

      Tu aurais remarqué que cela n'avait rien à voir avec le fait que la source soit une page web.

      0
    2. Merci pour ta réponse!
      1) Si je mets les cellules en format texte avant le set Qt, ça ne change rien
      2) si je le fait après, le janv-14 se transforme évidemment en 41640 ...
      N'existe t-il pas un paramètre de configuration de la QT ? 

      0
    3. Contributeur
      @mikel831

      Je pense qu'il y a un paramètre qui permet de préserver le format des cellules.

      Ce serait plutôt un paramètre accessible via la destination, pas via la connexion.

      Je suggère que tu testes à la main pour trouver ce paramètre, puis que tu automatises si nécessaire (le VBA pourrait simplement utiliser un paramètre existant).

      https://stackoverflow.com/questions/56678825/formating-change-in-excel-when-refresh-data-source-connectred-with-sql-server

      0
    4. Contributeur
      @mikel831

      Peut-être, simplement,

              With QT
              .WebSelectionType = xlEntirePage '... pour sélectionner toute la page
              .PreserveFormatting = True
              .Refresh BackgroundQuery:=False 
      0
    5. @yg_be

      J'ai essayé ta réponse <5 : ça ne change rien ...
      S'il y a un moyen via le vba, de connaître le format d'une cellule, je peux peut être essayer, si c'est une date de la forme janv-14, de reconstruire le texte 1-14 ?

      0