Extraire des données textes et les transformers
Résolu/Fermé
A voir également:
- Extraire des données textes et les transformers
- Extraire une video youtube - Guide
- Extraire son video - Guide
- Effacer les données de navigation - Guide
- Extraire image pdf - Guide
- Excel validation des données liste - Guide
4 réponses
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
2 avril 2015 à 18:54
2 avril 2015 à 18:54
Bonjour
Données sur une seule colonne ?
combien de lignes environ ?
D'avance merci
Données sur une seule colonne ?
combien de lignes environ ?
D'avance merci
Raymond PENTIER
Messages postés
58732
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
29 novembre 2024
17 247
2 avril 2015 à 18:57
2 avril 2015 à 18:57
Est-ce que les coordonnées ont toujours 3 décimales ?
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 3/04/2015 à 11:00
Modifié par michel_m le 3/04/2015 à 11:00
Bonjour,
proposition avec une macro VBA
Maquette:
https://www.cjoint.com/?3DdlmYjvZHg
Michel
proposition avec une macro VBA
Option Explicit
Const Lig_0 As Byte = 2 'A adapter au contexte
Const Col As String = "A" 'A adapter au contexte
'---------
Sub positionner_xy()
Dim Derlig As Byte
Dim Lettres As String, Cellule As Range, Lig As Byte, Lig_f As Byte
Dim Separ, Alpha As Byte, Xxx As String, Yyy As String
Dim test
Application.ScreenUpdating = False
Sheets(2).Columns(Col).Clear
Derlig = Sheets(1).Cells(Lig_0, Col).End(xlDown).Row
Lig_f = Lig_0
For Lig = Lig_0 To Derlig
Set Cellule = Sheets(1).Cells(Lig, Col)
If Cellule Like "*X*" And Cellule Like "*Y*" Then
' lettres de départ
Alpha = Alpha + 1
Lettres = car_col(Alpha)
'recherche coordonnées
Separ = Split(Cellule)
Xxx = Right(Separ(1), Len(Separ(1)) - 1)
Yyy = Right(Separ(2), Len(Separ(2)) - 1)
'concaténation et restitution
Sheets(2).Cells(Lig_f, Col) = Lettres & "= (" & Xxx & ", " & Yyy & ")"
Lig_f = Lig_f + 1
End If
Next
Sheets(2).Activate
End Sub
'------------
Function car_col(num As Byte) As String
Dim serie As Byte
Select Case num
Case Is = 0
car_col = "#########"
Case Is < 27
car_col = Chr(64 + num)
Case Else
serie = Int((num - 26) / 27) + 1
car_col = Chr(64 + serie) & Chr(64 + num - 26 * serie)
End Select
End Function
Maquette:
https://www.cjoint.com/?3DdlmYjvZHg
Michel
merci beaucoup le programme fonctionne en partie mais j'ai quelques problèmes
quand je teste l'exemple suivant il me prend dans la première ligne G64 en compte pour la valeur du X et le programme s'arrête a la lettre L
G0 G64 X424.719 Y25.467 A=DC(270) F9549 S11937 M3 M41 M8 M7 D1 H30=1
G0 Z101.3 M106 M22
G1 G64 X101.922 Y25.467
G1 X19.396 Y0.173
G2 X0 Y14.514 I=AC(15) J=AC(14.514)
G1 X0 Y67.5
G2 X10 Y77.5 I=AC(10) J=AC(67.5)
G1 X335.763 Y77.5
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y172.675
G0 G60 Z102
G0 X424.719 Y25.467 S15915
G0 Z100.8
G1 G64 X101.922 Y25.467
G1 X17.541 Y-1.334
G2 X-2 Y12.962 I=AC(13) J=AC(12.962)
G1 X-2 Y67.5 Z=IC(0.01)
G2 X8 Y77.5 I=AC(8) J=AC(67.5)
G1 X335.763 Y77.5 Z=IC(-0.01)
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y230.675
G0 G60 Z102
Cordialement
quand je teste l'exemple suivant il me prend dans la première ligne G64 en compte pour la valeur du X et le programme s'arrête a la lettre L
G0 G64 X424.719 Y25.467 A=DC(270) F9549 S11937 M3 M41 M8 M7 D1 H30=1
G0 Z101.3 M106 M22
G1 G64 X101.922 Y25.467
G1 X19.396 Y0.173
G2 X0 Y14.514 I=AC(15) J=AC(14.514)
G1 X0 Y67.5
G2 X10 Y77.5 I=AC(10) J=AC(67.5)
G1 X335.763 Y77.5
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y172.675
G0 G60 Z102
G0 X424.719 Y25.467 S15915
G0 Z100.8
G1 G64 X101.922 Y25.467
G1 X17.541 Y-1.334
G2 X-2 Y12.962 I=AC(13) J=AC(12.962)
G1 X-2 Y67.5 Z=IC(0.01)
G2 X8 Y77.5 I=AC(8) J=AC(67.5)
G1 X335.763 Y77.5 Z=IC(-0.01)
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y230.675
G0 G60 Z102
Cordialement
Raymond PENTIER
Messages postés
58732
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
29 novembre 2024
17 247
3 avril 2015 à 18:29
3 avril 2015 à 18:29
Bonjour eristof23.
J'ai une solution sans macro, mais la formule fait "usine à gaz" :
=CAR(63+LIGNE()) & "=(" & SI(ESTTEXTE(SIERREUR(TROUVE(" ";B2;6);"?"));"?";STXT(B2;2;SIERREUR(TROUVE(" ";B2;6);"(?)")-1)) & ", " & SI(ESTTEXTE(SIERREUR(TROUVE(" ";B2;6);"?"));"?"; STXT(B2:B18;SIERREUR(TROUVE(" ";B2;6);"?")+2;8)) & ")"
Dans le fichier joint, cette formule est en colonne G, avec les données en A.
https://www.cjoint.com/c/EDdsOLkEhOR
Mais dans les colonnes B:F j'ai laissé les calculs intermédiaires qui m'ont amené à la solution finale.
Cette formule a été rendue (inutilement) compliquée à cause des données non conformes, comme G0 Z0.15 et G0 Z53.5 !
Si toutes les données avaient la même structure que G0 X0.000 Y47.359 la formule aurait été beaucoup plus simple (colonne H) :
=CAR(63+LIGNE()) & "=(" & STXT(B2;2;TROUVE(" ";B2;6)-1) & ", " & STXT(B2;TROUVE(" ";B2;6)+2;8) & ")"
Cordialement.
J'ai une solution sans macro, mais la formule fait "usine à gaz" :
=CAR(63+LIGNE()) & "=(" & SI(ESTTEXTE(SIERREUR(TROUVE(" ";B2;6);"?"));"?";STXT(B2;2;SIERREUR(TROUVE(" ";B2;6);"(?)")-1)) & ", " & SI(ESTTEXTE(SIERREUR(TROUVE(" ";B2;6);"?"));"?"; STXT(B2:B18;SIERREUR(TROUVE(" ";B2;6);"?")+2;8)) & ")"
Dans le fichier joint, cette formule est en colonne G, avec les données en A.
https://www.cjoint.com/c/EDdsOLkEhOR
Mais dans les colonnes B:F j'ai laissé les calculs intermédiaires qui m'ont amené à la solution finale.
Cette formule a été rendue (inutilement) compliquée à cause des données non conformes, comme G0 Z0.15 et G0 Z53.5 !
Si toutes les données avaient la même structure que G0 X0.000 Y47.359 la formule aurait été beaucoup plus simple (colonne H) :
=CAR(63+LIGNE()) & "=(" & STXT(B2;2;TROUVE(" ";B2;6)-1) & ", " & STXT(B2;TROUVE(" ";B2;6)+2;8) & ")"
Cordialement.
merci Raymon mais la solution ne fonctionne pas avec l exemple suivant
G0 G64 X424.719 Y25.467 A=DC(270) F9549 S11937 M3 M41 M8 M7 D1 H30=1
G0 Z101.3 M106 M22
G1 G64 X101.922 Y25.467
G1 X19.396 Y0.173
G2 X0 Y14.514 I=AC(15) J=AC(14.514)
G1 X0 Y67.5
G2 X10 Y77.5 I=AC(10) J=AC(67.5)
G1 X335.763 Y77.5
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y172.675
G0 G60 Z102
G0 X424.719 Y25.467 S15915
G0 Z100.8
G1 G64 X101.922 Y25.467
G1 X17.541 Y-1.334
G2 X-2 Y12.962 I=AC(13) J=AC(12.962)
G1 X-2 Y67.5 Z=IC(0.01)
G2 X8 Y77.5 I=AC(8) J=AC(67.5)
G1 X335.763 Y77.5 Z=IC(-0.01)
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y230.675
G0 G60 Z102
Cordialement
G0 G64 X424.719 Y25.467 A=DC(270) F9549 S11937 M3 M41 M8 M7 D1 H30=1
G0 Z101.3 M106 M22
G1 G64 X101.922 Y25.467
G1 X19.396 Y0.173
G2 X0 Y14.514 I=AC(15) J=AC(14.514)
G1 X0 Y67.5
G2 X10 Y77.5 I=AC(10) J=AC(67.5)
G1 X335.763 Y77.5
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y172.675
G0 G60 Z102
G0 X424.719 Y25.467 S15915
G0 Z100.8
G1 G64 X101.922 Y25.467
G1 X17.541 Y-1.334
G2 X-2 Y12.962 I=AC(13) J=AC(12.962)
G1 X-2 Y67.5 Z=IC(0.01)
G2 X8 Y77.5 I=AC(8) J=AC(67.5)
G1 X335.763 Y77.5 Z=IC(-0.01)
G3 X345.763 Y87.5 I=AC(335.763) J=AC(87.5)
G1 X345.763 Y149.198
G1 X324.236 Y157
G1 X28 Y157
G2 X13 Y172 I=AC(28) J=AC(172)
G1 X13 Y230.675
G0 G60 Z102
Cordialement
Raymond PENTIER
Messages postés
58732
Date d'inscription
lundi 13 août 2007
Statut
Contributeur
Dernière intervention
29 novembre 2024
17 247
>
eristof23
4 avril 2015 à 03:53
4 avril 2015 à 03:53
Normal : cet exemple ne ressemble pas du tout à celui que tu nous as fourni pour travailler !
Si la prochaine fois tu nous envoies le résultat des courses à Longchamp, les voix obtenues aux dernières élections ou un poème de Victor Hugo, ça ne marchera pas non plus ...
mais tu m'as fait passer un certain temps sur ta demande, inutilement : c'est regrettable !
Si la prochaine fois tu nous envoies le résultat des courses à Longchamp, les voix obtenues aux dernières élections ou un poème de Victor Hugo, ça ne marchera pas non plus ...
mais tu m'as fait passer un certain temps sur ta demande, inutilement : c'est regrettable !
michel_m
Messages postés
16603
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2023
3 310
Modifié par michel_m le 4/04/2015 à 07:10
Modifié par michel_m le 4/04/2015 à 07:10
De même... et malheureusement fréquent par paresse:sous le thème "démerdez vous avec ça"
déclare test en byte
Mais c'est la dernière fois que je passerai du temps pour toi.
déclare test en byte
For test = 0 To UBound(Separ)
If Left(Separ(test), 1) = "X" Then Exit For
Next
Xxx = Right(Separ(test), Len(Separ(test)) - 1)
Yyy = Right(Separ(test + 1), Len(Separ(test + 1)) - 1)
Mais c'est la dernière fois que je passerai du temps pour toi.
2 avril 2015 à 19:40
exemple:
G0 X0.000 Y47.359
G0 Z0.15
G1 X0.000 Y47.359
G1 X-88.100 Y47.359
G1 X-88.100 Y62.359
G1 X-124.355 Y124.299
G1 X-123.216 Y249.163
G1 X-85.458 Y254.487
G1 X-65.188 Y266.190
G1 X-32.156 Y276.500 ;WAS 277.152
G1 X-17.904 Y296.471
G1 X-28.400 Y280.210
G1 X-29.900 Y146.729
G1 X-38.180 Y90.002
G1 X-76.127 Y93.094
G1 X-79.159 Y216.384
G0 Z53.5