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

    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 ? 

    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

    4. Contributeur
      @mikel831

      Peut-être, simplement,

              With QT
              .WebSelectionType = xlEntirePage '... pour sélectionner toute la page
              .PreserveFormatting = True
              .Refresh BackgroundQuery:=False 
    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 ?