Rechercher : dans
Par :

Macro Excel: Couper des donnees d'une cellule

Dernière réponse le 1 mai 2008 à 13:50:02 Braco_Nico, le 28 avr 2008 à 15:59:31 
 Signaler ce message aux modérateurs

Bonjour,
J'ai un fichier excel dans lequel une cellule regroupe toutes mes donnees.
Je souhaiterais extraire une partie de celle-ci.
ex du contenu de la cellule :
"BLABLABLABLABLABLA <READINGS>123 456 789</READINGS> BLABLABLABLABLABLA"
La partie qui m'interresse est "123 456 789".

Quelqu'un pourrait il donner un exemple de macro a utiliser pour ne garder que les donnees comprises dans la partie <READINGS>....</READINGS>?

Configuration: Windows XP
Internet Explorer 7.0

Meilleures réponses pour « Macro Excel: Couper des donnees d'une cellule » dans :
[Excel] Colorer des cellules sur conditions VoirIl existe dans Excel des fonctions très pratiques mais peu connues et peu utilisées. Exemple : vous souhaitez qu'une cellule se colore automatiquement en rouge (ou autre mise en forme de police, de bordure, de trame) selon une condition : un...

1

Ajbol, le 28 avr 2008 à 16:04:07

Bonjour,

Il y a une menu qui permet de transformer du texte en colonnes (menu : data)

Répondre à Ajbol

2

Braco_Nico, le 28 avr 2008 à 16:11:09

Oui, je sais mais dans cette cellule, j'ai beaucoup de donnes innutiles.
Je dois donc garder seulement la partie interressante.
C'est pourquoi, je pensais a l'utilisation d'une macro

Merci

Répondre à Braco_Nico

3

Ajbol, le 28 avr 2008 à 16:13:19

En 2 étapes, tu y arrives : une coupure à > et une coupure à <

Répondre à Ajbol

4

lermite222, le 28 avr 2008 à 16:14:37

Bonjour,
Une solution parmi d'autre

Sub Macro1()
dim T
    sheets("Feuil1").Activate
    T = Split(Range("D1").Text, "READING", -1)
    'La clé dans T(1)
    T(1) = Mid(T(1), 2, 11)
End Sub

A+
PS: pour autant que le clé ai toujours la même longueur, sinon..
Sub Macro2()
dim T, D
    sheets("Feuil1").Activate
    T = Split(Range("D1").Text, "<", -1)
    D = Split(T(1), "\>, -1)
    'La clé dans D(0)
End Sub

Répondre à lermite222

5

Braco_Nico, le 28 avr 2008 à 16:35:40

Merci pour vos reponse,
le probleme est que j'obtiens une erreur du type "Subsript out of range"
Cela vient-il du fait que ma cellule contient trop de donnees?

Répondre à Braco_Nico

6

lermite222, le 28 avr 2008 à 18:42:26

Si tu à fait une macro, met le texte dans un poste.

PS: Bien entendu il faut adapter les macros présentées avec les noms de TES feuilles et l'adresse de ta cellule.

Répondre à lermite222

7

Braco_Nico, le 29 avr 2008 à 11:35:48

Je m'excuse car mes connaissance de VBA sont tres limitees
J'ai adapte la macro a mon besoin (nom de ma cellule et de la feuille)

Peux tu m'expliquer ce qu'est un "Poste"? J'ai mis le code dans une fenetre Microsoft VBA liee a mon fichier excel
Aussi, qu'est ce que la fonction "T(1) = Mid(T(1), 2, 11)"?

Merci d'avance. J'espere que j'y arriverai avec ton aide ;-)

Répondre à Braco_Nico

8

Braco_Nico, le 29 avr 2008 à 16:26:56

Si j'ai bien compris ta solution, on supprime la partie avant < et apres \>.
Apres tentative de modification, voici le resultat :

Sub Macro3()
Dim T, D
Sheets("Sheet3").Activate
T = Split(Range("A1").Text, "<READINGS>", -1)
D = Split(T(1), "</READINGS>", -1)
'La clé dans D(0)
End Sub

En gros, dans la cellule A1, je garde la partie situee entre <READINGS> et </READINGS>... C'est ce que je voudrais faire du moins! Car aucun changement n'apparait, je suppose qu'il faut coller D(0) dans une autre cellule mais comment???

Est ce que ma modification te parais juste?

Merci

Répondre à Braco_Nico

9

Le Pingou, le 29 avr 2008 à 22:50:17

Bonsoir,
Il est possible de le faire avec les fonctions à dispositions.
Votre texte ("BLABLABLABLABLA.......") se trouve dans la cellule "A2".
Vous mettez dans la cellule "B2" cette formule :
=STXT(A2;CHERCHE(">";A2;1)+1;CHERCHE("</";A2;1)-CHERCHE(">";A2;1)-1)
et le résultat sera : 123 456 789.

Salutations.
Jean-Pierre

Répondre à Le Pingou

10

Braco_Nico, le 30 avr 2008 à 10:16:33

Merci de votre reponse,
Le fait est que ma cellule contient enormement de caractere de ce types "< ou > ...." puisqu'elle est le resultat d'une importation de fichier xml (Il s'agit donc de nombreuses balises)

Mes donnees a recuperer sont comprises dans les balises <READINGS>.....</READINGS>
De plus, j'ai essaye votre solution mais elle ne fonctionne pas...

C'est pourquoi, j'aimerai automatiser l'exraction de ces donnees par une Macro VBA

Cordialement

Répondre à Braco_Nico

11

lermite222, le 30 avr 2008 à 10:24:14

Bonjour,
Pour Le pingou, je sais que beaucoups de fonctions peuvent êtres résolues par formules dans les feuilles, mais c'est charger les fichiers quelques fois de facon astronomique, alors qu'avec le VBA ce n'est écrit qu'une fois.

Pour Braco-nico, effectivement la réponse est dans D(0) et pour la sortie tu peu ajouter dans la macro...

    Sheets("Sheet3").Range("C2").Value = D(0)


Sinon, pour suivre la progression d'une macro...
1°) Mettre le curseur à l'intérieur de la macro.
2°) taper F8 , la macro débute, la première ligne est surlignée en jaune.
ensuite à chaque fois que tu tape F8, la macro avance d'une instruction, quant une instruction à été exécutée tu peu promené la souris sur une variable et une bulle apparaît avec sa valeur, ce qui permet de vérifier.
A+

PS: je vient de lire ton dernier poste (réponse) où tu dit qu'il y à de nombreux signes identique, tu peu affiner la recherche en mettant des critères plus précis tel que <READING> dans le premier test et <\READING> dans le second
ensuite tu peu incérer ces formules dans une boucle For/next pour l'exécuter sur un grand nombre de cellules.

Répondre à lermite222

12

Le Pingou, le 30 avr 2008 à 10:35:02

Bonjour lermite222,
Merci pour la remarque.
Je sais aussi que le VBA est super.
Salutations.
Jean-Pierre

Répondre à Le Pingou

13

Braco_Nico, le 30 avr 2008 à 10:53:18

Merci lermite222,
Ca fonctionne parfaitement pour une version raccourcie de ma cellule.
Par contre, j'obtiens toujours une erreur quand je l'execute sur une cellule complete
Run Time Error '9'
Subscript out of range

Cette erreur parvient lors de l'instruction "Sheets("Sheet3").Range("C2").Value = D(0)"
Je crois que le nombre de donnees du type "123 456 789" est tres important.

Aurais tu une idee? genre decouper la cellule...

Merci encore pour vos reponses precieuses.
Bien joue pour le pas a pas, tres utile!

Répondre à Braco_Nico

14

lermite222, le 30 avr 2008 à 11:07:23

Run Time Error '9'
veux dire qu'il n'a pas trouvé l'occurence 0 du tableau D et donc que D(0) n'existe pas, vérifie tes balises, voit pour majuscule minuscule \ ou / etc.., Ca doit être juste.
Qu'y a-t-il dans T(1) ? , en principe il devrait y avoir...
123 456 789</READINGS> BLABLABLABLABLABLA
Tu dit..

Répondre à lermite222

15

Braco_Nico, le 30 avr 2008 à 11:16:40

Oui, dans T(1), il y a subsrcipt out of range

Mais, ce n'est pas une erreur de syntaxe, j'ai verifie...

Répondre à Braco_Nico

16

lermite222, le 30 avr 2008 à 11:28:30

Fait une autre macro pour tester...

Sub Macro3()
dim Txt as string, L as long
    sheets("Sheet3").Activate
    Txt = Range("A1").Text
    L = len(Txt) 'la longueur du texte de la cellule
End Sub


Quand la ligne en jaune est sur End Sub, met ta souris sur le L et dit-moi quel est le nombre que tu vois ?
Si pas possible de lire..
Dans la fenêtre en dessous (Execution) tu tape..
Print L , et tu tape Enter

Répondre à lermite222

17

Braco_Nico, le 30 avr 2008 à 12:01:18

J'obtiens L=1024

Répondre à Braco_Nico

18

lermite222, le 30 avr 2008 à 12:09:55

OK, si le contenu de ta cellule n'est pas confidentiel affiche la, sinon éventuellement me la communiqué par MP, pour que je puisse tester, car cela devrait fonctionner.

Répondre à lermite222

19

Le Pingou, le 30 avr 2008 à 17:43:25

Bonjour,
J'ai vu en passant les différents postes et il me semble que la variable "D" n'est pas défini comme tableau et je pense que si vous avez cette instruction : Sheets("Sheet3").Range("C2").Value = D(0) il doit se produire une erreur ..!
Salutations.
Jean-Pierre

Répondre à Le Pingou

20

lermite222, le 30 avr 2008 à 19:04:38

Bonjour le pingou,
du fait de créer une variable en 'VARIANT' la fonction déclarée crée un tableau ... Voir ton aide a ce sujet...

Répondre à lermite222

21

Le Pingou, le 30 avr 2008 à 21:51:43

Bonsoir lermite222,
Merci infiniment de votre réponse et j'en ai profité en découvrant la fonctionalité de la fonction "Split".
Excusez-moi de vous avoir dérangé pour rien.
Bonne fin de semaine.
Salutations.
Jean-Pierre

Répondre à Le Pingou

23

lermite222, le 1 mai 2008 à 12:41:46

Aucun problème Le pingou, et tant mieux si cela a pu te servir.
A+

Répondre à lermite222

22

lermite222, le 1 mai 2008 à 11:50:09

Bonjour,
Tu peu dire que tu m'a fait transpirer, il ressort qu'il est impossible d'assigner une variable plus longue que 1024 dans une cellule, j'ai essayé avec le presse papier mais le problème est le même, donc seule solution que j'ai trouvé c'est de la découpé et de la mettre dans plusieur cellules, j'ai mis en colonne mais si ca t'arrange tu peu les mettre en ligne.
Si un autre intervenant a la solution....

Sub Macro3()
Dim T, D
Dim i As Integer, e As Integer

    Sheets("Feuil1").Activate
    T = Split(Range("A1").Value, "<READINGS>", -1)
    D = Split(T(1), "</READINGS>", -1)
    'La clé dans D(0)
    'La variable est trop longue pour l'assigner directement dans une cellule
    'Max = 1024
    'La découper et mettre dans plusieur cellules.
    e = 1
    For i = 1 To Len(D(0)) Step 1024
        Cells(2 + e, 5).Value = Mid(D(0), i, 1024)
        e = e + 1
    Next i
End Sub

A+

Répondre à lermite222

24

Braco_Nico, le 1 mai 2008 à 13:46:52

Salut lermite222 et un GRAND MERCI a toi,
J'ai essaye et ca fonctionne tres bien... Je vais me debrouiller pour la suite.

Je n'ai que deux mots a dire : "T'assure Chaussure!!!"

Répondre à Braco_Nico

25

 lermite222, le 1 mai 2008 à 13:50:02

Ont fait s'qu'ont pneu

Répondre à lermite222
Collection CommentÇaMarche.net