Recuperer des donnees entre deux balises

Bonjour,

Je vous ecrit car j'ai un probleme qui malgres des jours de recherche n'arrive pas à etre réglé.

J'ai un fichier avec des donnees sur une seule colonne : nom, prenom, etc... et chaque personne (ainsi que ses infos) est séparée par une balise <MAJ>

j'aimerais pouvoir extraire les donnees situées entre ces balises et les mettre sur une seule ligne; qu'il n'y ait qu'une ligne par personne.

Merci

Bonjour,

Un exemple de traitement par macro

433exemple.xlsm (17.88 Ko)

A+

Merci pour la prompte réponse, c'est exactement ce que je cherchais.

Bon Week end

Bonjour,

Je me retrouve face à un nouveau problème !

Mon fichier a eu des données en plus donc il y a de nouvelles catégories qui s'ajoutent. J'ai rajouté ces catégories au code VBA (<DATE>, <MOTIF>, etc... ) mais quand il parcourt les données, VBA plante : "erreur d’exécution 13 : Incompatibilité de type" qui me mène a une erreur sur la ligne 6 :

For Each C In Range("A2:A" & Range("A" & Rows.Count).End(xlUp).Row)

If InStr(C, "<NOM>") > 0 Then

Ligne = Ligne + 1

il y a maintenant 31 colonnes qui continent des information pour un total de 492.000 lignes et je suis un peu perdu.


Les données du fichier partagent une "clé primaire" qui est la balise ID, j'aimerais ssavoir s'il est possible de regrouper sur une meme ligne les champs ayant le meme ID vu qu'ils se completent. Encore merci !

Bonjour,

Avec un fichier exemple, ce sera certainement plus facile de comprendre l'origine du dysfonctionnement.

A+

Bonjour, je ne peux pas envoyer le fichier, il est trop gros à l'envoie et lorsque je diminue le nombre de données, le code fonctionne. dans le premier exemple que j'ai envoyé, le code vba fonctionne parfaitement, je ne sais pas à quel niveau du fichier se situe le problème.

Je pense par contre que c'est parce que certaines cellules ont un trop grand nombre de caractères ce qui fait peut être bugger le code.

Bonjour,

t'as pas dû beaucoup chercher …

P'tite démonstration à partir du classeur joint initialement, auto-détection des colonnes et résultat en feuille 2 :

Sub Demo()
With Feuil2
    Application.ScreenUpdating = False
    .UsedRange.Clear
    R& = 2:  ReDim LT$(1 To 1)

    For L& = 2 To Feuil1.Cells(1).CurrentRegion.Rows.Count
           T$ = Feuil1.Cells(L, 1).Value
        If T = "<MAJ>" Then
           R = R + 1
        ElseIf Left(T, 2) <> "</" Then
               SP = Split(T, ">")
            If SP(1) > "" Then
                           T = Mid$(SP(0), 2)
                           C = Application.Match(T, LT, 0)
                If IsError(C) Then
                       N& = N& + 1:  ReDim Preserve LT(1 To N)
                    LT(N) = T:       C = N
                End If

                .Cells(R, C).Value = Split(SP(1), "<")(0)
            End If
        End If
    Next

    .Cells(1).Resize(, N).Value = LT
    .Cells(1).CurrentRegion.Columns.AutoFit
End With
End Sub

Rebonjour,

je suis juste nul sur EXcel, merci de prendre la peine de me répondre.

le nouveau code bloque : erreur d'execution '9' : l'indice n'appartient pas à la selection

Aucun souci de mon côté avec le classeur joint dans le post initial !

Et sans précision quant à la ligne déclenchant l'erreur …

Encore désolé de vous faire perdre votre temps,

voici une version tres allégée du fichier avec tous les types d'éléments. Le code bloque à la ligne 65, c'est la derniere information qui soit repertoriée.

392e-exple.xlsx (31.02 Ko)

Et oui, joindre un classeur loin de la réalité est une perte de temps surtout quand on est une quiche en Excel ‼

Mon code comportant moins de trente lignes, alors pour la 65ème, faudra repasser !

Sinon dans le nouveau classeur joint, la 65ème ligne ne bloque pas le code et vu que les données vont bien au delà !

Donc cela ne sert à rien de proposer une adaptation - fonctionnant déjà de mon côté - sans une présentation

enfin digne de ce nom : claire et exhaustive, avec tenants et aboutissants, en détaillant les cas particuliers, etc …

Rien ne presse car étant occupé pour le reste de la journée avec le projet de quelqu'un exprimant correctement ses besoins …

Bonjour, alors je recommence.

J'ai un problème qui est que j'ai des données dans une colonne du type :

<MAJ>

<NOM>AK MO </NOM>

<ADRESSE>Km 4,5 Bd du Centenaire de la Commune de Dakar (Ex Route de Rufisque) Bp: 1679</ADRESSE>

<CP>01000</CP>

<VILLE>DAKAR</VILLE>

<TEL1>33-33-33-33-3</TEL1>

<TEL2>77-77-77-77-7</TEL2>

<MAJ>

<NOM>GAS AB</NOM>

<ADRESSE>richard toll</ADRESSE>

<CP>01000</CP>

<VILLE>DAKAR</VILLE>

<TEL1>77</TEL1>

<COMMENT>CSS</COMMENT>

<MAJ>

Il me faudrait un code VBA pour mettre les données entre les balises dans des colonnes différentes selon la balise : <nom> <\nom>, <ID> <\ID>...

En plus de cela, les données sont stockées dans différents fichiers et ont pour "clé primaire" le champs <ID>, je voudrais que chaque information concernant un même <ID> soit renseignée sur la même ligne une fois toutes les données collées dans le même fichier.

le fichier total est trop gros pour l'envoie (30.000 lignes). le fichier ci joint est une compilation d'extrait des différents types de donnés.

182e-exple.xlsx (31.02 Ko)

Pas plus avancé …

Donc par exemple comme le premier nom n'a pas d'ID alors il ne faut pas l'incorporer dans le nouveau tableau ?

Sinon sans un effort d'explications détaillées … Joindre un classeur avec un résultat souhaité (titres des colonnes + données).

Marc L a écrit :

Donc cela ne sert à rien de proposer une adaptation - fonctionnant déjà de mon côté - sans une présentation

enfin digne de ce nom : claire et exhaustive, avec tenants et aboutissants, en détaillant les cas particuliers, etc …

Rien ne presse car étant occupé pour le reste de la journée avec le projet de quelqu'un exprimant correctement ses besoins …

Je vais réessayer.

A la base, j'ai trois fichier séparés :

  • une base de donnée administrative ,
  • une de documents
  • une de texte
qui ont pour point commun la balise <ID> que j'ai rassemblé dans un seul tableau.

EXEMPLE FICHER ADMIN

<MAJ>

<ID>23</ID>

<NUMDOSSIER>23</NUMDOSSIER>

<NOM>ABOURISK</NOM>

<PRENOM>NADIA</PRENOM>

<SEXE>1</SEXE>

<NELE>11/03/1950</NELE>

<ADRESSE>Dakar</ADRESSE>

<TEL1>33-82-28-95-8</TEL1>

<INSEE>25003</INSEE>

<SITFAM>14</SITFAM>

<MAJ>

exemple fichier image

<MAJ>

<ID>23</ID>

<MEDECIN>1</MEDECIN>

<DATE>10/03/2014</DATE>

<TITRE>RES GLYCEMIE</TITRE>

<PJ>\DOCUMENT\0\im40258.GIF</PJ>

<MAJ>

exemple fichier ANTE

<MAJ>

<ID>23</ID>

<TYPE>2</TYPE>

<LIBELLE>Antécédents Médicaux</LIBELLE>

<TEXTE>{\rtf1\ansi\ansicpg1252\deff0\deflang1036{\fonttbl{\f0\fswiss\fprq2\fcharset0 MS Sans Serif;}{\f1\fswiss\fprq2\fcharset0 MS Reference Sans Serif;}{\f2\fswiss\fprq2 MS Sans Serif;}}

{\colortbl ;\red0\green0\blue0;}

\viewkind4\uc1\pard\f0\fs17 HTA\cf1\fs18 \cf0\b\f1\u8594? \cf1\b0\f0 Blokium \b\f1 = \b0\f0 1/2 cp\f2\par

\pard\f0 Arthrose cervicale\cf0\fs17\par

}

</TEXTE>

<MAJ>

Je dois importer les données et rapprocher manuellement dans un nouveau logiciel les personnes et leurs images.

J'aurais besoin en gros que toute les données situées entre les balises MAJ (c'est à dire correspondant à une personne ou à une image ou un texte) soient sur une seule ligne (code que vous m'avez posté) et que les champs comportant le meme ID puissent se greffer à la suite (pas de doublons d'ID). Je ne sais pas si c'est assez clair.

Le code s’interrompt lorsque j'y mets toutes les données mais fonctionne parfaitement sur les petites listes d'exemple.

L’idéal serait d'avoir un tableau ayant pour intitulés de colonnes les noms des balises :

ID NOM PRÉNOM NOM JEUNE FILLE NE LE SEXE ADRESSE BP VILLE TEL 1 TEL 2 FAX EMAIL COMMENT NUM DOSSIER PROFESSION SITFAM IMAGES ANTÉCÉDENTS

Est ce assez explicite ?

Partiellement et là ce n'est plus la demande initiale …

Si quelqu'un veut s'y coller, sans souci !

Rechercher des sujets similaires à "recuperer donnees entre deux balises"