Icône de la ressource

dysorthographie

XLDnaute Accro
dysorthographie a soumis une nouvelle ressource:

INSEE Data Manager - INSEE Data Manager : Automatisation et Recherche Avancée de Données CSV Depuis 1970

Desces-Depuis-1970
help

Desces-Depuis-1970​

next

  • Présentation de l'application de gestion et de recherche de données INSEE
    • Contexte :
      • Vous disposez d'une vaste collection de fichiers CSV, chacun représentant une...

En savoir plus sur cette ressource...
 

Staple1600

XLDnaute Barbatruc
Bonsoir @dysorthographie

Du bel ouvrage que voila.
(et bravo pour la clarté du fichier *.chm)

J'hésite à installer le driver SQlite sur mon PC perso
(http://www.ch-werner.de/sqliteodbc/)
La page n'est pas très fun et la dernière mise à jour n'est pas récente (octobre 2023)

Néanmoins, je vais déjà lire le code VBA par simple plaisir.

(et quand j'aurais un autre PC, je ferais le test de ton appli)

Merci pour le partage

PS: Cet autre URL (contenu dans ton zip) semble déjà plus avenante

Question :
Il faut installer les deux *.exe ou simplement sqliteodbc pour utiliser DescesDepuis1970.xlsm ?
 

dysorthographie

XLDnaute Accro
Bonjour et merci pour le retour

SQLitesudio c'est l'outil d'administration de base de données SQLite que j'utilise ,il y en a d'autres qui peuvent manager de multi environnement SQL serveur, MySQL, SQLite,etc.. si tu veux voir les tables de la base de données, faire l'entretien courant genre compactage c'est mieux de l'installer.mais si tu n'as aucune connaissance en base de données ce n'est pas utile. Mais je te soupçonne d'avoir déjà une certaine connaissance dans ce domaine.

Pour utiliser mon application il est impératif d'installer le driver ODBC donc pour SQLite car je fais des requêtes SQL pour soit ajouter le contenu des fichiers csv dans la base de données, soit des requêtes se sélection en fonction d'un filtre dynamique.

La base de donnée SQLite contient après le téléchargement des fichiers zip sur le site de INSEE 2,5 Go. Une seule année contient plus de ligne de données que peut en contenir notpad++.

SQLite est d'une véritable base de données offrant une mise œuvre architecturé autour d'une simple DLL d'où mon choix.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Bonjour @dysorthographie, le fil

Je suis toujours réticent à installer des logiciels/dll tiers sur mon PC perso.

Sur celui que j'utilise actuellement : Windows 10 + Office 365 + 7Zip + VLC et c'est tout.

Je suppose donc que tu fais suffisamment confiance à Christian Werner pour installer ce driver.
Comme cela semble être le cas, je vais me laisser tenter et installer la chose ;)

Etant sous 64bits, je dois installer cette version, non ?
 

Staple1600

XLDnaute Barbatruc
Re, @dysorthographie

Alors 1er essai (sans être connecté au net)
(O2K installé en 32Bits sur un PC(*) W10 64bits avec sqliteodbc.exe installé)

J'ai l'erreur ci-dessous
Erreur.PNG

Normalement, Excel devrait pas broncher, (voir le bout de code ci-dessous) non ?
Enrichi (BBcode):
...
Else
    Me.Upload.AddItem "Pas d'internet"
    CommandButton3.Locked = True
End If

PS: je vais réessayer avec l'installation du driver 64 bits

(*): PC de test, pas mon PC usuel.
 

dysorthographie

XLDnaute Accro
Bonjour,
Oui il ne devrait effectivement pas y avoir d'erreurs vu que je teste le connections internet. J'ai fait plusieurs tests en coupant le wifi de mon ordinateur.

Je vais en refaire, j'ai mis toutes les chances de mon côté mais pas suffisamment apparemment.

Le problème d'internet n'a pas de rapport avec les drivers ODBC.
 

Staple1600

XLDnaute Barbatruc
Re

@dysorthographie
Le message d'erreur qui s'affiche est lié à quoi alors ?

Si je commente la procédure
VB:
Private Sub UserForm_Initialize()
'...
End  Sub
L'USF se charge et pas d'erreur

C'est donc là que le bât blesse, mais où?

EDITION: Ici en étant connecté (PC perso), avec ce test
(en ajoutant une feuille nommée TEST)
Code:
Private Sub UserForm_Initialize()
Dim URL() As String: ReDim URL(0)
Onglets FEUILLES
For Each r In [Configuration]
            URL = GetZIPFileURLs(r.Text, URL)
Next
Worksheets("TEST").Cells(1).Resize(UBound(URL)).Value = Application.Transpose(URL)
End Sub
j'obtiens bien la liste des fichiers zip.

Donc c'est ensuite que le problème apparait, non ?
 
Dernière édition:

dysorthographie

XLDnaute Accro
VB:
' Initialisation du tableau d'URLs
For Each r In [Configuration]
    ' Récupère les URLs de fichiers ZIP à partir du texte de chaque cellule dans la plage "Configuration"
    ' et les ajoute au tableau "URL". La fonction "GetZIPFileURLs" prend une URL de page web et retourne les liens de fichiers ZIP présents sur cette page.
    URL = GetZIPFileURLs(r.Text, URL)
Next

' Remarque : Le code pour récupérer les URLs d'une URL fixe est commenté
' URL = GetZIPFileURLs("https://www.insee.fr/fr/information/4190491")

' Réinitialise la sélection dans la liste déroulante "Recherche" (aucun élément sélectionné)
Recherche.ListIndex = -1

' Vérifie la disponibilité de la connexion Internet
If InternetIs Then
    ' Déclare une constante SQL pour rechercher un fichier par son nom dans la table "Fichiers"
    ' Le "?" sera remplacé par le nom du fichier pour exécuter la requête
    Const Sql As String = "select [name] from Fichiers where upper([name]) like upper('?')"
 
    ' Génère une chaîne de connexion pour une base de données SQLite3
    ' Le chemin de la base de données est relatif au répertoire du classeur actuel
    Cn = GenereCSTRING(SQLite3, Base:=ThisWorkbook.Path & "\DescesDepuis1970.sdb")
 
    ' Exécute une requête SQL pour supprimer les enregistrements de la table "deces" dont le fichier n'existe pas dans la table "Fichiers"
    ExecuteRequete "Delete from deces where Fichier not in (select [name] from Fichiers)", Cn
 
    ' Parcourt chaque URL trouvée dans le tableau "URL"
    For Each F In URL
        ' Divise l'URL en segments en utilisant "/" comme délimiteur
        U = Split(F, "/")
     
        ' Prend le dernier segment de l'URL, généralement le nom du fichier ZIP
        U = U(UBound(U))
     
        ' Recompose l'URL en extrayant et manipulant les segments pour obtenir une URL propre
        ' Enlève la partie de l'URL après "/fr/" pour obtenir la partie intéressante de l'URL
        a = Split(F, "/fr/")
        a = a(0) & "/fr/" & a(2)
     
        ' Vérifie si le fichier ZIP (converti en CSV) est déjà enregistré dans la base de données
        ' La requête SQL est modifiée pour vérifier la présence du fichier en tant que CSV dans la table "Fichiers"
        If ExecuteRequete(Replace(Sql, "'?'", "'" & Replace(UCase(U), ".ZIP", "#CSV") & "'"), Cn).EOF Then
            ' Si le fichier n'est pas trouvé dans la base de données, ajoute l'URL à la liste "Upload"
            Upload.AddItem CStr(a)
         
            ' Enregistre le nom du fichier en majuscules dans la deuxième colonne de la liste "Upload"
            Upload.List(Upload.ListCount - 1, 1) = UCase(U)
        End If
    Next

    ' Verrouille le bouton de téléchargement (CommandButton3) si la liste "Upload" est vide (aucun fichier à télécharger)
    CommandButton3.Locked = Not CBool(Upload.ListCount)
Else
    ' Si la connexion Internet n'est pas disponible, ajoute un message "Pas d'internet" à la liste "Upload"
    Me.Upload.AddItem "Pas d'internet"
 
    ' Verrouille le bouton de téléchargement pour empêcher toute tentative de téléchargement
    CommandButton3.Locked = True
End If
vérifie cette parti là ExecuteRequete

Je t'invites a faire du pas à pas mais en faisant un [Maj] + [F8] au niveau de sub routine pour ne pas dérouler le code dans les méthode annexe de façon à réduire le champ du possible ou plutôt des impossible.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@dysorthographie
Je suis en train de tester sur mon PC perso.
(W10 + O365)
L'upload des fichier est très, très lent.
J'ai commencé à 20h30
Je ne suis qu' 8% du fichier DECES1970-1979-CSV.zip

C'est normal cette lenteur ?

EDITION: à 21h18, je ne suis qu'à 11%

J'arrête là mon test pour le moment.
 
Dernière édition:

dysorthographie

XLDnaute Accro
T'imagine combien de temps ça m'a pris la mise au point 😭 .

Par chance je n'avais que 3 enregistrements qui ne passaient pas

On le fait qu'une fois. Après c'est une fois par mois.
2.5 Go ça gob pas comme ça
 
Dernière édition:

dysorthographie

XLDnaute Accro
si tu veux tu peux faire un légère modification dans le code pour sélectionner des items dans les zip

1724533858632.png

tu place enabled =False

VB:
Private Sub CommandButton3_Click()
Dim Rep As String: Rep = ThisWorkbook.Path & "\Desces"
CommandButton3.Locked = True
Dim Fs As New FSO, Taill As Long

Dim F As Integer
For F = Upload.ListCount - 1 To 0 Step -1
'    If Upload.Selected(F) Then 'enlève le commentaire
        Fs.Supprimer_Repertoire Rep
        Fs.Creer_Repertoires Rep
      If DownloadHTTP.PingURL(Upload.List(F, 0)) Then
        DownloadHTTP.DownloadFile Upload.List(F, 0), Environ("TEMP") & "\" & Upload.List(F, 1)
        Fs.UnzipAFile Environ("TEMP") & "\" & Upload.List(F, 1), Rep & "\"
            
        'Fs.Deplace_Fichier ThisWorkbook.Path & "\Desces 1970-2023\Deces_" & Replace(UCase(Upload.List(f, 1)), ".ZIP", ".csv"), ThisWorkbook.Path & "\Desces 1970-2023\" & Replace(UCase(Upload.List(f, 1)), ".ZIP", ".csv")
        Fs.Supprimer_Fichier Environ("TEMP") & "\" & Upload.List(F, 1)
        UlpoadSqlite Cn, Rep, Upload, F
        Upload.RemoveItem (F)
'        End If 'enlève le commentaire
    End If
Next
End Sub
tu pourras choisir les mois de 2024 ça serai plu simple
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re

@dysorthographie
On peut mettre en commentaire les lignes Debug.print ?
(sans que cela empêche le fonctionnement)

J'ai mis la propriété sur False mais , je ne peux pas sélectionner les zip en cliquant sur la Listbox Upload
 

Staple1600

XLDnaute Barbatruc
Re,

@dysorthographie
J'ai testé le téléchargement d'un zip avec la function URLDownloadToFile
VB:
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" _
    Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, _
    ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long


Sub mTest()
Dim f_Zip$, l_Path$
f_Zip = "https://www.insee.fr/fr/statistiques/fichier/4190491/Deces_2024_M07.zip"
l_Path = ThisWorkbook.Path & "\"
URLDownloadToFile 0, f_Zip, l_Path & "Deces_2024_M07.zip", 0, 0
End Sub

Le téléchargement est quasi-immédiat

Question:
Pourquoi tu préfères passer par ta fonction ?
Code:
Public Function DownloadFile(ByVal URL As String, ByVal Destination As String) As Boolean
'...
End Sub

EDITION: C'est aussi très rapide avec un fichier décennal
https://www.insee.fr/fr/statistiques/fichier/4769950/deces-2010-2019-csv.zip
(qui lui fait 145 Mo)
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 091
Messages
2 116 110
Membres
112 662
dernier inscrit
lou75