VBA Excel : page web et QueryTable

Résolu
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 - Modifié le 19 avril 2024 à 10:17
yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 - 20 avril 2024 à 07:45

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

yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 Ambassadeur 1 551
19 avril 2024 à 10:47

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
yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551
Modifié le 19 avril 2024 à 10:56

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
mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024 16
19 avril 2024 à 11:05

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
yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
19 avril 2024 à 11:19

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
yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551 > yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024
19 avril 2024 à 13:01

et ainsi?

.WebDisableDateRecognition = True
1
yg_be Messages postés 23331 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 17 novembre 2024 1 551 > mikel831 Messages postés 188 Date d'inscription mardi 23 octobre 2012 Statut Membre Dernière intervention 16 novembre 2024
Modifié le 19 avril 2024 à 14:13

Avec mon fichier html de test, cela fonctionne en mettant simplement en format texte.

        Cells.Clear
        Cells.NumberFormat = "@"
        Set QT = ActiveSheet.QueryTables.Add(Connection:="URL;" & Url, _
       Destination:=Range("A1"))
        ' configurer la QueryTable...
        With QT
        .WebSelectionType = xlEntirePage '... pour sélectionner toute la page
        '.PreserveFormatting = False
        '.WebDisableDateRecognition = False
        .Refresh BackgroundQuery:=False  '... pour rafraîchir les données et les coller dans la feuille
        
un
<br>
1-14
<br>
trois
1