Aller à la ligne suivant le model

freha15

XLDnaute Nouveau
Bonjour,

Je suis nouveau sur le forum, Merci pour le travail que vous faites.
Je sollicite votre aide, aux experts d’Excel, je suis Géomètre, dans le cadre de mon travail je dois transformer mes fichiers mesures terrain suivant le model ci-joint :
-Mettre toutes les données en colonne sur la même ligne.
-Aller à la ligne à chaque fois qu’il aura un 5= (Comme sur le model).

Ci-joint les deux fichiers :

Je vous remercie par avance pour votre aide.
 

Pièces jointes

  • fichier terrain.xlsx
    12.5 KB · Affichages: 68
  • modél.xlsx
    14.1 KB · Affichages: 63

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Bonjour,

Merci beaucoup pour votre aide.

J'ai ouvert votre fichier, c'est exactement le tableau que je je souhaite obtenir.

Par contre je ne trouve pas la formule, vous serait il possible de me la commuquer?

En vous remerciant par avance.
 

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Bonjour,
Merci Dranreb, ta solution m'a beaucoup aider.
Pour généraliser cette solution à tous mes fichiers, je dois apporter une modification. Je reviens vers vous pour une aide:

Voir le tableau pour le détail.

je vous remercie par avance.

Cordialement.
 

Pièces jointes

  • Freha15 - Copie.xls
    127.5 KB · Affichages: 39

Dranreb

XLDnaute Barbatruc
Re : Aller à la ligne suivant le model

Bonjour.
Comme ça ça a l'air de donner le bon résultat :
VB:
Option Explicit

Private Sub Worksheet_Activate()
Dim Te(), Le&, Ts(), Ls&, Spl$(), Code&, Cs&, Fusion As Boolean
Te = FSrc.[A1].Resize(FSrc.Cells(FSrc.Rows.Count, "A").End(xlUp).Row).Value
ReDim Ts(1 To 5000, 1 To 8)
For Le = 1 To UBound(Te): Code = Split(Te(Le, 1), "=")(0)
   Select Case Code
      Case 50, 2, 5: GoSub Fusionner: Ls = Ls + 1: Cs = 1
      Case 7 To 9: Cs = Code - 7 + 2
      Case 17 To 18: Cs = Code - 17 + 5: Fusion = True
'      Case 24 To 25: Cs = Code - 24 + 7
      Case Else: GoTo S: End Select
   Ts(Ls, Cs) = Te(Le, 1)
S: Next Le
GoSub Fusionner
Me.Cells.ClearContents
Me.[A1].Resize(Ls, 4).Value = Ts
Exit Sub
Fusionner: If Fusion Then
   Ts(Ls - 1, 2) = "7=" & Trim$(Str((VCodée(Ts(Ls, 5)) + 200 + VCodée(Ts(Ls - 1, 2))) / 2))
   Ts(Ls - 1, 3) = "8=" & Trim$(Str((400 - VCodée(Ts(Ls, 6)) + VCodée(Ts(Ls - 1, 3))) / 2))
   Ts(Ls - 1, 4) = "9=" & Trim$(Str((VCodée(Ts(Ls, 4)) + VCodée(Ts(Ls - 1, 4))) / 2))
   Ls = Ls - 1: Fusion = False: End If: Return
End Sub
Private Function VCodée(ByVal Z As String) As Double
VCodée = Val(Mid$(Z, InStr(Z, "=") + 1))
End Function
Je suis quand même étonné qu'il faille le garder sous cette forme inexploitable numériquement. Ce serait tout de même bête de continuer à faire cette gymnastique pas possible exprès pour le garder sous cette forme, alors qu'en fait il s'avérerait que ça vous gêne en réalité pour la suite ! Les 7= 8= 9= pourraient être mis en titre, une colonne supplémentaire pour le code= variable de la 1ère colonne (la 2 du coup), et partout ailleurs des valeurs numériques bon sang !
 

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Bonjour,

Merci beaucoup Dranreb pour votre aide, je suis trop content c'est le résultat que je souhaitais.

Une dernière chose, pourrait-il supprimer une ligne SVP dans le résultat? (Ligne rouge dans l'anglet transformé)

Voir le tableau pour le détail.

je vous remercie par avance.

Cordialement.
 

Pièces jointes

  • LIMEIL.xls
    104.5 KB · Affichages: 36

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Bonjour Dranreb,

Pour répondre à votre question concernant l'exploitation des ces données.
En faite ces données doivent être sous cette forme pour qu'elles soient exploitable par mon logiciel de calcul après les avoir transformer en .txt

Merci beaucoup.

Cordialement.
 

Dranreb

XLDnaute Barbatruc
Re : Aller à la ligne suivant le model

À défaut de m'expliquer, pour satisfaire ma curiosité, à quoi sert ce bizarre document chargé de données numériques inexploitables en tant que tel, vous pourriez quand même essayer de comprendre le code, et chercher comment résoudre le problème vous même.
En modifiant le Case 50, 2, 5 comme suit, par exemple, il ne tiendrait plus compte de ceux qui portent un point :
VB:
Case 50, 2, 5: GoSub Fusionner
         If InStr(Te(Le, 1), ".") Then GoTo S
         Ls = Ls + 1: Cs = 1

Edit: Ah, je n'ai rien dit, je n'avais pas vu votre dernier message expliquant en partie la chose.
 

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Merci Dranreb pour votre réactivité.

Pour compléter ma réponse à votre question:

Toutes ces données numériques = données géographiques mesurées pour chaque point sur le terrain avec les appareils de Géomètre.
7=angle horizontal
8=angle vertical
9=distance

Comme je vous l'ai dis précédemment. Nos logiciels de calcul tiennent compte de ces codes.

Cordialement.
 

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Merci Dranreb pour votre réactivité.

Pour compléter ma réponse à votre question:

Toutes ces données numériques = données géographiques mesurées pour chaque point sur le terrain avec les appareils de Géomètre.
7=angle horizontal
8=angle vertical
9=distance

Comme je vous l'ai dis précédemment. Nos logiciels de calcul tiennent compte de ces codes.

Cordialement.
 

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Bonjour Dranreb,

Je me permets de revenir vers vous pour une dernière fois j’espère.

Est-il possible de changer la macro pour avoir le résultat sous forme d'une même cellule (fusionner les cellules 5=1 7= 8= 9= 17= 18= 19= 24= 25=) avec un espace entre chaque code.

Je vous remercie par avance.

Cordialement.
 

Pièces jointes

  • MODEL.xls
    96.5 KB · Affichages: 39
  • MODEL.xls
    96.5 KB · Affichages: 37
  • MODEL.xls
    96.5 KB · Affichages: 36

Dranreb

XLDnaute Barbatruc
Re : Aller à la ligne suivant le model

Bonjour.
Ça fait tout réécrire parce que ça ne vaut plus le coup de garder en non numérique le tableau principal puisqu'il ne sera plus le reflet de ce qu'on doit sortir. Mais il y a deux choses que je ne comprends pas: d'abord actuellement on ne sort plus les >9 puisque les 17 18 sont maintenant combinés aux 9 8 et qu'il n'y en a pas de >18 dans votre exemple. Ensuite pourquoi je n'y retrouve pas le code proposé en #9 qui éliminait les 50, 2 et 5 suivis d'un nombre contenant un point, ce qui coïncidait avec des lignes où ils étaient isolés et que vous disiez au #7 ne pas vouloir ?
 

freha15

XLDnaute Nouveau
Re : Aller à la ligne suivant le model

Bonjour Dranreb,

Vous avez raison, on ne sort plus les >9 puisque les 17 18 sont maintenant combinés aux 9 8 et qu'il n'y en a pas de >18 dans mon exemple.

En appliquant le code proposé en #9 qui éliminait les 50, 2 et 5 suivis d'un nombre contenant un point, ça ne me convient pas. En faite je veux juste éliminer le 5 suivait d'un nombre contenant un point.

Est-il possible de changer la macro pour avoir le résultat sous forme d'une même cellule avec un espace entre chaque code.

Exemple:

50=LIMEIL
2=5034.1
5=1 7=365.47613 8=92.028095 9=17.0794
5=12 7=201.35715 8=92.673285 9=17.92705
5=2 7=365.328345 8=91.229025 9=16.7144

Je vous remercie par avance.

Cordialement.
 

Pièces jointes

  • MODEL.xls
    96.5 KB · Affichages: 34
  • MODEL.xls
    96.5 KB · Affichages: 35
  • MODEL.xls
    96.5 KB · Affichages: 34

Dranreb

XLDnaute Barbatruc
Re : Aller à la ligne suivant le model

Oui ça doit être possible. Suite à toutes vos demandes, vous avez à présent suffisamment d'exemples de codes vous montrant comment on les résout pour pouvoir en écrire un qui convient exactement à vos besoins.
 

Discussions similaires

Réponses
3
Affichages
1 K