09.03.2015 Views

documentation sur les programmes vba excel de traitement des profils

documentation sur les programmes vba excel de traitement des profils

documentation sur les programmes vba excel de traitement des profils

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

DOCUMENTATION SUR LES PROGRAMMES<br />

VBA EXCEL<br />

DE TRAITEMENT DES PROFILS<br />

JULES FLEURY 1<br />

CEREGE<br />

mardi 31 mai 2011<br />

1<br />

Ju<strong>les</strong> Fleury. Europôle <strong>de</strong> l’Arbois, CEREGE, BP80,13545 Aix en Provence Ce<strong>de</strong>x 4. Tel : 04 42 97 15 76.<br />

Email : fleury@cerege.fr


SOMMAIRE<br />

Programmes Excel ................................................................................................................. 3<br />

a. Presentation ..................................................................................................................... 3<br />

b. Traitement <strong>de</strong>s <strong>profils</strong> en travers en fichier txt ............................................................... 3<br />

c. Traitement <strong>de</strong>s <strong>profils</strong> en travers en fichier Excel ........................................................... 5<br />

d. Calcul du profil en long à partir <strong>de</strong>s <strong>profils</strong> en travers .................................................... 7<br />

e. Comparaison <strong>de</strong>s <strong>profils</strong> en long ..................................................................................... 8<br />

B. Liste <strong>de</strong>s <strong>programmes</strong> ....................................................................................................... 10<br />

C. Annexes : Co<strong>de</strong> ................................................................................................................ 11<br />

a. Traitement <strong>profils</strong> travers txt ......................................................................................... 11<br />

b. Traitement <strong>profils</strong> travers xls ........................................................................................ 17<br />

c. Calcul <strong>profils</strong> long ......................................................................................................... 20<br />

d. Comparaison <strong>profils</strong> long .............................................................................................. 23


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

Programmes Excel<br />

a. Presentation<br />

Ces <strong>programmes</strong> sont écrits en Visual Basic for Application et nécessitent EXCEL.<br />

Ce sont <strong>de</strong>s macros et ils sont accessib<strong>les</strong> par une barre d’outil personnalisée.<br />

Ils sont <strong>de</strong>stinés à traiter <strong>de</strong>s <strong>profils</strong> en travers <strong>de</strong> manière à créer <strong>de</strong>s fichiers x y z et à<br />

calculer <strong>les</strong> <strong>profils</strong> en long correspondants.<br />

Figure 1 : Interface <strong>de</strong>s outils <strong>de</strong> <strong>traitement</strong>s <strong>de</strong> <strong>profils</strong> dans <strong>excel</strong>l<br />

b. Traitement <strong>de</strong>s <strong>profils</strong> en travers en fichier txt<br />

Les fichiers en entrée sont <strong>de</strong>s <strong>profils</strong> en travers sous forme <strong>de</strong> fichiers texte .txt contenant<br />

l’i<strong>de</strong>ntifiant du profil, la date, la distance à l’origine et la côte (Figure 2).<br />

Figure 2 : Fichier texte d’un profil en travers<br />

Notre programme permet la conversion <strong>de</strong> ce type <strong>de</strong> fichier (il fonctionne en batch) en fichier<br />

x y z. Pour cela, on utilise un fichier contenant <strong>les</strong> coordonnées du début et <strong>de</strong> la fin <strong>de</strong> chaque<br />

profil.<br />

Figure 3 : Fichier Excel contenant <strong>les</strong> coordonnées <strong>de</strong> début et <strong>de</strong> fin <strong>de</strong> chaque profil en travers. Les<br />

attributs LOC3, CHUT, OUVR, DISTAPP ne sont pas uti<strong>les</strong> dans le cas général.<br />

Des calculs trigonométriques permettent <strong>de</strong> retrouver <strong>les</strong> coordonnées <strong>de</strong> chaque point du<br />

profil.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 3


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

Figure 4 : Exemple <strong>de</strong> fichier en sortie d’un <strong>traitement</strong> du profil en travers<br />

On voit que le fichier en sortie, nommé p_date_nomprofil.xls, contient <strong>les</strong> coordonnées en<br />

Lambert III <strong>de</strong>s extremités du profil, le nom du profil (ici 293), la date du levé (ici 1964), puis<br />

une table avec la distance à l’origine en rive droite, la côte du point, <strong>les</strong> coordonnées en<br />

Lambert III et le nom du PK.<br />

Si l’on utilise en entrée un ensemble <strong>de</strong> <strong>profils</strong> en travers <strong>de</strong> la même date (<strong>traitement</strong> en<br />

batch), alors un fichier <strong>de</strong> synthèse, nomé p_date_s.xls, est aussi généré.<br />

Figure 5 : Exemple <strong>de</strong> fichier synthétique créé à partir du <strong>traitement</strong> en batch d’un ensemble <strong>de</strong> profil en<br />

travers.<br />

Ce fichier synthétique n’est qu’une table contenant la distance à l’origine en rive droite, la<br />

côte du point, <strong>les</strong> coordonnées en Lambert III et le nom du PK.<br />

Il est ensuite aisé d’exporter ce fichier vers ArcGIS pour créer un fichier <strong>de</strong> polyligne3D.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 4


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

Figure 6 : Exemple <strong>de</strong> résultat du <strong>traitement</strong> <strong>de</strong> <strong>profils</strong> en travers<br />

Installation<br />

1. Ouvrir VBA dans Excel<br />

2. Copier le co<strong>de</strong> dans un module<br />

3. Nommer le module selon vos aspirations<br />

4. Fermer VBA<br />

5. Eventuellement rajouter un bouton dans Excel lié à la macro.<br />

Dans le menu Outils, allez dans Personnalisation puis dans l’onglet Comman<strong>de</strong>s et la<br />

catégorie Macros. Cliquez dans Bouton personnalisé et le faire glisser vers une barre<br />

d’outil. Ensuite par un clic droit <strong>sur</strong> le bouton faire Affecter une macro.<br />

Utilisation<br />

Ce programme s’exécute simplement en cliquant <strong>sur</strong> le bouton affecté à la macro ou en<br />

utilisant la fonction Executer une macro dans le menu Outils.<br />

PRECAUTIONS D’EMPLOI<br />

• Il faut modifier dans le co<strong>de</strong> le chemin pour le fichier x y z en sortie.<br />

• Si le(s) fichier txt en entrée n’est pas au format présenté Figure 2, avec ligne <strong>de</strong><br />

titre et séparateurs, alors il faut modifier le co<strong>de</strong> pour prendre en compte le<br />

format. Une autre solution si vous ne voulez pas rentrer dans le co<strong>de</strong> et que<br />

vous avez peu <strong>de</strong> fichiers à traiter est <strong>de</strong> mettre en forme manuellement chacun<br />

<strong>de</strong> vos fichiers.<br />

• Il faut que le fichier contenant <strong>les</strong> coordonnées <strong>de</strong>s extrémités du profil soit<br />

ouvert, soit nommé XY PK.xls, et possè<strong>de</strong> exactement la même structure que le<br />

fichier présenté Figure 3.<br />

• Si vous traitez <strong>de</strong>s fichiers en batch, il faut créer et ouvrir le fichier <strong>de</strong> synthèse<br />

que vous nommerez p_date_s.xls, avec la ligne <strong>de</strong> titre tel que présenté Figure<br />

5.<br />

c. Traitement <strong>de</strong>s <strong>profils</strong> en travers en fichier Excel<br />

Présentation<br />

Le principe est le même que présenté supra, sauf que le fichier en entrée est au format Excel<br />

et contient tous <strong>les</strong> <strong>profils</strong> en travers <strong>les</strong> uns à la suite <strong>de</strong>s autres.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 5


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

Figure 7 : Exemple <strong>de</strong> fichier xls contenant <strong>les</strong> <strong>profils</strong> en travers à traiter.<br />

Installation<br />

1. Ouvrir VBA dans Excel<br />

2. Copier le co<strong>de</strong> dans un module<br />

3. Nommer le module selon vos aspirations<br />

4. Fermer VBA<br />

5. Eventuellement rajouter un bouton dans Excel lié à la macro.<br />

6. Dans le menu Outils, allez dans Personnalisation puis dans l’onglet Comman<strong>de</strong>s et la<br />

catégorie Macros. Cliquez dans Bouton personnalisé et le faire glisser vers une barre<br />

d’outil. Ensuite par un clic droit <strong>sur</strong> le bouton faire Affecter une macro.<br />

Utilisation<br />

Ce programme s’exécute simplement en cliquant <strong>sur</strong> le bouton affecté à la macro ou en<br />

utilisant la fonction Executer une macro dans le menu Outils.<br />

Lors <strong>de</strong> l’exécution, vous <strong>de</strong>vrez saisir au fur et à me<strong>sur</strong>e la zone contenant <strong>les</strong> <strong>profils</strong>.<br />

PRECAUTIONS D’EMPLOI<br />

• Il faut modifier dans le co<strong>de</strong> le chemin pour le fichier x y z en sortie.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 6


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

• Si le(s) fichier xls en entrée n’est pas au format présenté Figure 7, alors il faut<br />

modifier le co<strong>de</strong> pour prendre en compte le format. Une autre solution si vous<br />

ne voulez pas rentrer dans le co<strong>de</strong> et que vous avez peu <strong>de</strong> fichiers à traiter est<br />

<strong>de</strong> mettre en forme manuellement chacun <strong>de</strong> vos fichiers.<br />

• Il faut que le fichier contenant <strong>les</strong> coordonnées <strong>de</strong>s extrémités du profil soit<br />

ouvert, soit nommé XY PK.xls, et possè<strong>de</strong> exactement la même structure que le<br />

fichier présenté Figure 3.<br />

Présentation<br />

d. Calcul du profil en long à partir <strong>de</strong>s <strong>profils</strong> en travers<br />

Ce programme prend en entrée un fichier .xls contenant un ensemble <strong>de</strong> <strong>profils</strong> en travers au<br />

format présenté Figure 5 et crée un fichier .xls, nommé pl_date_s.xls, contenant <strong>les</strong><br />

coordonnées et la côte du talweg. Le calcul s’effectue en prenant chaque point bas <strong>de</strong> profil en<br />

travers.<br />

Figure 8 : Exemple <strong>de</strong> fichier contenant le profil en long calculé à partir <strong>de</strong>s <strong>profils</strong> en travers.<br />

Installation<br />

1. Ouvrir VBA dans Excel<br />

2. Copier le co<strong>de</strong> dans un module<br />

3. Nommer le module selon vos aspirations<br />

4. Fermer VBA<br />

5. Eventuellement rajouter un bouton dans Excel lié à la macro.<br />

6. Dans le menu Outils, allez dans Personnalisation puis dans l’onglet Comman<strong>de</strong>s et la<br />

catégorie Macros. Cliquez dans Bouton personnalisé et le faire glisser vers une barre<br />

d’outil. Ensuite par un clic droit <strong>sur</strong> le bouton faire Affecter une macro.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 7


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

Utilisation<br />

Ce programme s’exécute simplement en cliquant <strong>sur</strong> le bouton affecté à la macro ou en<br />

utilisant la fonction Executer une macro dans le menu Outils.<br />

PRECAUTIONS D’EMPLOI<br />

• Il faut modifier dans le co<strong>de</strong> le chemin pour le fichier en sortie.<br />

• Si le(s) fichier xls en entrée n’est pas au format présenté Figure 5, alors il faut<br />

modifier le co<strong>de</strong> pour prendre en compte le format. Une autre solution si vous<br />

ne voulez pas rentrer dans le co<strong>de</strong> et que vous avez peu <strong>de</strong> fichiers à traiter est<br />

<strong>de</strong> mettre en forme manuellement chacun <strong>de</strong> vos fichiers.<br />

• Il faut que le fichier <strong>de</strong> synthèse nommé p_date_s.xls contenant <strong>les</strong><br />

coordonnées et <strong>les</strong> côtes <strong>de</strong> tous <strong>les</strong> <strong>profils</strong> en long soit ouvert.<br />

e. Comparaison <strong>de</strong>s <strong>profils</strong> en long<br />

Présentation<br />

Ce programme prend en entrée <strong>les</strong> fichiers <strong>de</strong> <strong>profils</strong> en long tel que présenté Figure 8 et<br />

implémente un fichier <strong>de</strong> synthèse mettant en relation tous <strong>les</strong> <strong>profils</strong> en long.<br />

Figure 9 : Fichier <strong>de</strong> comparaison <strong>de</strong>s <strong>profils</strong> en long<br />

Ce fichier permet <strong>de</strong> créer un graphe montrant l’évolution <strong>de</strong>s <strong>profils</strong>.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 8


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

Figure 10 : Graphe <strong>de</strong> comparaison <strong>de</strong>s <strong>profils</strong> en long<br />

Installation<br />

1. Ouvrir VBA dans Excel<br />

2. Copier le co<strong>de</strong> dans un module<br />

3. Nommer le module selon vos aspirations<br />

4. Fermer VBA<br />

5. Eventuellement rajouter un bouton dans Excel lié à la macro.<br />

6. Dans le menu Outils, allez dans Personnalisation puis dans l’onglet Comman<strong>de</strong>s et la<br />

catégorie Macros. Cliquez dans Bouton personnalisé et le faire glisser vers une barre<br />

d’outil. Ensuite par un clic droit <strong>sur</strong> le bouton faire Affecter une macro.<br />

Utilisation<br />

Ce programme s’exécute simplement en cliquant <strong>sur</strong> le bouton affecté à la macro ou en<br />

utilisant la fonction Executer une macro dans le menu Outils.<br />

Au fur et à me<strong>sur</strong>e vous <strong>de</strong>vrez saisir la date du profil en long à rajouter.<br />

PRECAUTIONS D’EMPLOI<br />

• Avant chaque ajout d’un profil en long, allez dans le co<strong>de</strong> et modifiez la cellule<br />

<strong>de</strong>stinée à contenir le nouveau profil.<br />

• Il faut que tous <strong>les</strong> fichiers <strong>de</strong>s <strong>profils</strong> en long à traiter soient ouverts. De même<br />

que le fichier en sortie, nommé compare_<strong>profils</strong>.xls, et contenant une première<br />

colonne pk (profil) avec la liste <strong>de</strong> tous <strong>les</strong> pk.<br />

• Si le(s) fichier xls en entrée n’est pas au format présenté Figure 5, alors il faut<br />

modifier le co<strong>de</strong> pour prendre en compte le format. Une autre solution si vous<br />

ne voulez pas rentrer dans le co<strong>de</strong> et que vous avez peu <strong>de</strong> fichiers à traiter est<br />

<strong>de</strong> mettre en forme manuellement chacun <strong>de</strong> vos fichiers.<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 9


Documentation <strong>de</strong>s <strong>programmes</strong> du SIG CAMARGUE<br />

B. Liste <strong>de</strong>s <strong>programmes</strong><br />

Titre Description Langage Type<br />

Trait_txt_multiple Crée un fichier Excel <strong>de</strong> VBA Excel Macro Excel<br />

points avec x y z à partir<br />

<strong>de</strong> <strong>profils</strong> sous forme <strong>de</strong><br />

fichiers txt<br />

Trait_f_xls<br />

Crée un fichier Excel <strong>de</strong> VBA Excel Macro Excel<br />

points avec x y z à partir<br />

<strong>de</strong> <strong>profils</strong> sous forme <strong>de</strong><br />

fichiers xls<br />

Calcul_profil_long Calcul le profil en long VBA Excel Macro Excel<br />

d’un talweg à partir <strong>de</strong><br />

<strong>profils</strong> en travers<br />

Compare_profil_long Met en relation <strong>de</strong>s<br />

<strong>profils</strong> en long pour<br />

comparaison <strong>de</strong>s altitu<strong>de</strong>s<br />

VBA Excel Macro Excel<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 10


Traitement profil travers txt<br />

C. Annexes : Co<strong>de</strong><br />

a. Traitement <strong>profils</strong> travers txt<br />

Le co<strong>de</strong> est ici.<br />

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

'programme <strong>de</strong> <strong>traitement</strong> <strong>de</strong> plusieurs fichiers txt <strong>de</strong> profil en 'travers<br />

'output: un fichier <strong>excel</strong> par profil en travers + un fichier <strong>de</strong> 'synthèse<br />

' en input <strong>les</strong> fichiers txt doivent avoir le même séparateur,<br />

' la même structure et la même entête<br />

' le fichier <strong>de</strong> synthèse doit être ouvert et le fichier XY PK aussi<br />

'<br />

'JULES FLEURY 10/10/02<br />

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

Dim date3 As String<br />

'procédure d'ouverture <strong>de</strong>s fichiers txt<br />

Sub trait_xf_txt()<br />

Dim QuelFichier()<br />

Dim StrNomFichier As String<br />

Dim StrNomFichier1 As String<br />

date3 = InputBox("Entrez la date <strong>de</strong> levé <strong>de</strong>s <strong>profils</strong>")<br />

QuelFichier = Application.GetOpenFilename(, , , , True)<br />

For Ctr = 1 To UBound(QuelFichier)<br />

StrNomFichier = QuelFichier(Ctr)<br />

'attention au séparateur dans le txt<br />

' ici comma<br />

Workbooks.OpenText Filename:=StrNomFichier, ConsecutiveDelimiter:=True,<br />

Tab:=False, Comma:=True, Space:=False<br />

'fin attention<br />

StrNomFichier1 = ActiveWorkbook.Name<br />

Call traittxt(StrNomFichier)<br />

Windows(StrNomFichier1).Close<br />

Next<br />

End Sub<br />

'procédure <strong>de</strong> <strong>traitement</strong> <strong>de</strong> chaque fichier txt<br />

Sub traittxt(nomf As String)<br />

Dim nom, nomfs, nomfs1 As String<br />

Dim chemin As String<br />

Dim date1 As String<br />

Dim pk As String<br />

Dim Zone, i As Range<br />

Dim c, d, e As Object<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 11


Traitement profil travers txt<br />

'selection <strong>de</strong>s données du profil<br />

Set Zone = Range("A1")<br />

Zone.CurrentRegion.Select<br />

' MsgBox ("Vous avez sélectionné la zone " & Selection.Address)<br />

Selection.Copy<br />

'création d'un nouveau fichier avec ces données<br />

Workbooks.Add<br />

'copie <strong>de</strong>s données et création <strong>de</strong> l'entête<br />

'attention à vérifier dans le txt la structure <strong>de</strong> l'entete<br />

' ici on commence à coller en B1<br />

Range("B1").Select<br />

ActiveSheet.Paste<br />

Application.CutCopyMo<strong>de</strong> = False<br />

'on extrait le nom du pk et on supprime la ligne d'entete<br />

pk = Mid(Cells(1, 2), 5, 5)<br />

Rows("1:1").Select<br />

Selection.Delete Shift:=xlUp<br />

'Rows("1:1").Select<br />

'Selection.Delete Shift:=xlUp<br />

'fin attention<br />

'création <strong>de</strong> l'entête<br />

Rows("1:1").Select<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Selection.Insert Shift:=xlDown<br />

Range("A1").Value = "rg"<br />

Range("A2").Value = "rd"<br />

Range("A3:B3").Select<br />

With Selection<br />

.HorizontalAlignment = xlCenter<br />

.VerticalAlignment = xlBottom<br />

.WrapText = False<br />

.Orientation = 0<br />

.AddIn<strong>de</strong>nt = False<br />

.In<strong>de</strong>ntLevel = 0<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 12


.ShrinkToFit = False<br />

.ReadingOr<strong>de</strong>r = xlContext<br />

.MergeCells = False<br />

End With<br />

Selection.Merge<br />

Range("A3").Value = "Zone geographique"<br />

Range("A4:B4").Select<br />

With Selection<br />

.HorizontalAlignment = xlCenter<br />

.VerticalAlignment = xlBottom<br />

.WrapText = False<br />

.Orientation = 0<br />

.AddIn<strong>de</strong>nt = False<br />

.In<strong>de</strong>ntLevel = 0<br />

.ShrinkToFit = False<br />

.ReadingOr<strong>de</strong>r = xlContext<br />

.MergeCells = False<br />

End With<br />

Selection.Merge<br />

Range("A4").Value = "Chute"<br />

Range("A5:B5").Select<br />

With Selection<br />

.HorizontalAlignment = xlCenter<br />

.VerticalAlignment = xlBottom<br />

.WrapText = False<br />

.Orientation = 0<br />

.AddIn<strong>de</strong>nt = False<br />

.In<strong>de</strong>ntLevel = 0<br />

.ShrinkToFit = False<br />

.ReadingOr<strong>de</strong>r = xlContext<br />

.MergeCells = False<br />

End With<br />

Selection.Merge<br />

Range("A5").Value = "Ouvrage"<br />

Range("A6:B6").Select<br />

With Selection<br />

.HorizontalAlignment = xlCenter<br />

.VerticalAlignment = xlBottom<br />

.WrapText = False<br />

.Orientation = 0<br />

.AddIn<strong>de</strong>nt = False<br />

.In<strong>de</strong>ntLevel = 0<br />

.ShrinkToFit = False<br />

.ReadingOr<strong>de</strong>r = xlContext<br />

.MergeCells = False<br />

End With<br />

Selection.Merge<br />

Range("A6").Value = "Profil"<br />

Range("C6").Value = pk<br />

Traitement profil travers txt<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 13


Range("A7:B7").Select<br />

With Selection<br />

.HorizontalAlignment = xlCenter<br />

.VerticalAlignment = xlBottom<br />

.WrapText = False<br />

.Orientation = 0<br />

.AddIn<strong>de</strong>nt = False<br />

.In<strong>de</strong>ntLevel = 0<br />

.ShrinkToFit = False<br />

.ReadingOr<strong>de</strong>r = xlContext<br />

.MergeCells = False<br />

End With<br />

Selection.Merge<br />

Range("A7").Value = "Levé"<br />

Range("C7").Value = date3<br />

Cells(8, 1) = "N° PT"<br />

Cells(8, 2) = "Distance"<br />

Cells(8, 3) = "cote"<br />

Cells(8, 4) = "x"<br />

Cells(8, 5) = "y"<br />

Cells(8, 6) = "pk"<br />

date1 = date3<br />

nom = "p_" & date3 & "_" & pk & ".xls"<br />

nomfs = "p_" & date3 & "_s" & ".xls"<br />

Traitement profil travers txt<br />

chemin = "c:\Documents and<br />

Settings\FLEURY\Bureau\sig_camargue\data\data_christelle\a traiter\f_<strong>excel</strong>\"<br />

ActiveWorkbook.saveas Filename:=chemin & nom, _<br />

FileFormat:=xlNormal, Password:="", WriteResPassword:="", _<br />

ReadOnlyRecommen<strong>de</strong>d:=False, CreateBackup:=False<br />

'affectation <strong>de</strong> la valeur du pk à la colonne pk"<br />

Set Zone = Range("B9")<br />

Set d = Cells(65536, Zone.Column).End(xlUp)<br />

Set e = d.Offset(0, 4)<br />

Set Zone = Range(Range("F9"), e.Address)<br />

Zone.Value = pk<br />

'selection <strong>de</strong>s coordonnées du pk<br />

Windows("XY PK.xls").Activate<br />

Set Zone = Range("E2:E617").Find(pk)<br />

Range(Zone.Offset(0, -4), Zone.Offset(0, -1)).Copy<br />

'copie <strong>de</strong>s coordonnées du pk<br />

Windows(nom).Activate<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 14


Range("B2").Select<br />

ActiveSheet.Paste<br />

Range("D2:E2").Select<br />

Application.CutCopyMo<strong>de</strong> = False<br />

Selection.Cut<br />

Range("B1").Select<br />

ActiveSheet.Paste<br />

'Calcul <strong>de</strong>s coordonnées <strong>de</strong> chaque point<br />

Traitement profil travers txt<br />

Range("D1").Select<br />

ActiveCell.FormulaR1C1 = _<br />

"=(R1C2-R2C2)/SQRT((POWER(R1C2-R2C2,2)+POWER(R1C3-R2C3,2)))"<br />

Range("d2").Select<br />

ActiveCell.FormulaR1C1 = _<br />

"=(R1C3 - R2C3)/SQRT((POWER(R1C2-R2C2,2)+POWER(R1C3-R2C3,2)))"<br />

'calcul <strong>de</strong> x<br />

Range("d9").Select<br />

ActiveCell.FormulaR1C1 = "=R2C2+RC[-2]*R1C4"<br />

Range("d9").Select<br />

ActiveCell.Copy<br />

Set e = d.Offset(0, 2)<br />

Set Zone = Range(Range("D9"), e.Address)<br />

Zone.Select<br />

ActiveSheet.Paste<br />

'calcul <strong>de</strong> y<br />

Range("E9").Select<br />

ActiveCell.FormulaR1C1 = "=R2C3+RC[-3]*R2C4"<br />

Range("e9").Select<br />

ActiveCell.Copy<br />

Set e = d.Offset(0, 3)<br />

Set Zone = Range(Range("E9"), e.Address)<br />

Zone.Select<br />

ActiveSheet.Paste<br />

ActiveWorkbook.Save<br />

'creation du fichier <strong>de</strong> synthese<br />

Windows(nom).Activate<br />

Set e = d.Offset(0, 4)<br />

Range(Range("A9"), e.Address).Copy<br />

Windows(nomfs).Activate<br />

Range("B1").Select<br />

Set d = Cells(65536, ActiveCell.Column).End(xlUp)<br />

Set e = d.Offset(1, -1)<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 15


Traitement profil travers txt<br />

e.Select<br />

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _<br />

:=False, Transpose:=False<br />

ActiveWorkbook.Save<br />

Windows(nom).Close<br />

End Sub<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 16


Traitement profil travers xls<br />

b. Traitement <strong>profils</strong> travers xls<br />

Le co<strong>de</strong> est ici.<br />

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

'<br />

' programme mettant en forme un fichier <strong>de</strong> <strong>profils</strong> en travers <strong>de</strong> type Excel<br />

' enregistré le 02/10/2002 par ju<strong>les</strong> fleury<br />

' Touche <strong>de</strong> raccourci du clavier: Ctrl+q<br />

'<br />

' en output on a un fichier par profil en travers et un fichier <strong>de</strong> synthèse <strong>de</strong><br />

' tous <strong>les</strong> <strong>profils</strong> en travers<br />

'<br />

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

Sub prof_xls()<br />

Dim nom, nomfs, nomfs1 As String<br />

Dim chemin As String<br />

Dim date1 As String<br />

Dim date2 As String<br />

Dim pk As String<br />

Dim Zone, i As Range<br />

Dim c, d, e As Object<br />

'selection <strong>de</strong>s données du profil<br />

'Set Zone = Application.InputBox("Sélectionnez le profil a traiter ! Y-compris l'entête",<br />

Type:=8)<br />

Set Zone = Application.InputBox("Sélectionnez la cellule Zone Geographique du profil a<br />

traiter ! ", Type:=8)<br />

Zone.CurrentRegion.Select<br />

'MsgBox ("Vous avez sélectionné la zone " & Selection.Address)<br />

'If (Zone Is Nothing) Then<br />

' MsgBox "vous <strong>de</strong>vez d'abord selectionner une zone"<br />

' Exit Sub<br />

'End If<br />

Selection.Copy<br />

'création d'un nouveau fichier avec ces données<br />

Workbooks.Add<br />

Range("A3").Select<br />

ActiveSheet.Paste<br />

Range("A1").Select<br />

Application.CutCopyMo<strong>de</strong> = False<br />

ActiveCell.FormulaR1C1 = "rg"<br />

Range("A2").Select<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 17


ActiveCell.FormulaR1C1 = "rd"<br />

Cells(8, 4) = "x"<br />

Cells(8, 5) = "y"<br />

Cells(8, 6) = "pk"<br />

Traitement profil travers xls<br />

date1 = Cells(7, 3)<br />

date2 = Mid(date1, 1, 2) & Mid(date1, 4, 2) & Mid(date1, 9, 2)<br />

nom = "p_" & date2 & "_" & Cells(6, 3) & ".xls"<br />

nomfs = "p_" & date2 & "_s" & ".xls"<br />

chemin = "c:\Documents and<br />

Settings\FLEURY\Bureau\sig_camargue\data\data_christelle\a traiter\f_<strong>excel</strong>\"<br />

ActiveWorkbook.saveas Filename:=chemin & nom, _<br />

FileFormat:=xlNormal, Password:="", WriteResPassword:="", _<br />

ReadOnlyRecommen<strong>de</strong>d:=False, CreateBackup:=False<br />

'affectation <strong>de</strong> la valeur du pk à la colonne pk"<br />

Set Zone = Range("A9")<br />

c = Zone<br />

Set d = Cells(65536, Zone.Column).End(xlUp)<br />

Set e = d.Offset(0, 5)<br />

Set Zone = Range(Cells(9, 1), d.Address).Offset(0, 5)<br />

Zone.Value = Cells(6, 3)<br />

pk = Range("C6").Value<br />

'pkval = Range("C6").Value<br />

'selection <strong>de</strong>s coordonnées du pk<br />

Windows("XY PK.xls").Activate<br />

'MsgBox "ouvrez le fichier XY PK.xls"<br />

'dlgAnswer = Application.Dialogs(xlDialogOpen).Show<br />

Set Zone = Range("E2:E617").Find(pk)<br />

Range(Zone.Offset(0, -4), Zone.Offset(0, -1)).Copy<br />

'Set Zone = Application.InputBox("Sélectionnez <strong>les</strong> coordonnées du pk " & pk, Type:=8)<br />

' MsgBox ("Vous avez sélectionné la zone " & Zone.Address)<br />

'Zone.Copy<br />

'copie <strong>de</strong>s coordonnées du pk<br />

Windows(nom).Activate<br />

Range("B2").Select<br />

ActiveSheet.Paste<br />

Range("D2:E2").Select<br />

Application.CutCopyMo<strong>de</strong> = False<br />

Selection.Cut<br />

Range("B1").Select<br />

ActiveSheet.Paste<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 18


Traitement profil travers xls<br />

'Calcul <strong>de</strong>s coordonnées <strong>de</strong> chaque point<br />

Range("D1").Select<br />

ActiveCell.FormulaR1C1 = _<br />

"=(R1C2-R2C2)/SQRT((POWER(R1C2-R2C2,2)+POWER(R1C3-R2C3,2)))"<br />

Range("d2").Select<br />

ActiveCell.FormulaR1C1 = _<br />

"=(R1C3 - R2C3)/SQRT((POWER(R1C2-R2C2,2)+POWER(R1C3-R2C3,2)))"<br />

'calcul <strong>de</strong> x<br />

Range("d9").Select<br />

ActiveCell.FormulaR1C1 = "=R2C2+RC[-2]*R1C4"<br />

Range("d9").Select<br />

ActiveCell.Copy<br />

Set Zone = Range(Cells(9, 1), d.Address).Offset(0, 3)<br />

Zone.Select<br />

ActiveSheet.Paste<br />

'calcul <strong>de</strong> y<br />

Range("E9").Select<br />

ActiveCell.FormulaR1C1 = "=R2C3+RC[-3]*R2C4"<br />

Range("e9").Select<br />

ActiveCell.Copy<br />

Set Zone = Range(Cells(9, 1), d.Address).Offset(0, 4)<br />

Zone.Select<br />

ActiveSheet.Paste<br />

ActiveWorkbook.Save<br />

'creation du fichier <strong>de</strong> synthese<br />

Windows(nom).Activate<br />

Range(Range("A9"), e.Address).Copy<br />

Windows(nomfs).Activate<br />

Range("A1").Select<br />

Set d = Cells(65536, ActiveCell.Column).End(xlUp)<br />

Set e = d.Offset(1, 0)<br />

e.Select<br />

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _<br />

:=False, Transpose:=False<br />

ActiveWorkbook.Save<br />

Windows(nom).Close<br />

End Sub<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 19


Calcul profil long<br />

c. Calcul <strong>profils</strong> long<br />

Le co<strong>de</strong> est ici.<br />

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

' procedure <strong>de</strong> calcul d'un profil en long<br />

' input: un fichier <strong>de</strong> points x y z pk <strong>de</strong>s <strong>profils</strong> en travers<br />

' output: un fichier x y z pk du profil en long<br />

' pour chaque pk, extrait le z minimum et le stocke dans<br />

' un nouveau fichier<br />

' Ju<strong>les</strong> FLEURY 10 10 02<br />

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

Sub calcproflong()<br />

Dim x, y, x1 As Object<br />

Dim min As Double<br />

Dim coordx As Double<br />

Dim coordy As Double<br />

Dim date1 As String<br />

Dim nomf As String<br />

Dim nomfpl As String<br />

' attention: le fichier input doit être ouvert et<br />

' s'appeler p_date_s.xls<br />

date1 = InputBox("saisissez la date du profil")<br />

nomf = "p_" & date1 & "_s.xls"<br />

nomfpl = "pl_" & date1 & "_s.xls"<br />

chemin = "c:\Documents and Settings\FLEURY\Bureau\sig_camargue\data\data_christelle\a<br />

traiter\f_<strong>excel</strong>\"<br />

Set x = Application.InputBox("Sélectionnez le 2eme pt du fichier, colonne pk! ", Type:=8)<br />

Set y = x.Offset(0, -3)<br />

'création du fichier <strong>de</strong> profil en long<br />

Workbooks.Add<br />

Set x1 = Range("A2")<br />

Range("C1").Value = "cote"<br />

Range("D1").Value = "x"<br />

Range("E1").Value = "y"<br />

Range("F1").Value = "pk"<br />

ActiveWorkbook.saveas Filename:=chemin & nomfpl, _<br />

FileFormat:=xlNormal, Password:="", WriteResPassword:="", _<br />

ReadOnlyRecommen<strong>de</strong>d:=False, CreateBackup:=False<br />

'recherche du z minimum<br />

Windows(nomf).Activate<br />

min = y.Offset(-1, 0).Value<br />

coordx = y.Offset(-1, 1).Value<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 20


Calcul profil long<br />

coordy = y.Offset(-1, 2).Value<br />

Do Until IsEmpty(x)<br />

If x.Row > 1 Then<br />

If x.Offset(-1, 0).Value = x.Value Then<br />

If y.Value < min Then<br />

min = y.Value<br />

coordx = y.Offset(0, 1).Value<br />

coordy = y.Offset(0, 2).Value<br />

End If<br />

End If<br />

If x.Offset(-1, 0).Value x.Value Then<br />

Rows(x.Row).Insert Shift:=xlDown<br />

x.Offset(-1, 0).Value = x.Offset(-2, 0).Value<br />

y.Offset(-1, 0).Value = min<br />

y.Offset(-1, 1).Value = coordx<br />

y.Offset(-1, 2).Value = coordy<br />

Rows(x.Offset(-1, 0).Row).Cut<br />

'copie du z minimum dans le fichier <strong>de</strong> profil en long<br />

Windows(nomfpl).Activate<br />

x1.Select<br />

ActiveSheet.Paste<br />

Set x1 = x1.Offset(1, 0)<br />

' clean du fichier input<br />

Windows(nomf).Activate<br />

x.Offset(-1, 0).Select<br />

Rows(Selection.Row).Delete Shift:=xlUp<br />

' réinitialisation à 20 m du z minimum<br />

min = 20<br />

End If<br />

End If<br />

Set x = x.Offset(1, 0)<br />

Set y = x.Offset(0, -3)<br />

Loop<br />

' <strong>traitement</strong> du <strong>de</strong>rnier profil en travers<br />

x.Value = x.Offset(-2, 0).Value<br />

y.Value = min<br />

y.Offset(0, 1).Value = coordx<br />

y.Offset(0, 2).Value = coordy<br />

Rows(x.Row).Cut<br />

Windows(nomfpl).Activate<br />

x1.Select<br />

ActiveSheet.Paste<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 21


'mise en forme du fichier <strong>de</strong> profil en long<br />

Columns("A:B").Select<br />

Selection.Delete Shift:=xlLeft<br />

Workbooks(nomfpl).Save<br />

End Sub<br />

Calcul profil long<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 22


d. Comparaison <strong>profils</strong> long<br />

Le co<strong>de</strong> est ici.<br />

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

' procedure <strong>de</strong> création d'un fichier avec tous <strong>les</strong> <strong>profils</strong> en long<br />

' pour toutes <strong>les</strong> dates<br />

' output: le fichier doit déjà exister et s'appelle ici compare_<strong>profils</strong><br />

' pk cote date1 cote date2 ...<br />

' pk1 z z ...<br />

' pk2 z z ...<br />

' en input il faut <strong>les</strong> fichiers <strong>de</strong> profil en long<br />

' à chaque <strong>traitement</strong> d'un fichier <strong>de</strong> profil en long il faut<br />

' incrémenter là ou c'est précisé dans le co<strong>de</strong><br />

'<br />

' ju<strong>les</strong> fleury 10 10 02<br />

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''<br />

Sub comp_pl()<br />

Dim nom1 As String<br />

Dim nom2 As String<br />

Dim x, y As Object<br />

Dim date1 As String<br />

Dim pk As String<br />

Dim cote As Double<br />

nom1 = "compare_<strong>profils</strong>.xls"<br />

date1 = InputBox("saisissez la date du profil à rajouter")<br />

nom2 = "pl_" & date1 & "_s.xls"<br />

'attention, incrémenter la colonne au fur et à me<strong>sur</strong>e<br />

'<strong>de</strong> l'ajout <strong>de</strong>s <strong>profils</strong><br />

Range("N1").Value = "cote " & date1<br />

' fin attention<br />

Windows(nom2).Activate<br />

Set x = Range("D2")<br />

Do Until IsEmpty(x)<br />

pk = x.Value<br />

cote = x.Offset(0, -3).Value<br />

Windows(nom1).Activate<br />

Set y = Range("A2")<br />

Do Until IsEmpty(y)<br />

If (y.Value = pk) Then<br />

'attention <strong>de</strong> bien incrémenter l'offset<br />

y.Offset(0, 13).Value = cote<br />

'fin attention<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 23


Windows(nom2).Activate<br />

End If<br />

Set y = y.Offset(1, 0)<br />

Loop<br />

Set x = x.Offset(1, 0)<br />

Loop<br />

End Sub<br />

Ju<strong>les</strong> Fleury / CEREGE 31/05/2011 24

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!