Dispatcher une colonne vers deux onglets

st007

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Je cherche à répartir les données de la feuil1 dans les onglets Fluoro et Graphie

une future ligne est déterminée par la ligne comportant "Irradiation Event X-Ray Data" (ligne 38,98,158 par exemple et non régulier)
l'onglet de destination est déterminé par la ligne comportant "Irradiation Event type" (ligne 42,102,702)
fluoroscopy --->fluoro
vide ----->Graphie (série commençant en ligne 698, Graphie Lisse en ligne 705 par exemple)

Les colonnes de destination ne comporteront au final aucune unité

J'ai bien trouvé une macro (TEST), qui me remet mes données en ligne, mais je ne la comprends pas et donc ne suis pas capable de l'adapter, car il y a de petites différences dans les données et un décalage de colonne...

une autre approche ou une grosse lumière me serait d'un grand secours

merci d'avance....
 

Pièces jointes

  • Essai.xlsm
    291 KB · Affichages: 79
  • Essai.xlsm
    291 KB · Affichages: 81
  • Essai.xlsm
    291 KB · Affichages: 98

st007

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Bonjour,
> pour les " : ", j'avais essayé car je me doutais bien que le match servait à cela .
> pour la colonne irradiation " event type ", je l'ai effectivement rajouté, naïvement, je pensais que de l'ajouter dans la définition de l'array " (tabloTitres = Array(...) ", puisse suffire. Maintenant, s'il t'es plus " facile " de la mettre en colonne A, cela m'importe peu. Tant qu'elle apparaît.
> en effet, certains champs ont disparus au profit d'autres, le vrai fichier étant plus aéré (nombreuses lignes vide comme dans le bout d'exemple) pour des données similaires.

Comme le point essentiel de ce forum est la transmission de savoir, c'est aussi la méthode que j'essaie de comprendre plutôt que de prendre la solution toute faite et être incapable de la modifier. (j'en avais d'ailleurs ajouté deux) mais une fois défini, l'intitulé des colonnes sera figé et sa valeur toujours présente.

> Pour la date, (20151013102841.004) si on peut en sortir 20151013 10:28:41 ce serait parfait, par défaut, tronquer les 4 derniers caractères et récupérer " 20151013102841 "
> quand au remplacement du séparateur de décimale, comme j'utilise le point, il semble qu'en copiant la valeur, çà suffise.

Pour les 2 euro, j'espère aussi que la structure ne changera pas trop souvent ....
Commenter le code "a la Robert" est évidemment le must, bien qu'ici mon plus gros soucis est de récupérer la valeur situé x lignes sous l'intitulé.

Pour le post scriptum, j'ai alléger en effacent des lignes non significative pour la méthode de recueil des données, mais la présence de lignes vide est réelle.
d'où : 49 lignes entre "Irradiation Event X-Ray Data" et "Irradiation Event Type: Fluoroscopy"
mais 3 lignes entre "datetime started" et sa valeur
et 12 lignes entre les champs définis en array et leurs valeurs


j'en suis à étudier la faisabilité et la viabilité d'un code genre:
irrad.Offset(33, 0).Copy Destination:=f.Range(Cells(nouvLigne, 1))
irrad.Offset(49, 0).Copy Destination:=f.Range(Cells(nouvLigne, 2))
etc sur le nombre de colonnes à remplir
 

Modeste

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Re,

La façon de traiter l'info que j'avais utilisée était de définir, dans la variable de type Array, nommée tabloTitres, la liste des titres de colonnes de tes feuilles Fluoro et Graphie. Dans la version précédente, il y avait donc concordance exacte entre les titres dans:
- le tableau en mémoire (Array)
- les mentions à retrouver en colonne A de la Feuil1

Les titres eux-mêmes et leur ordre d'apparition doivent être identiques dans le Array et les titres des colonnes des 2 autres feuilles.
Si tu peux indiquer pour les deux feuilles (Fluoro et Graphie) en ligne 1, la liste des titres tels qu'ils apparaissent en colonne A de la Feuil1, on peut utiliser cette liste pour "garnir" tabloTitres. Dans ce cas aussi, réserver la colonne A au champ "Irradiation Event Type" serait plus simple. Les autres titres commenceront donc à partir de la colonne B.
Tu me suis jusque là?

Pour les dates, honnêtement, je ne sais pas ce qui est le mieux ... tout dépend ce que tu en fais par la suite!? Si tu les utilises pour des calculs, il me semble qu'il vaudrait mieux convertir les données en véritables dates (quitte à ce que tu utilises pour cette colonne, un format personnalisé si tu veux afficher sous la forme 20151013 10:28:41). Si tu "n'utilises" pas ces données, elles peuvent être extraites comme tu le souhaites.

Je ne remplacerai donc plus le '.' par ',' dans les autres valeurs.

Commenter "à la Robert", ça n'appartenait qu'à lui; je serais incapable d'en faire autant ... mais je "ferai mon possible" ;)

Pour les lignes à supprimer, je parlais de celles sous la ligne 338 (la "trace" d'anciennes valeurs a été conservée au-delà. Ctrl+End donne comme dernière cellule: B15365 ... la taille d'un fichier est en partie liée à ces "données fantômes").

En résumé, donne-nous les titres à chercher et dis-nous ce que tu préfères pour la date. Sur base de ça, je ferai une proposition commentée ... que tu testeras ensuite.
Je vais devoir m'absenter quelques heures, mais je repasse voir plus tard.
 

st007

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Bonsoir,
je remets un fichier pour montrer l'idéal de récupération,

j'ai bien sure toutes les données en colonne A uniquement, la disposition (en 2 colonnes graphie et fluoro) et les couleurs, la colonne D ne sont qu'illustration.

cependant, j'ai constater que certaines colonnes ne sont pas communes, mais indispensable

la colonne date me permet de trier par la suite ....

peut-on imaginer les tableau (array) pour certaines colonnes communes, et traiter les colonnes exceptionnelles par offset ?

ou bien tout par offset, reste à voir les délais d'exécution
 

Pièces jointes

  • Essaià.xlsm
    43.6 KB · Affichages: 31

Modeste

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

'soir :rolleyes:

Je ne peux pas répondre aux questions que tu poses sur la méthode, tant que je n'ai pas compris :(
Comme tu connais ton fichier, il y a sans doute des évidences pour toi qui sont de gros points d'interrogation entre mes oreilles à moi (là où certains ont des neurones! :D)

Pour programmer (ou pour trouver des formules adaptées), il faut trouver/comprendre les règles, les constances, sur lesquelles bâtir un schéma. J'en suis toujours à ce stade.

En comparant les feuilles Fluoro et Graphie de ton dernier envoi, force est de constater que dans chaque feuille, un titre est présent, qui ne l'est pas dans l'autre ("Pulse Rate" présent uniquement dans Fluoro <> "Distance Source to Detector" seulement visible en feuille Graphie.
Ce constat peut-il être considéré comme systématique? Si oui, on peut avancer d'un pas; si non, qu'est-ce qui peut être considéré comme élément récurrent?

Dans le même ordre d'idée, chaque titre de la feuille Fluoro est présent en colonne A de Feuil1 et chaque titre de Graphie est présent en colonne F de Feuil1.
Peut-on en déduire que, en Feuil1, dans chaque plage de cellules en colonne A "coincée" entre 2 mentions "Irradiation Event X-Ray Data" on trouvera soit tous les titres de la feuille Fluoro, soit tous les titres de la feuille Graphie? ... Et quand je dis tous, c'est chaque titre sans exception! ... ou alors il peut y avoir des "absents"? S'il y a des absents, on laisse le champ vide dans la feuille concernée, on affiche un message, on arrête le traitement parce qu'il ne peut s'agir que d'une erreur, on déclenche une alarme et on appelle les pompiers, etc.?

Vois-tu où est ma difficulté à moi?
 

st007

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

re,
Je comprends tout le sens de "tête dans le guidon", parfois même j'emploie "boule de cristal" ....
Ce constat peut-il être considéré comme systématique? Si oui .... absolument d'ou le "et traiter les colonnes exceptionnelles par offset"

et oui, tu peux déduire .... selon que 49 lignes après "Irradiation Event X-Ray Data" on a "fluoroscopy" tout les champs de la feuille fluoroscopie seront présents .

et oui, tu peux déduire .... selon que 49 lignes après "Irradiation Event X-Ray Data" on a "Stationary Acquisition" tout les champs de la feuille graphie seront présents .


je souligne que toutes ces données sont en colonne A à la queuleuleu et et dans l'ordre purement aléatoire .. je te perd là ...

je considère un "groupe de ligne" entre deux "Irradiation Event X-Ray Data"
soit 49 lignes plus bas on trouve "fluoroscopy" soit "Stationary Acquisition"
d'ou le :
If irrad.Offset(49, 0) Like "*Fluoroscopy*" Then
Set f = Sheets("Fluoro")
Else
Set f = Sheets("Graphie")
End If
 

klin89

XLDnaute Accro
Re : Dispatcher une colonne vers deux onglets

Bonsoir à tous, :)

Dans ton cas, on pourrait faire appel à la méthode ColumnDifferences pour parcourir toutes tes zones.
VB:
Sub test()
Dim r As Range, i As Long
    With Sheets("Feuil1").Columns("A")
        On Error Resume Next
        Set r = .ColumnDifferences( _
                .Find("Irradiation Event X-Ray Data", lookat:=xlWhole))
        On Error GoTo 0
        r.Select
    End With
    If Not r Is Nothing Then
        'on parcourt chaque zone
        For i = 2 To r.Areas.Count
            ''ton code
        Next
    End If
    Set r = Nothing
End Sub
klin89
 

Modeste

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Re²,
Salut klin89 :)

La suite (pour ma part) ce sera pour demain :rolleyes:

@klin89: je ne connais pas ColumnDifferences (et pas encore compris à quoi elle sert et comment l'utiliser ... ça aussi ce sera pour demain) donc, merci pour cette piste :) mais n'ai-je pas vu Excel 2013 and later?

See you tomorrow
 

Modeste

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Bonjour le fil et le reste du forum,

Désolé pour le retard: la mise à niveau vers Windows 10 a pris (beaucoup) plus de temps que je ne l'imaginais :eek:

En pièce jointe ton fichier (celui du message #14) avec le code inclus. Plus de commentaire que ce que j'ai fait, ce n'était pas possible :rolleyes:

Teste d'abord ce fichier-ci, pour vérifier si le résultat est conforme à tes attentes, puis fais l'essai avec une version un peu plus complète (pas tout de suite sur un fichier de plusieurs milliers de lignes!)


... et surtout, croise les doigts ;)
 

Pièces jointes

  • Dispatcher 2 onglets (st007).xlsm
    30.9 KB · Affichages: 35

st007

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Bonsoir,
j'ai croisé les doigts, j'ai regardé cette macro, et le match avec les en-têtes de colonnes, génial de simplicité, et le couperet tombe instantanément en cas d'absence.
pour faire court, je vais essayer d’approfondir quelques unes de tes lignes de code, vérifier sur quelques lignes supplémentaires en colonne A
64238 lignes donnent 53 Fluoro et 19 graphie, je vais bien devoir le faire .... au moins pour rendre hommage au temps que tu as passé sur cette macro.
 

st007

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Bonjour,

Comme je l'indiquais : "le couperet tombe instantanément en cas d'absence"
il semble que chez moi "on error resume next" n'aie aucune influence.

excel 2007 win xp

mais çà fonctionne parfaitement sur le même excel sous win 8.1
grrrrrrrr ....
 
Dernière édition:

st007

XLDnaute Barbatruc
Re : Dispatcher une colonne vers deux onglets

Comme google est notre amis .....


oh vénérable Modeste, ne cherches plus, le problème venait de microsoft visual basic sur mon xp, une case cochée
Capture plein écran 08122015.jpg
 

Statistiques des forums

Discussions
312 420
Messages
2 088 268
Membres
103 796
dernier inscrit
Adrien NCH