Suivi Route du Rhum

Gruick

XLDnaute Accro
Bonjour,

Je suis la Route du Rhum, et j'ai 5 positions par jour.
Une fois les données reportées, je voudrais afin de pouvoir suivre les concurrents sur un graphique en nuages de points, définir les x et les y, les latitudes et longitudes. avec un fond de carte Atlantique Nord bien sur.
Tout ça, je l'ai déjà fait pour le Vendée Globe 2008.

La où ça se corse, c'est qu'il y a 85 bateaux, donc 170 noms à définir
Oh ! Je pourrai le faire à la main.
j'ai Groupama_3_LA
=DECALER(Adaptation!$B$3;;;NBVAL(Adaptation!$B$3:$B$65536)+1)
et Groupama_3_LO
=DECALER(Adaptation!$C$3;;;NBVAL(Adaptation!$C$3:$C$65536)+1)
Le nom du bateau, LA pour Latitude et le reste pour la zone ainsi définie.

En gros fainéant, je me suis dit qu'une bonne macro... j'ai essayé de voir ce que ça donne avec la macro en enregistrement automatique.
Mais voilà, c'est dur avec tous ces guillemets, pour rendre tout ça universel.

Je vous joint le fichier (un petit bout), pour que vous ramiez dessus :)!!!
(parce que moi, je patauge,normal pour un cochon)

Gruick
 

Pièces jointes

  • RR.xls
    32 KB · Affichages: 66
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : nommer colonne évolutive, mais par macro

Hi,

un petit code

Attention, il te supprime tous les anciens noms (tu peux, of corse, modifier cette partie de code..)

Code:
Sub definir_noms()
Dim Cel As Range
Dim Nms As Name
For Each Nms In Names
    Nms.Delete
Next
For Each Cel In Rows(1).SpecialCells(xlCellTypeConstants, 23)
    If Cel.Column = 1 Then
        Range(Cel.Offset(2), Cells(Cells.Rows.Count, 1).End(xlUp)).Name = Replace(Cel, " ", "_")
    Else
        Range(Cel.Offset(2), Cells(Cells.Rows.Count, Cel.Column).End(xlUp)).Name = Replace(Replace(Cel & "_LA", " ", "_"), "-", "_")
        Range(Cel.Offset(2, 1), Cells(Cells.Rows.Count, Cel.Column + 1).End(xlUp)).Name = Replace(Replace(Cel & "_LO", " ", "_"), "-", "_")
    End If
Next Cel
End Sub

Tu auras ainsi tous les noms

J'ai remplacé les espaces, ainsi que les tirets, par des "_"

Si tu as d'autres exceptions, il faut en tenir compte

Bonne soirée
 
G

Guest

Guest
Re : nommer colonne évolutive, mais par macro

bonjour Gruick, :)
Hello cousin:)

J'ai ceci pour que les noms soient dynamiques:

Code:
 Dim strFormule As String, strNom As String, adr2 As String
 Dim nm As Name
 Dim i As Long, c As Range
 strFormule = "=OFFSET(Adaptation!Adr1,,,COUNTA(Adaptation!Adr2)+1)"
 
 With Sheets("Adaptation")
    For i = 2 To .Range([B2], .Range("IV2").End(xlToLeft)).Columns.Count Step 2
        Set c = Cells(2, i)
        strNom = Replace(c.Offset(-1, c.Column Mod 2 = 1), "-", "_")
        strNom = Replace(strNom, " ", "_") & "_?"
 
        adr2 = c.Address & ":" & .Cells(.Rows.Count, c.Column).Address
        Application.Names.Add Replace(strNom, "?", "LA"), Replace(Replace(strFormule, "Adr1", c.Address), "Adr2", adr2)
        Set c = c.Offset(, 1)
        adr2 = c.Address & ":" & .Cells(.Rows.Count, c.Column).Address
        Application.Names.Add Replace(strNom, "?", "LO"), Replace(Replace(strFormule, "Adr1", c.Address), "Adr2", adr2)
    Next
 End With
End Sub

A+

[Edit] J'ai oublié d'enlever le +1 en bout de formule, il est inutile à part si tu veux une cellule vide en bas de liste.
 
Dernière modification par un modérateur:

Modeste

XLDnaute Barbatruc
Re : nommer colonne évolutive, mais par macro

Bonsoir à tous,

J'étais occupé de terminer de pondre quelque chose ... un peu tard !!
A signaler tout de même que les cellules qui semblent vides ne le sont pas toujours ... la fonction DECALER ne donne donc pas toujours le résultat attendu, puisque le décompte fourni par NBVAL n'est pas correct.
 

Gruick

XLDnaute Accro
Re : nommer colonne évolutive, mais par macro

Moi itou Capitaine Hasco.

Les idiots, ils ont oublié de mentionner les coordonnées du départ de Saint Malo. Ce qui fait que les marins piquent directement dans les terres bretonnes.

Le fichier sera énorme, il fait déjà 65 feuilles. Mais le Vendée Globe fait 8,05Mo et 518 feuilles, record homologué. Je peux te le fournir, si tu me confies ton adresse par mp.

Gruick

Euh, il manquerait pas un Sub Trucmachinchose() au début de ton oeuvre ?
 
Dernière édition:

Gruick

XLDnaute Accro
Re : Suivi de la Route du Rhum

Bienvenue à bord,

J'ai ajouté les coordonnées de départ (pour l'anécdote, à la "Pointe du Grouin":p, à l'est de Saint-Malo, et d'arrivée à Point à Pître.

Il avance bien mon fichier. J'ai pu me rendre compte de quelques spécificités.
- La macro d'Hasco (que je ne remercierais jamais assez) m'a bien servi, mais je suis obligé de mettre à la main les séries. Si quelqu'un a une idée pour le cossard que je suis !!!
- Il faut "adapter" le graphique à l'image en jouant sur les échelles des axes, et ce, au pif.
- Le graphique en nuages de points ne supporte pas les trous, j'ai du les combler par la dernière position connue, en attendant la suivante.

Partant de ce fichier, je voudrai que le graphique évolue.
Je choisirai quelques bateaux, et le graphique "bougerait" selon les positions de mes bateaux, car pour l'instant, c'est du statique.
(J'ai cherché dans les discussions similaires, y'a pas)

Toutes les bonnes idées sont les bienvenues, et de mon côté, je cherche aussi.

Gruick, simple moussaillon.
 

Pièces jointes

  • RR.zip
    20.5 KB · Affichages: 32
  • RR.zip
    20.5 KB · Affichages: 30
  • RR.zip
    20.5 KB · Affichages: 37
Dernière édition:

Gruick

XLDnaute Accro
Re : Suivi Route du Rhum

Bonsoir,

En reprenant la macro d'Hasco, j'ai l'idée de m'en servir pour faire le graphique dynamique dont je rêve, qui bougerait en fonction des positions des bateaux à chaque relevé. (toutes les 4 heures sauf 22h52)

Récupérer les noms, s'en servir pour définir les séries et leur nom sur le graphique (celui du bateau).

Je suis confronté au même problème, traduire en langage VBA ce que je fais "à la main". J'ai fait un exemple en enregistrement automatique avec le bateau "Côte d'Or II". (Partie en jaune sur mon fichier)

A voir avec le fichier précédement posté, et mes idées sur celui que je poste maintenant.

Arrivée en vue, hissons la grand'voile...

Merci d'avance

Gruick
 

Pièces jointes

  • RRpourXLD.xls
    20.5 KB · Affichages: 59
G

Guest

Guest
Re : Suivi Route du Rhum

Bonsoir Gruick,

J'ai pas bien compris le but de la boucle J qui parcours toutes tes lignes.

Alors voici 2 bouts de code qui je l'espère t'aideront à y voir plus clair.

1 - boucle pour récupérer les noms (existants) des plages de cellules pour tous les bateaux (Mais je ne vois pas l'interêt d'une boucle pour avoir l'adresse d'un seul bateau).

Code:
Sub RecupNoms()
    Dim cBateau As Range
    Dim i As Integer
    Dim nom_LA As String, nom_LO As String
    With Sheets("Adaptation")
        'Parcourir les cellules d'entête 2 à 2 pour récupérer en une seule fois les noms Excel des plages
        'de bateau
        For i = 2 To .Range([B2], .Range("IV2").End(xlToLeft)).Columns.Count Step 2
            Set cBateau = .Cells(1, i)
            'Récupération des noms
            nom_LA = Replace(Replace(cBateau.Value, "-", "_"), " ", "_") & "_LA"
            nom_LO = Replace(nom_LA, "_LA", "_LO")
        Next
    End With
End Sub

2 - lignes pour le graphique:

Code:
        ActiveSheet.ChartObjects("Graphique2").Activate
        s = ActiveChart.SeriesCollection.Count
        ActiveChart.SeriesCollection.NewSeries
        ActiveChart.SeriesCollection(s + 1).XValues = "=RR.xls!" & [COLOR=red][B]nom_LO
[/B][/COLOR]        ActiveChart.SeriesCollection(s + 1).Values = "=RR.xls!" & [COLOR=red][B]nom_LA
[/B][/COLOR]        ActiveChart.SeriesCollection(s + 1).Name = "=Adaptation!" & [COLOR=red][B]cBateau.Address
[/B][/COLOR]

On peut supposer que tu affiches dans une liste tous les entêtes de colonne paires (pour le nom original des bateaux)

A partir du choix fait dans la liste, il suffit de formater le nom:
Code:
   nom_LA = Replace(Replace([COLOR=red][B]NomORIGINAL[/B][/COLOR], "-", "_"), " ", "_") & "_LA"
            nom_LO = Replace(nom_LA, "_LA", "_LO")

et de passer les noms; 'nom_LA' et "nom_LO' ainsi que l'adresse de la cellule idoine aux lignes pour le graphique.

A+
 

Gruick

XLDnaute Accro
Re : Suivi Route du Rhum

Et bien dis donc, pour quelqu'un qui ne s'y connaissait pas... En lisant ton MP, je commençais à écoper.

Et hop, avis de tempête, son nom est Hasco, trop rapide.

La boucle j permettra de redéfinir le nom des longitudes et latitudes à chaque mise à jour. Ce qui était statique (toute la colonne) devient aisi dynamique, de façon à bloquer la courbe sur une période donnée.
Quand j est incrémenté, on passe à la màj suivante, et donc la courbe avance d'un de plus.
En revanche, le nom ne changera pas, mais le contenu grandira. Les séries n'auront ainsi d'être définies une seule fois.

Je vais zieuter tout ça au calme, demain, car ma jolie truie est impatiente d'aller manger italien. (Elle s'est elle-même nommée comme ça)

Bien évidemment, tu auras en priorité le fichier finalisé, pour l'instant ce n'est qu'un brouillon, j'ai donc des petites adaptation à faire selon mon iodée première, faire gigoter le graphique.

Encore mille mercis.

Gruick
 
Dernière édition:
G

Guest

Guest
Re : Suivi Route du Rhum

Bonjour Gruick,

Il y a plus compact comme écriture pour ajouter une série:

Code:
        With ActiveSheet.ChartObjects("Graphique2").Chart.SeriesCollection.NewSeries()
            .XValues = "=" & nom_LO
            .Values = "="  & nom_LA
            .Name = "=" & cBateau.Address
        End With

Pas utile de mettre le nom du classeur, excel se débrouillera comme un grand si tu déménages le graphique du sur un autre classeur.

A+ Raymond:D (private joke)
 

Gruick

XLDnaute Accro
Re : Suivi Route du Rhum

Bonsoir Hasco,

Journée contrariée, déplacements imprévus...
En revenant, j'ai constaté que j'étais resté connecté sur XLD toute la journée.

Bonne idée pour les séries, je vais tester.
Je crois que pour le nom de la série, pas la peine de mettre .address.

Je finalise tout ça, et je t'envoie le truc, dès qu'il me satisfait. (peut-être demain, si pas de contrariété inattendue)

Pour Raymond, entre deux poules, i' dort, mais dans le domaine économique, il est très fort. Tiens, si je mettais des points carrés dans le graphique.

François alias Gruick

Edit :
Raye mon 2e § de ce message, je viens d'essayer sans le "=" &, et ça marche ! J'y crois pas, j'ai voulu un truc tarabiscoté sans essayer ce qu'il y avait de plus simple.
 
Dernière édition:
G

Guest

Guest
Re : Suivi Route du Rhum

hello le fil,
Gruick,

Voici une macro qui fera évolué les routes en ne changeant qu'une variable, pendant la boucle.

Code:
Sub Sailing2()
'Formule de nommage des colonnes de données de chaque bateau choisit
'seule 'Ligne' sera variable et modifié par la boucle sur toutes les cellules
'de chaque colonne, calculera ainsi la hauteur de la plage
    Const strFormule As String = "=OFFSET(Choix!?,2,0,Ligne-3,1)"
    Dim nm As Name, oChart As Chart, s As Series
    Dim c As Range
    Dim nmLA As String, nmLO As String, bateau As String
    Dim i As Long, derLig As Long, j As Integer
    With Sheets("Choix")
        Set oChart = .ChartObjects("Routes").Chart
        For Each s In oChart.SeriesCollection
            s.Delete
        Next
        For Each nm In Names
            If nm.Name <> "Ligne" Then nm.Delete
        Next
        Application.Names.Add "Ligne", 4
 
        For i = 16 To .Range("IV2").End(xlToLeft).Column Step 2
            Set c = .Cells(1, i)
 
            'Dernière ligne à parcourir?
            If .Cells(.Rows.Count, c.Column).End(xlUp).Row > derLig Then derLig = .Cells(.Rows.Count, c.Column).End(xlUp).Row
 
            'Le nom du bateau
            bateau = .Cells(1, i).Offset(, .Cells(1, i).Column Mod 2 = 1)
 
            'Les noms pour le calcul
            strNom = Replace(Replace(bateau, "-", "_"), " ", "_")
            nmLA = strNom & "_LA"
            nmLO = strNom & "_LO"
 
            Application.Names.Add nmLA, Replace(strFormule, "?", c.Address)
            Application.Names.Add nmLO, Replace(strFormule, "?", c.Offset(, 1).Address)
            'Ajout des series avec pour source de données les plages nommées
            j = oChart.SeriesCollection.Count
            oChart.SeriesCollection.NewSeries
            oChart.SeriesCollection(j + 1).Name = bateau
            oChart.SeriesCollection(j + 1).XValues = "=" & ThisWorkbook.Name & "!" & nmLO
            oChart.SeriesCollection(j + 1).Values = "=" & ThisWorkbook.Name & "!" & nmLA
        Next i
 
        'Parcours des lignes de 5 à derLig
        For i = 5 To derLig
            Application.Names("Ligne").RefersTo = "=" & i
            Calculate
        Next i
    End With
End Sub
A+
 

Statistiques des forums

Discussions
312 305
Messages
2 087 091
Membres
103 465
dernier inscrit
Ehoarn_src