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
Reprend le fil de la discussion et tu verras que j'ai abordé le changement de date. Nous avons également échanger en privé et la tu ne pouvais pas le savoir

C'est pas temps le fond de tes questions qui me paresse pertinente mais c'est la forme.

Peux être que ma tournure d'esprit des pas en phase avec ta tournure de phrase.
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Bonjour tout le monde,
Bonjour Robert,

Juste 2 pitites questions :

Capture d’écran 2024-09-10 110908.jpg


Que veut dire le Marée V ?
Et les 2 Marée Montante ? Logiquement on est en marée descendante maintenant ?

Merci beaucoup
 

dysorthographie

XLDnaute Accro
Nous avons V et ^ mais effectivement on peut mettre marée montante ou descendente

A luis seule mon pseudo explique pourquoi je suis avare de mots !
Bonjour tout le monde,
Bonjour Robert,

Juste 2 pitites questions :

Regarde la pièce jointe 1203241

Que veut dire le Marée V ?
Et les 2 Marée Montante ? Logiquement on est en marée descendante maintenant ?

Merci beaucoup

Entre3:22 et 9:07 on est bien en marrée montante

H:=11:07 indiqué bien que la plage ce situe entre la marée haute de 9:07 et la marée basse de 15:47 et que la mère descent [V]

Après comment on esprime ça de façon claire et précise c'est une autre histoire.
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonjour,

Explication du code lié à UserForm1 :​

1. Départements_Change :​

  • Déclenchement : Cet événement se produit lorsque l'utilisateur modifie la sélection dans la ComboBox Départements.
  • Action:
    • Si un département est sélectionné (Départements.ListIndex > -1), la procédure Lst est appelée pour mettre à jour la ComboBox VILLES avec les villes correspondant au département sélectionné.

2. VILLES_Change :​

  • Déclenchement : Cet événement se produit lorsque l'utilisateur sélectionne une ville dans la ComboBox VILLES.
  • Action:
    • Si une ville est sélectionnée (VILLES.ListIndex > -1), la procédure ParVentEtMaré est appelée avec deux arguments :
      1. L'URL associée à la ville (VILLES.List(VILLES.ListIndex, 0)).
      2. Le nom de la ville (VILLES.List(VILLES.ListIndex, 1)).
    • La fonction requête (non incluse dans le code fourni) est appelée pour exécuter une tâche liée à la ville sélectionnée.

3. Lst(Liste As MSForms.ComboBox, Where As String) :​

  • Cette procédure est utilisée pour remplir dynamiquement une ComboBox en fonction d'une requête SQL.
  • Paramètres:
    • Liste : La ComboBox à remplir (ex. : VILLES ou Dates).
    • Where : Un critère de filtre (ex. : nom du département ou de la ville).
  • Requête SQL dynamique:
    • Selon la ComboBox (Liste.Name), la requête SQL extrait les villes associées au département sélectionné ou les dates des marées associées à la ville sélectionnée.
  • Mise à jour de la ComboBox:
    • La ComboBox est vidée (Liste.Clear) et remplie avec les résultats de la requête SQL (.getrows).
    • La ComboBox est réinitialisée sans sélection active (Liste.ListIndex = -1).

Récapitulatif :​

  • Départements_Change : Met à jour la ComboBox VILLES en fonction du département sélectionné.
  • VILLES_Change : Lorsqu'une ville est sélectionnée, elle déclenche l'appel de ParVentEtMaré pour récupérer les données de marée.
  • Lst : Remplit dynamiquement des ComboBoxes (VILLES) en fonction du département ou de la ville sélectionné(e).

Explication du code ParVentEtMaré avec la classe Ville :​

Classe Ville :

Cette classe représente une structure de données dédiée aux informations sur une ville et ses marées pour un jour donné. Elle contient les attributs suivants :
  • Ville : Le nom de la ville.
  • MyDate : La date des marées récupérées.
  • Matin et Après-midi:
    • Coeff : Coefficient des marées pour la matinée ou l'après-midi.
    • Basse_mere : Heure de la marée basse.
    • Basse_mere_Niveau_Zéro : Niveau de la mer à marée basse (par rapport au niveau zéro).
    • Pleine_mere : Heure de la marée haute.
    • Pleine_mere_Niveau_Zéro : Niveau de la mer à marée haute.
    • Sens_Marrées : Sens de la marée (montante ou descendante).
Cette classe sert à stocker toutes les informations relatives aux marées d'une ville pour une journée donnée, tant pour la matinée que pour l'après-midi.

Code ParVentEtMaré :

  1. Déclaration des variables:
    • VILLES() est un tableau d'objets Ville, qui va stocker les informations sur les marées pour une ou plusieurs villes.
    • conn est une connexion ADODB qui permet d'interagir avec une base de données ou un classeur Excel pour insérer les données.
  2. Création de la connexion ADODB:
    • Set conn = CreateADODBConnection(ThisWorkbook.FullName) : Crée une connexion entre le classeur Excel actif et la base de données. Cette connexion sera utilisée pour stocker les données de marées.
  3. Construction et validation de l'URL:
    • L'URL est construite pour accéder aux informations de marée d'une ville spécifique sur un site web. La fonction AssainirURL(URL) modifie l'URL pour qu'elle soit conforme.
    • CheckURL(URL, Trim("" & Ville)) vérifie si cette URL existe pour la ville donnée. Si l'URL est correcte, l'exécution continue ; sinon, elle s'arrête ici.
  4. Initialisation des objets Ville:
    • ReDim VILLES(0) redimensionne le tableau VILLES pour contenir un seul objet.
    • Set VILLES(0) = New Ville initialise ce premier objet de type Ville.
  5. Récupération des données de marée:
    • RetorunVilleJour et RetorunVilleJourAprès remplissent l'objet Ville avec les données de marée pour la date actuelle (Now) et les jours suivants. Ces fonctions utilisent l'URL du site pour extraire les informations via la fonction GetHTMLDocument(URL).
    • Les données de marée (heures de marée basse et haute, coefficients, niveaux, etc.) sont stockées dans l'objet Ville de la classe définie, tant pour la matinée que pour l'après-midi.
  6. Insertion des données dans la base de données:
    • Une fois les données récupérées et stockées dans l'objet Ville, elles sont insérées dans la base de données avec la procédure ProcessAndInsertTideData conn, VILLES. Cette étape prend les informations stockées dans le tableau VILLES et les enregistre dans la base de données, à l'aide de la connexion conn.
  7. Fermeture et nettoyage:
    • La connexion à la base de données est fermée et nettoyée (conn.Close et Set conn = Nothing).
    • Le tableau VILLES est réinitialisé et effacé de la mémoire (ReDim VILLES(0) et Erase VILLES), garantissant que toutes les ressources sont libérées correctement.

Résumé du processus :​

  • Le code récupère les données de marées d'une ville via une URL construite dynamiquement.
  • Ces données sont stockées dans des objets de type Ville, représentant les informations de marée pour la ville donnée sur une journée (matin et après-midi).
  • Les informations sont ensuite insérées dans une base de données Excel via ADODB.
  • Enfin, la connexion est fermée et les ressources sont libérées.
Le rôle de la classe Ville est central puisqu'elle structure toutes les informations récupérées pour les manipuler et les stocker dans la base de données.

Vocabulaire de Requêtage SQL​

  1. SQL (Structured Query Language):
    • Un langage de programmation utilisé pour gérer et manipuler des bases de données relationnelles.
  2. Requête SQL:
    • Une instruction écrite en SQL pour interagir avec la base de données, par exemple, pour sélectionner, insérer, mettre à jour ou supprimer des données.
  3. SELECT:
    • Instruction utilisée pour extraire des données d'une ou plusieurs tables dans une base de données. Dans votre code, la requête sélectionne toutes les colonnes de la table Marées$ où la date et la ville correspondent aux valeurs spécifiées.
  4. FROM:
    • Clause SQL qui indique la table d'où les données doivent être extraites. Dans votre cas, [Marées$] est la table cible.
  5. WHERE:
    • Clause SQL utilisée pour filtrer les enregistrements et spécifier des conditions sur les résultats. Elle permet de récupérer uniquement les lignes qui satisfont les critères donnés.
  6. Date:
    • Un champ dans la table qui représente la date à laquelle les marées sont enregistrées.
  7. Ville:
    • Un champ dans la table qui représente le nom de la ville pour laquelle les données de marée sont enregistrées.
  8. Recordset:
    • Un objet utilisé pour stocker un ensemble de résultats retournés par une requête SQL. Il permet de parcourir les résultats, de les modifier et de les mettre à jour.
  9. EOF (End of File):
    • Une propriété du recordset qui indique si le recordset a atteint la fin des enregistrements. Dans votre code, If rs.EOF Then vérifie si le recordset est vide.
  10. AddNew:
    • Méthode utilisée pour ajouter un nouvel enregistrement au recordset.
  11. Fields:
    • Collection d'attributs (colonnes) d'un enregistrement dans un recordset. Chaque champ peut être référencé pour lire ou écrire des données.
  12. Value:
    • Propriété d'un champ qui définit ou récupère la valeur de ce champ.
  13. IIf:
    • Fonction conditionnelle qui renvoie une valeur basée sur une condition spécifiée. Elle est utilisée pour gérer les valeurs nulles dans votre code.
  14. Update:
    • Méthode utilisée pour enregistrer les modifications apportées à un enregistrement dans le recordset.
  15. Null:
    • Une valeur qui représente l'absence de données. Dans votre code, elle est utilisée pour indiquer qu'aucune valeur n'est disponible pour certains champs.
  16. Replace:
    • Fonction qui remplace une occurrence d'une chaîne de caractères par une autre. Dans votre cas, elle est utilisée pour éviter les erreurs causées par des apostrophes dans les noms de ville.
  17. Variant:
    • Un type de données dans VBA qui peut contenir n'importe quel type de données. C'est souvent utilisé lorsque le type de données n'est pas connu à l'avance.

Concepts Connexes​

  1. Base de données:
    • Un système organisé pour stocker, gérer et récupérer des données. Dans votre cas, cela pourrait être une feuille de calcul Excel, étant donné l'utilisation de [Marées$].
  2. Connection (conn):
    • Un objet qui établit un lien entre votre code et la base de données pour exécuter des requêtes.
  3. Boucle For:
    • Structure de contrôle qui permet d'itérer à travers les éléments d'un tableau, dans votre cas pour parcourir chaque ville dans le tableau VILLES.

Exemples de Requêtes SQL​

Voici quelques exemples de requêtes similaires que vous pourriez rencontrer ou utiliser :
  • Sélectionner toutes les villes :
    Code:
    SELECT * FROM [Marées$]
  • Sélectionner les marées pour une date spécifique :
    Code:
    SELECT * FROM [Marées$] WHERE [Date] = #2024-10-11#
    
    
    [*]Insérer une nouvelle ligne :
    
    INSERT INTO [Marées$] (Ville, Date, [Matin Coeff], [Matin Basse mer])
    VALUES ('Nantes', #2024-10-11#, 75, 1.2)
En utilisant ce vocabulaire, vous devriez être en mesure de comprendre et de communiquer plus efficacement les détails de votre code de requêtage SQL. Si vous avez besoin d'éclaircissements supplémentaires ou de détails spécifiques, n'hésitez pas à demander !

Documentation du Module Mod_Horaire_Maree_fr​

Description Générale​

Ce module permet d'extraire les horaires de marée d'une ville française spécifique à partir du site web horaire-maree.fr. Les données récupérées sont ensuite traitées et insérées dans une base de données à l'aide d'une connexion ADODB.

Procédures et Fonctions​

  1. Sub test()
    • Description : Procédure de test qui appelle la fonction ParVentEtMaré avec "LORIENT" comme exemple de ville.
    • Utilisation : Peut être utilisé pour tester rapidement la fonctionnalité du module.
    • Appel de fonction:
      Code:
      ParVentEtMaré "LORIENT", "Lorient"
  2. Sub ParVentEtMaré(URL As String, Ville As String)
    • Description : Cette procédure gère la connexion à la base de données et l'extraction des données de marée pour une ville spécifique.
    • Paramètres:
      • URL : Chaîne contenant l'URL de la page web à extraire.
      • Ville : Chaîne contenant le nom de la ville.
    • Actions:
      • Crée une connexion ADODB.
      • Construit l'URL pour la ville spécifiée.
      • Vérifie si l'URL est valide.
      • Extrait les données de marée en appelant RetorunVilleJour et RetorunVilleJourAprès.
      • Insère les données de marée dans la base de données via ProcessAndInsertTideData.
      • Ferme la connexion ADODB à la fin.
  3. Sub RetorunVilleJour(v As String, TbVille() As Ville, D As String, htmlDoc As Object)
    • Description : Extrait les données de marée pour la journée à partir du tableau HTML sur la page web.
    • Paramètres:
      • v : Chaîne contenant le nom de la ville.
      • TbVille() : Tableau d'objets Ville pour stocker les données extraites.
      • D : Chaîne représentant la date du jour.
      • htmlDoc : Objet représentant le document HTML récupéré.
    • Actions:
      • Sélectionne le tableau de données de marée dans le document HTML.
      • Parcourt les lignes du tableau pour extraire les coefficients et les heures des marées (basse et pleine mer).
      • Détermine si la marée est montante ou descendante pour le matin et l'après-midi.
  4. Function RetournVille()
    • Description : Récupère les données des villes à partir d'une table dans la feuille de calcul "VILLES".
    • Retourne : Un tableau des données des villes.
  5. Sub RetorunVilleJourAprès(v As String, TbVille() As Ville, D As Date, htmlDoc As Object)
    • Description : Extrait les données de marée pour les jours suivants à partir d'un tableau HTML similaire.
    • Paramètres:
      • v, TbVille(), D, htmlDoc : Similaires à ceux de RetorunVilleJour.
    • Actions:
      • Sélectionne le tableau de données pour les jours suivants et extrait les informations de marée, similaire à RetorunVilleJour.
  6. Sub ProcessAndInsertTideData(conn As Object, VILLES() As Ville)
    • Description : Traite et insère les données de marée extraites dans la base de données via la connexion ADODB.
    • Paramètres:
      • conn : Objet de connexion ADODB.
      • VILLES() : Tableau d'objets Ville contenant les données de marée à insérer.

Types de données​

  • Type Ville: Une classe personnalisée qui stocke les informations sur la marée pour une ville. Les propriétés incluent :
    • Ville : Nom de la ville.
    • MyDate : Date des données de marée.
    • Matin_Coeff, Matin_Basse_mere, Matin_Basse_mere_Niveau_Zéro, Matin_Pleine_mere, Matin_Pleine_mere_Niveau_Zéro, etc. : Informations sur les marées.

Code:
' Module Mod_Horaire_Maree_fr
Option Explicit ' Force la déclaration explicite des variables
' Subroutine principale pour tester le fonctionnement
Sub test()
    ' Décommentez la ligne suivante pour rendre la feuille "villes" visible
    ' Sheets("villes").Visible = xlSheetVisible
    ' Appelle la fonction ParVentEtMaré avec le nom de la ville
    ParVentEtMaré "LORIENT", "Lorient"
End Sub
' Subroutine pour obtenir les données de marées d'une ville donnée
Sub ParVentEtMaré(URL As String, Ville As String)
    Dim VILLES() As Ville ' Déclare un tableau de type Ville
    Dim conn As Object ' Déclare un objet pour la connexion ADODB
    ' Créer une connexion ADODB
    Set conn = CreateADODBConnection(ThisWorkbook.FullName)
 
    ' Formater l'URL pour accéder aux données de marées
URL = "https://www.horaire-maree.fr/maree/" & AssainirURL(URL) & "/"
 
    ' Vérifie si l'URL est accessible et si la ville est valide
    If CheckURL(URL, Trim("" & Ville)) Then
        ReDim VILLES(0) ' Redimensionne le tableau pour contenir une ville
        Set VILLES(0) = New Ville ' Crée une nouvelle instance de la classe Ville
     
        ' Récupère les données de marées pour la ville pour le jour actuel
        RetorunVilleJour Trim("" & Ville), VILLES, Now, GetHTMLDocument(URL)
        ' Récupère les données de marées pour les jours suivants
        RetorunVilleJourAprès Trim("" & Ville), VILLES, Now, GetHTMLDocument(URL)
     
        ' Insère les données de marées dans la base de données
        ProcessAndInsertTideData conn, VILLES
    End If
    DoEvents ' Permet au système d'exécuter d'autres tâches
    ' Ferme la connexion ADODB
    conn.Close
    Set conn = Nothing ' Libère l'objet conn
    ReDim VILLES(0) ' Redimensionne le tableau pour le nettoyer
    Erase VILLES ' Efface le tableau
End Sub
' Subroutine pour retourner les données de marées pour un jour donné
Sub RetorunVilleJour(v As String, TbVille() As Ville, D As String, htmlDoc As Object)
    Dim table As Object ' Déclare un objet pour le tableau HTML
    Dim rows As Object ' Déclare un objet pour les lignes du tableau
    Dim cells As Object ' Déclare un objet pour les cellules de la ligne
    Dim row As Object ' Déclare un objet pour une ligne spécifique
    Dim cell As Object ' Déclare un objet pour une cellule spécifique
    Dim I As Integer ' Déclare un index pour les boucles
    ' Sélectionner le tableau à partir du document HTML
    Set table = htmlDoc.getElementById("i_donnesJour").getElementsByTagName("table")(0)
    Set rows = table.getElementsByTagName("tr")
    ' Initialise les valeurs de la première entrée dans le tableau des villes
    TbVille(0).Ville = v
    TbVille(0).MyDate = Format(D, "yyyy-mm-dd")
    ' Parcourt chaque ligne à partir de la 3ème ligne (les données commencent ici)
    For I = 2 To rows.Length - 1
        Set row = rows(I) ' Récupère la ligne actuelle
        Set cells = row.getElementsByTagName("td") ' Récupère les cellules de la ligne
        ' Vérifie que la ligne contient les cellules attendues
        If cells.Length >= 6 Then
            ' Matin Coeff
            If cells(0).innertext <> "" Then
                TbVille(0).Matin_Coeff = cells(0).innertext ' Récupère le coefficient du matin
            End If
            ' Matin Basse Mer
            If cells(1).innertext <> "" Then
                ' Récupère l'heure et le niveau de basse mer
                TbVille(0).Matin_Basse_mere = CDate(Replace(Split(cells(1).innertext, vbCrLf)(0), "h", ":"))
                TbVille(0).Matin_Basse_mere_Niveau_Zéro = Val(Replace(Split(cells(1).innertext, vbCrLf)(1), ",", "."))
            End If
            ' Matin Pleine Mer
            If cells(2).innertext <> "" Then
                ' Récupère l'heure et le niveau de pleine mer
                TbVille(0).Matin_Pleine_mere = CDate(Replace(Split(cells(2).innertext, vbCrLf)(0), "h", ":"))
                TbVille(0).Matin_Pleine_mere_Niveau_Zéro = Val(Replace(Split(cells(2).innertext, vbCrLf)(1), ",", "."))
            End If
            ' Après-midi Coeff
            If cells(3).innertext <> "" Then
                TbVille(0).Après_midi_Coeff = cells(3).innertext ' Récupère le coefficient de l'après-midi
            End If
            ' Après-midi Basse Mer
            If cells(4).innertext <> "" Then
                ' Récupère l'heure et le niveau de basse mer pour l'après-midi
                TbVille(0).Après_midi_Basse_mere = CDate(Replace(Split(cells(4).innertext, vbCrLf)(0), "h", ":"))
                TbVille(0).Après_midi_Basse_mere_Niveau_Zéro = Val(Replace(Split(cells(4).innertext, vbCrLf)(1), ",", "."))
            End If
            ' Après-midi Pleine Mer
            If cells(5).innertext <> "" Then
                ' Récupère l'heure et le niveau de pleine mer pour l'après-midi
                TbVille(0).Après_midi_Pleine_mere = CDate(Replace(Split(cells(5).innertext, vbCrLf)(0), "h", ":"))
                TbVille(0).Après_midi_Pleine_mere_Niveau_Zéro = Val(Replace(Split(cells(5).innertext, vbCrLf)(1), ",", "."))
            End If
        End If
     
        ' Détermine le sens des marées pour le matin et l'après-midi
        TbVille(0).Matin_Sens_Marrées = IIf(TbVille(0).Matin_Basse_mere < TbVille(0).Matin_Pleine_mere, "Marée Montante", "Marée Descendante")
        TbVille(0).Après_midi_Sens_Marrées = IIf(TbVille(0).Après_midi_Basse_mere < TbVille(0).Après_midi_Pleine_mere, "Marée Montante", "Marée Descendante")
    Next I
End Sub
' Fonction pour retourner les données de la feuille VILLES
Function RetournVille()
    RetournVille = ThisWorkbook.Sheets("VILLES").ListObjects("VILLES").DataBodyRange.Value
End Function
' Subroutine pour retourner les données de marées pour les jours suivants
Sub RetorunVilleJourAprès(v As String, TbVille() As Ville, D As Date, htmlDoc As Object)
    Dim table As Object ' Déclare un objet pour le tableau HTML
    Dim rows As Object ' Déclare un objet pour les lignes du tableau
    Dim cells As Object ' Déclare un objet pour les cellules de la ligne
    Dim row As Object ' Déclare un objet pour une ligne spécifique
    Dim cell As Object ' Déclare un objet pour une cellule spécifique
    Dim I As Integer ' Déclare un index pour les boucles
    ' Sélectionner le tableau à partir du document HTML
    Set table = htmlDoc.getElementById("i_donnesLongue").getElementsByTagName("table")(0)
    Set rows = table.getElementsByTagName("tr")
    ' Parcourt chaque ligne à partir de la 3ème ligne (les données commencent ici)
    For I = 2 To rows.Length - 1
        D = D + 1 ' Incrémente la date pour le jour suivant
        ReDim Preserve TbVille(UBound(TbVille) + 1) ' Redimensionne le tableau pour ajouter une ville
        Set TbVille(UBound(TbVille)) = New Ville ' Crée une nouvelle instance de la classe Ville
        TbVille(UBound(TbVille)).Ville = v
        TbVille(UBound(TbVille)).MyDate = Format(D, "yyyy-mm-dd") ' Définit la date de la ville
        Set row = rows(I) ' Récupère la ligne actuelle
        Set cells = row.getElementsByTagName("td") ' Récupère les cellules de la ligne
        ' Vérifie que la ligne contient les cellules attendues
        If cells.Length >= 6 Then
            ' Matin Coeff
            If cells(1).innertext <> "" Then
                TbVille(UBound(TbVille)).Matin_Coeff = cells(0).innertext ' Récupère le coefficient du matin
            End If
            ' Matin Basse Mer
            If cells(1).innertext <> "" Then
                ' Récupère l'heure et le niveau de basse mer
                TbVille(UBound(TbVille)).Matin_Basse_mere = CDate(Replace(Split(cells(1).innertext, vbCrLf)(0), "h", ":"))
                TbVille(UBound(TbVille)).Matin_Basse_mere_Niveau_Zéro = Val(Replace(Split(cells(1).innertext, vbCrLf)(1), ",", "."))
            End If
            ' Matin Pleine Mer
            If cells(2).innertext <> "" Then
                ' Récupère l'heure et le niveau de pleine mer
                TbVille(UBound(TbVille)).Matin_Pleine_mere = CDate(Replace(Split(cells(2).innertext, vbCrLf)(0), "h", ":"))
                TbVille(UBound(TbVille)).Matin_Pleine_mere_Niveau_Zéro = Val(Replace(Split(cells(2).innertext, vbCrLf)(1), ",", "."))
            End If
            ' Après-midi Coeff
            If cells(3).innertext <> "" Then
                TbVille(UBound(TbVille)).Après_midi_Coeff = cells(3).innertext ' Récupère le coefficient de l'après-midi
            End If
            ' Après-midi Basse Mer
            If cells(4).innertext <> "" Then
                ' Récupère l'heure et le niveau de basse mer pour l'après-midi
                TbVille(UBound(TbVille)).Après_midi_Basse_mere = CDate(Replace(Split(cells(4).innertext, vbCrLf)(0), "h", ":"))
                TbVille(UBound(TbVille)).Après_midi_Basse_mere_Niveau_Zéro = Val(Replace(Split(cells(4).innertext, vbCrLf)(1), ",", "."))
            End If
            ' Après-midi Pleine Mer
            If cells(5).innertext <> "" Then
                ' Récupère l'heure et le niveau de pleine mer pour l'après-midi
                TbVille(UBound(TbVille)).Après_midi_Pleine_mere = CDate(Replace(Split(cells(5).innertext, vbCrLf)(0), "h", ":"))
                TbVille(UBound(TbVille)).Après_midi_Pleine_mere_Niveau_Zéro = Val(Replace(Split(cells(5).innertext, vbCrLf)(1), ",", "."))
            End If
        End If
     
        ' Détermine le sens des marées pour le matin et l'après-midi
        TbVille(UBound(TbVille)).Matin_Sens_Marrées = IIf(TbVille(UBound(TbVille)).Matin_Basse_mere < TbVille(UBound(TbVille)).Matin_Pleine_mere, "Marée Montante", "Marée Descendante")
        TbVille(UBound(TbVille)).Après_midi_Sens_Marrées = IIf(TbVille(UBound(TbVille)).Après_midi_Basse_mere < TbVille(UBound(TbVille)).Après_midi_Pleine_mere, "Marée Montante", "Marée Descendante")
    Next I
End Sub
Sub ProcessAndInsertTideData(conn As Object, VILLES() As Ville)
    Dim v As Integer
    Dim Sql As String
    Dim rs As Object
    For v = 0 To UBound(VILLES)
        ' Construire la requête SQL de sélection
        Sql = "SELECT * FROM [Marées$] WHERE [Date]=#" & VILLES(v).MyDate & "# AND [Ville]='" & Replace(VILLES(v).Ville, "'", "''") & "'"
        ' Créer un objet Recordset
        Set rs = CreateObject("ADODB.Recordset")
        rs.Open Sql, conn, 1, 3 ' 1 = adOpenKeyset, 3 = adLockOptimistic
        If rs.EOF Then rs.AddNew ' Insérer une nouvelle ligne si la date et la ville n'existent pas
         
        ' Assignation des valeurs aux champs du Recordset
        rs.Fields("Ville").Value = "" & VILLES(v).Ville
        rs.Fields("Date").Value = "" & VILLES(v).MyDate
        rs.Fields("Matin Coeff").Value = IIf("" & VILLES(v).Matin_Coeff = "", Null, "" & VILLES(v).Matin_Coeff)
    
        rs.Fields("Matin Basse mer").Value = IIf("" & VILLES(v).Matin_Basse_mere = "", Null, "" & VILLES(v).Matin_Basse_mere)
        rs.Fields("Matin Basse mer Niveau Zéro").Value = IIf("" & VILLES(v).Matin_Basse_mere_Niveau_Zéro = "", Null, "" & VILLES(v).Matin_Basse_mere_Niveau_Zéro)
     
        rs.Fields("Matin Pleine mer").Value = IIf("" & VILLES(v).Matin_Pleine_mere = "", Null, "" & VILLES(v).Matin_Pleine_mere)
        rs.Fields("Matin Pleine mer Niveau Zéro").Value = IIf("" & VILLES(v).Matin_Pleine_mere_Niveau_Zéro = "", Null, "" & VILLES(v).Matin_Pleine_mere_Niveau_Zéro)
        rs.Fields("Matin Sens Marrées").Value = IIf("" & VILLES(v).Matin_Sens_Marrées = "", Null, "" & VILLES(v).Matin_Sens_Marrées)
     
        rs.Fields("Après-midi Coeff").Value = IIf("" & VILLES(v).Après_midi_Coeff = "", Null, "" & VILLES(v).Après_midi_Coeff)
     
        rs.Fields("Après-midi Basse mer").Value = IIf("" & VILLES(v).Après_midi_Basse_mere = "", Null, "" & VILLES(v).Après_midi_Basse_mere)
        rs.Fields("Après-midi Basse mer Niveau Zéro").Value = IIf("" & VILLES(v).Après_midi_Basse_mere_Niveau_Zéro = "", Null, "" & VILLES(v).Après_midi_Basse_mere_Niveau_Zéro)
    
        rs.Fields("Après-midi Pleine mer").Value = IIf("" & VILLES(v).Après_midi_Pleine_mere = "", Null, "" & VILLES(v).Après_midi_Pleine_mere)
        rs.Fields("Après-midi Pleine mer Niveau Zéro").Value = IIf("" & VILLES(v).Après_midi_Pleine_mere_Niveau_Zéro = "", Null, "" & VILLES(v).Après_midi_Pleine_mere_Niveau_Zéro)
        rs.Fields("Après-midi Sens Marrées").Value = IIf("" & VILLES(v).Après_midi_Sens_Marrées = "", Null, "" & VILLES(v).Après_midi_Sens_Marrées)
     
        rs.Update ' Met à jour le Recordset
    Next v
End Sub
' Fonction pour vérifier l'accessibilité d'une URL
Function CheckURL(URL As String, Ville As String) As Boolean
    Dim xml As Object ' Déclare un objet pour la requête XMLHTTP
    Set xml = CreateObject("MSXML2.XMLHTTP") ' Crée une requête XMLHTTP
    On Error Resume Next ' Ignore les erreurs
    ' Envoie une requête GET à l'URL
    xml.Open "GET", URL, False
    xml.send
    ' Vérifie si la réponse est un succès
    If xml.Status = 200 Then
        CheckURL = True ' L'URL est accessible
    Else
        CheckURL = False ' L'URL n'est pas accessible
    End If
    On Error GoTo 0 ' Réactive les erreurs
End Function
' Fonction pour assainir une URL (remplacer les espaces par des tirets)
Function AssainirURL(URL As String) As String
    Dim res As String ' Déclare une variable pour le résultat
    res = Trim(URL) ' Supprime les espaces autour de l'URL
    res = Replace(res, " ", "-") ' Remplace les espaces par des tirets
    AssainirURL = res ' Retourne l'URL assainie
End Function
' Fonction pour créer une connexion ADODB
Function CreateADODBConnection(dbPath As String) As Object
    Dim conn As Object ' Déclare un objet pour la connexion
    Set conn = CreateObject("ADODB.Connection") ' Crée une connexion ADODB
    conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & dbPath & ";Persist Security Info=False;" ' Chaîne de connexion
    conn.Open ' Ouvre la connexion
    Set CreateADODBConnection = conn ' Retourne l'objet de connexion
End Function
' Fonction pour obtenir le document HTML à partir d'une URL
Function GetHTMLDocument(URL As String) As Object
    Dim xml As Object ' Déclare un objet pour la requête XMLHTTP
    Set xml = CreateObject("MSXML2.XMLHTTP") ' Crée une requête XMLHTTP
    ' Envoie une requête GET à l'URL
    xml.Open "GET", URL, False
    xml.send
    ' Crée un document HTML et charge le contenu
    Dim htmlDoc As Object
    Set htmlDoc = CreateObject("htmlfile")
    htmlDoc.body.innerHTML = xml.responseText ' Charge le texte de la réponse dans le document HTML
    Set GetHTMLDocument = htmlDoc ' Retourne le document HTML
End Function
' Class pour définir une ville
Class Ville
    Public Ville As String ' Nom de la ville
    Public MyDate As String ' Date pour les marées
    Public Matin_Coeff As String ' Coefficient de la marée du matin
    Public Matin_Basse_mere As Date ' Heure de la basse mer du matin
    Public Matin_Basse_mere_Niveau_Zéro As Double ' Niveau de la basse mer du matin
    Public Matin_Pleine_mere As Date ' Heure de la pleine mer du matin
    Public Matin_Pleine_mere_Niveau_Zéro As Double ' Niveau de la pleine mer du matin
    Public Après_midi_Coeff As String ' Coefficient de la marée de l'après-midi
    Public Après_midi_Basse_mere As Date ' Heure de la basse mer de l'après-midi
    Public Après_midi_Basse_mere_Niveau_Zéro As Double ' Niveau de la basse mer de l'après-midi
    Public Après_midi_Pleine_mere As Date ' Heure de la pleine mer de l'après-midi
    Public Après_midi_Pleine_mere_Niveau_Zéro As Double ' Niveau de la pleine mer de l'après-midi
    Public Matin_Sens_Marrées As String ' Sens de la marée du matin
    Public Après_midi_Sens_Marrées As String ' Sens de la marée de l'après-midi
End Class
[:code]
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
315 093
Messages
2 116 133
Membres
112 667
dernier inscrit
foyoman