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
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Et en étudiant tes codes j'ai vu ça: "août"

Dans cette fonction

Code:
Function ExtractTideData(tideTable As Object) As Collection
    Dim rows As Object
    Dim row As Object
    Dim tideData As Collection
    Dim tideEntry As Collection
    Dim dateStr As String

    Set tideData = New Collection
   
    ' Parcourir chaque ligne de la table HTML
    Set rows = tideTable.getElementsByTagName("tr")
    For Each row In rows
        ' Obtenir la date à partir de la première cellule
        If row.getElementsByTagName("td").Length > 0 Then
            dateStr = row.getElementsByTagName("td")(0).innerText
           
            ' Vérifier si la date contient "août" (mois spécifié)
            If InStr(dateStr, "août") > 0 Then
                ' Créer une nouvelle entrée de marée
                Set tideEntry = New Collection
                tideEntry.Add Replace(dateStr, "Demain", "")
                tideEntry.Add row.getElementsByTagName("td")(1).innerText ' Matin Coeff
                tideEntry.Add row.getElementsByTagName("td")(2).innerText ' Matin Basse mer
                tideEntry.Add row.getElementsByTagName("td")(3).innerText ' Matin Pleine mer
                tideEntry.Add row.getElementsByTagName("td")(4).innerText ' Après-midi Coeff
                tideEntry.Add row.getElementsByTagName("td")(5).innerText ' Après-midi Basse mer
                tideEntry.Add row.getElementsByTagName("td")(6).innerText ' Après-midi Pleine mer
                tideData.Add tideEntry
            End If
        End If
    Next row
   
    Set ExtractTideData = tideData
End Function

ça sera à modifier avec la variable mois ??
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Le doute m'habite, mais je ne peux pas vérifier si c'est bon ou pas car je suis sur mon tél.

test form6.gif
 

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
 

Discussions similaires

Statistiques des forums

Discussions
313 911
Messages
2 103 502
Membres
108 681
dernier inscrit
eaglesinfo