XL 2021 Calendrier des marées info

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour à tous,

A ceux qui ont le pied marin,

je voulais savoir s'il était possible de créer un calendrier des marées avec :
-les heures de marée Haute
-les heures de marée Basse

et éventuellement les coefs.

Je ne sais pas du tout si c'est possible, mais si certains ont déjà étudiés sur la chose je suis preneur.

Je sais qu'il y a plein de site en ligne qui donne ce que je veux, mais se serait pour compléter un calendrier
avec les phases lunaires, éphémérides ..........

Si ça peut aider je suis de la région Lorientaise (Bretagne)

En vous remerciant d'avance.

Nicolas
 

dysorthographie

XLDnaute Accro
le Tableaux des Marées est chargé dans l'ordre des villes qui sont triées par ordre alpha.
on charge les 11 dates de chaque ville sur le site https://www.horaire-maree.fr

Partie principale du script (Sub ParVentEtMaré)​

  1. Déclaration des variables :
    • citys(), city, Url, VILLES() : Tableaux et variables pour stocker les villes, les URLs correspondantes et les données sur les marées.
    • conn : Objet de connexion ADODB pour interagir avec une base de données ou une feuille Excel.
  2. Initialisation de la connexion ADODB :
    • Set conn = CreateADODBConnection(ThisWorkbook.FullName) : Crée une connexion à la feuille Excel active en utilisant la fonction CreateADODBConnection.
  3. Récupération des villes :
    • citys() = RetournVille() : Charge les données des villes à partir d'une feuille Excel via la fonction RetournVille.
  4. Boucle à travers les villes :
    • Pour chaque ville, le script construit une URL pour accéder à la page web correspondante et vérifie si elle est valide avec CheckURL.
  5. Traitement des données si l'URL est valide :
    • Les fonctions RetorunVilleJour et RetorunVilleJourAprès sont appelées pour extraire les données des marées pour la ville du jour actuel et pour les jours suivants.
  6. Insertion des données dans la base de données :
    • ProcessAndInsertTideData insère ou met à jour les données extraites dans la feuille Excel via la connexion ADODB.
  7. Fermeture de la connexion :
    • La connexion ADODB est fermée à la fin pour libérer les ressources.

Fonction RetorunVilleJour et RetorunVilleJourAprès​

Ces fonctions extraient les données des marées à partir du document HTML obtenu à partir de l'URL de la ville.

  • RetorunVilleJour:
    • Accède à un tableau HTML spécifique (i_donnesJour) qui contient les données des marées pour le jour actuel.
    • Extrait les valeurs pour la marée basse, marée haute, coefficients, etc., et les stocke dans l'objet TbVille.
  • RetorunVilleJourAprès:
    • Similaire à RetorunVilleJour, mais traite les données des jours suivants (long terme) et stocke les informations pour chaque jour dans un tableau dynamique.

Fonction ProcessAndInsertTideData​

Cette fonction gère l'insertion des données de marée dans la feuille Excel.

  • Vérification de l'existence des données :
    • Vérifie si des données existent déjà pour une ville et une date spécifiques dans la feuille Excel.
    • Si les données n'existent pas, une nouvelle ligne est ajoutée.
  • Insertion ou mise à jour des données :
    • Les valeurs extraites sont insérées ou mises à jour dans les champs correspondants de la feuille Excel.

Autres fonctions auxiliaires​

  • CheckURL : Vérifie si l'URL est valide en envoyant une requête GET et en cherchant le nom de la ville dans le contenu retourné.
  • CreateADODBConnection : Crée une connexion ADODB à la feuille Excel active.
  • GetHTMLDocument : Récupère le contenu HTML d'une page web et le charge dans un objet HTMLFile.
  • AssainirURL : Nettoie l'URL en encodant les caractères spéciaux pour s'assurer qu'elle est valide.

Commentaires supplémentaires​

  • Gestion des erreurs : Certaines sections du code, notamment dans CheckURL et AssainirURL, utilisent On Error GoTo pour gérer les erreurs, ce qui est important pour éviter que le script ne plante en cas de problème.
  • Debugging : Le code utilise Debug.Print pour afficher des informations de débogage, ce qui est utile pour vérifier que les données sont correctement extraites.

Conclusion​

Ce script est un bon exemple de comment automatiser la récupération et l'insertion de données web dans Excel en utilisant VBA, avec une attention particulière à la gestion des données dynamiques et à la vérification des erreurs.
 

Pièces jointes

  • villes (1).xlsm
    84.6 KB · Affichages: 4
Dernière édition:

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Désolé j'ai oublié de supprimer mes fonction de test! ExtractTideData n'est pas utilisé dans le code

Notes que si tu ajoutes la hauteur des marées


Matin_Basse = "" & Rs("Matin Basse mer")
NomDuLabel= "" & Rs("NomDeLentêteDeColonne")
Regarde la pièce jointe 1202691

je vais faire le trie et je reposte

Merci beaucoup ça match

VB:
Sub requête()
    Dim Rs As Object
    sql = "SELECT * FROM [Marées$] WHERE [Date]=#" & Format(Dates, "yyyy-mm-dd") & "# AND [Ville]='" & Replace(VILLES, "'", "''") & "'"
    ' Créer un objet Recordset
    Set Rs = CreateObject("ADODB.Recordset")
    Matin_Coefficient = "": Après_Coefficient = ""
    Matin_Basse = "": Après_Basse = ""
    Matin_Haute = "": Après_Haute = ""
    Rs.Open sql, conn, 1, 3
    If Not Rs.EOF Then
        Matin_Coefficient = "" & Rs("Matin Coeff"):  Après_Coefficient = "" & Rs("Après-midi Coeff")
        Matin_Basse = "" & Rs("Matin Basse mer"):  Après_Basse = "" & Rs("Après-midi Basse mer")
        Matin_Haute = "" & Rs("Matin Pleine mer"):  Après_Haute = "" & Rs("Après-midi Pleine mer")
        Hauteur_basse_mer_am = "" & Rs("Matin Basse mer Niveau Zéro"): Hauteur_pleine_mer_am = "" & Rs("Matin Pleine mer Niveau Zéro")
        Hauteur_basse_mer_ap = "" & Rs("Après-midi Basse mer Niveau Zéro"): Hauteur_pleine_mer_ap = "" & Rs("Après-midi Pleine mer Niveau Zéro")
        Matin_Basse = Format("" & Rs("Matin Basse mer"), "hh:mm"): Matin_Haute = Format("" & Rs("Matin Pleine mer"), "hh:mm")
        Après_Basse = Format("" & Rs("Après-midi Basse mer"), "hh:mm"): Après_Haute = Format("" & Rs("Après-midi Pleine mer"), "hh:mm")
    End If
End Sub
 

TooFatBoy

XLDnaute Barbatruc
As-tu lu mon "edit" de #219 ?

VB:
Sub requête()
    Dim Rs As Object
    sql = "SELECT * FROM [Marées$] WHERE [Date]=#" & Format(Dates, "yyyy-mm-dd") & "# AND [Ville]='" & Replace(VILLES, "'", "''") & "'"
    ' Créer un objet Recordset
    Set Rs = CreateObject("ADODB.Recordset")
    Matin_Coefficient = "": Après_Coefficient = ""
    Matin_Basse = "": Après_Basse = ""
    Matin_Haute = "": Après_Haute = ""
    Rs.Open sql, conn, 1, 3
    If Not Rs.EOF Then
        Matin_Coefficient = "" & Rs("Matin Coeff"):  Après_Coefficient = "" & Rs("Après-midi Coeff")
        Matin_Basse = "" & Rs("Matin Basse mer"):  Après_Basse = "" & Rs("Après-midi Basse mer")
        Matin_Haute = "" & Rs("Matin Pleine mer"):  Après_Haute = "" & Rs("Après-midi Pleine mer")
        Hauteur_basse_mer_am = "" & Rs("Matin Basse mer Niveau Zéro"): Hauteur_pleine_mer_am = "" & Rs("Matin Pleine mer Niveau Zéro")
        Hauteur_basse_mer_ap = "" & Rs("Après-midi Basse mer Niveau Zéro"): Hauteur_pleine_mer_ap = "" & Rs("Après-midi Pleine mer Niveau Zéro")
        Matin_Basse = Format("" & Rs("Matin Basse mer"), "hh:mm"): Matin_Haute = Format("" & Rs("Matin Pleine mer"), "hh:mm")
        Après_Basse = Format("" & Rs("Après-midi Basse mer"), "hh:mm"): Après_Haute = Format("" & Rs("Après-midi Pleine mer"), "hh:mm")
    End If
End Sub
Bon, apparemment non.


Tschüss
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
test form6.gif
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
A Robert, une dernière fois j'espère

N'en déplaise à d'autre désolé, j'ai essayé de rassembler le tout mais j'ai une erreur, à moins que j'ai oublié un truc, je sélect la ville ok mais quand je sélect la date j'ai une erreur.

Capture d’écran 2024-08-30 175918.jpg

Capture d’écran 2024-08-30 175946.jpg


Je joint le fichier complet

Merci
 

Pièces jointes

  • New Calendrier v2.xlsm
    214.3 KB · Affichages: 3

dysorthographie

XLDnaute Accro
Dans ton formulaire j'ai fais ça
VB:
Private Sub UserForm_Initialize()

        Me.StartUpPosition = 1
        Me.Show 0
     
Set conn = CreateADODBConnection(ThisWorkbook.FullName)
With conn.Execute("Select distinct [Date] from [Marées$] order by [Date] DESC")
    If Not .EOF Then Dates.Column = .getrows
End With
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
314 588
Messages
2 110 987
Membres
111 000
dernier inscrit
Mouhamedw