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
 

Jeannette

XLDnaute Junior
Bonjour @Staple1600
Sur le site visité, https://horaire-maree.fr/maree/LORIENT/
Le premier tableau (Ligne 0) donne les informations du jour (mais pas de colonne "Date"
Et en ligne 1, les prévisions

1722875855552.png
 

Staple1600

XLDnaute Barbatruc
Re

@Nicolas JACQUIN
Me basant sur tes messages parlant d'erreur, j'étais resté sur l'URL utilisé par @JHA
Avec marée.info, je n'ai pas d'erreur
PowerQuery:
let
    Source = Web.Page(Web.Contents("https://maree.info/95")),
    Data = Source{1}[Data],
    #"Type modifié" = Table.TransformColumnTypes(Data,{{"Date", type text}, {"Heure", type text}, {"Hauteur", type text}, {"Coeff.", type text}}),
    #"Fractionner la colonne par délimiteur" = Table.SplitColumn(#"Type modifié", "Heure", Splitter.SplitTextByDelimiter("#(cr)", QuoteStyle.Csv), {"Heure.1", "Heure.2", "Heure.3", "Heure.4"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur",{{"Heure.1", type text}, {"Heure.2", type text}, {"Heure.3", type text}, {"Heure.4", type text}}),
    #"Fractionner la colonne par délimiteur1" = Table.SplitColumn(#"Type modifié1", "Hauteur", Splitter.SplitTextByDelimiter("#(cr)", QuoteStyle.Csv), {"Hauteur.1", "Hauteur.2", "Hauteur.3", "Hauteur.4"}),
    #"Type modifié2" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur1",{{"Hauteur.1", type text}, {"Hauteur.2", type text}, {"Hauteur.3", type text}, {"Hauteur.4", type text}}),
    #"Colonnes permutées" = Table.ReorderColumns(#"Type modifié2",{"Date", "Heure.1", "Hauteur.1", "Heure.2", "Hauteur.2", "Heure.3", "Hauteur.3", "Heure.4", "Hauteur.4", "Coeff."}),
    #"Fractionner la colonne par délimiteur2" = Table.SplitColumn(#"Colonnes permutées", "Coeff.", Splitter.SplitTextByDelimiter("#(cr)", QuoteStyle.Csv), {"Coeff..1", "Coeff..2", "Coeff..3"}),
    #"Type modifié3" = Table.TransformColumnTypes(#"Fractionner la colonne par délimiteur2",{{"Coeff..1", Int64.Type}, {"Coeff..2", type text}, {"Coeff..3", Int64.Type}}),
    #"Colonnes supprimées" = Table.RemoveColumns(#"Type modifié3",{"Coeff..2"})
in
    #"Colonnes supprimées"

@Jeannette
Merci pour les précisions
Donc ici j'ai la marée du jour
PowerQuery:
let
    Source = Web.Page(Web.Contents("https://horaire-maree.fr/maree/LORIENT/")),
    Data0 = Source{0}[Data],
    #"Type modifié" = Table.TransformColumnTypes(Data0,{{"Matin Coeff.", type text}, {"Matin Basse mer", type text}, {"Matin Pleine mer", type text}, {"Après midi Coeff.", type text}, {"Après midi Basse mer", type text}, {"Après midi Pleine mer", type text}}),
    #"Premières lignes supprimées" = Table.Skip(#"Type modifié",2),
    #"Personnalisée ajoutée" = Table.AddColumn(#"Premières lignes supprimées", "DATE", each DateTime.Date(DateTime.FixedLocalNow())),
    #"Colonnes permutées" = Table.ReorderColumns(#"Personnalisée ajoutée",{"DATE", "Matin Coeff.", "Matin Basse mer", "Matin Pleine mer", "Après midi Coeff.", "Après midi Basse mer", "Après midi Pleine mer"}),
    #"Type modifié1" = Table.TransformColumnTypes(#"Colonnes permutées",{{"DATE", type date}})
in
    #"Type modifié1"

Idem: code M généré par l'assistant PQ (donc optimisable mais là c'est l'heure de ma soupe ;) )
 

Jeannette

XLDnaute Junior
Re-,
pour le code VBA, je ne suis pas forcément le meilleur conseil, mais d'après ce que je comprends, tu sélectionnes une cellule contenant un nombre (de 1 à 31), et tu veux obtenir les données de cette "pseudo-date".
Est-ce que ta combinaison
VB:
(j) & "/" & (m) & "/" & (a)
te donne bien une date?
Pourquoi ne pas calculer la date avec cette cellule puis mois du jour puis année du jour?
et ensuite rechercher cette date dans la requête?
ou plus simplement, Day(cellule de la colonne A du tableau) = cellule sélectionnée?
 
Dernière édition:

jm.andryszak

XLDnaute Occasionnel

Bonsoir

En réponse au post #80

For i = 1 To ActiveWorkbook.Names.Count
If ActiveWorkbook.Names(i).Name = "'" & Worksheets(1).Name & "'" & "!Import_1" Or _
ActiveWorkbook.Names(i).Name = Worksheets(1).Name & "!Import_1" Then
'Range(ActiveWorkbook.Names(i).RefersToRange.Address).Select
Exit For
End If
Next
Ces lignes de code ne servent à rien, elles pourraient servir à faire une mise en forme du tableau, ce que je n'ai pas fait, d'où la mise en commentaire.
J'ai aussi quelque part les horaires de lever et coucher du soleil pour une latitude et longitude donnée, si ça intéresse quelqu'un (Référence WIKIPEDIA ou IMCEE, ne sait plus ??)
 

Staple1600

XLDnaute Barbatruc
Re

@Nicolas JACQUIN
Pour rester sur ta logique VBA, voir ce test
Code:
Sub test()
a = "2024" 'Year(Worksheets("Calendrier").Range("B1"))
m = 8 'Month(Worksheets("Calendrier").Range("B1"))
j = 5 'ActiveCell.Value
vDate = DateSerial(a, m, j)
MsgBox vDate
'...
'If .Cells(I, 1) = vDate Then
End Sub
et adapter en conséquence pour ta procédure Sub Marée()

PS: retirer les ' que j'ai mis pour tester avec le MsgBox
 

Staple1600

XLDnaute Barbatruc

Bonsoir

En réponse au post #80

For i = 1 To ActiveWorkbook.Names.Count
If ActiveWorkbook.Names(i).Name = "'" & Worksheets(1).Name & "'" & "!Import_1" Or _
ActiveWorkbook.Names(i).Name = Worksheets(1).Name & "!Import_1" Then
'Range(ActiveWorkbook.Names(i).RefersToRange.Address).Select
Exit For
End If
Next
Ces lignes de code ne servent à rien, elles pourraient servir à faire une mise en forme du tableau, ce que je n'ai pas fait, d'où la mise en commentaire.
J'ai aussi quelque part les horaires de lever et coucher du soleil pour une latitude et longitude donnée, si ça intéresse quelqu'un (Référence WIKIPEDIA ou IMCEE, ne sait plus ??)
Bonsoir @jm.andryszak

Merci pour le feedback (et bravo pour la qualité de ton code VBA qui mets mes neurones à l'épreuve)
 

Nicolas JACQUIN

XLDnaute Impliqué
Supporter XLD
Re

@Nicolas JACQUIN
Pour rester sur ta logique VBA, voir ce test
Code:
Sub test()
a = "2024" 'Year(Worksheets("Calendrier").Range("B1"))
m = 8 'Month(Worksheets("Calendrier").Range("B1"))
j = 5 'ActiveCell.Value
vDate = DateSerial(a, m, j)
MsgBox vDate
'...
'If .Cells(I, 1) = vDate Then
End Sub
et adapter en conséquence pour ta procédure Sub Marée()

PS: retirer les ' que j'ai mis pour tester avec le MsgBox

Parfait mon ami, ça match impéc, j'était pas si loin pourtant ;);)

VB:
Sub Mareee()

    a = Year(Worksheets("Calendrier").Range("B1"))
    m = Month(Worksheets("Calendrier").Range("B1"))
    j = ActiveCell.Value
    vDate = DateSerial(a, m, j)
    With Worksheets("Marees")
        For I = 2 To 12
            If .Cells(I, 1) = vDate Then
                Forme.Label29 = .Cells(I, 3).Value
                Forme.Label30 = .Cells(I, 4).Value
                Forme.Label31 = .Cells(I, 2).Value
                Forme.Label32 = .Cells(I, 6).Value
                Forme.Label33 = .Cells(I, 7).Value
                Forme.Label34 = .Cells(I, 5).Value
            End If
        Next I
    End With
    
End Sub

test form6.gif

Plus qu'à essayer de faire un peu joli l'userform
et voir les codes de jm.andryszak sur la lunaison
 

Discussions similaires

Statistiques des forums

Discussions
313 912
Messages
2 103 505
Membres
108 682
dernier inscrit
fabien1116