Macro Excel: Couper des donnees d'une cellule

[Résolu/Fermé]
Signaler
Messages postés
5
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
12 mai 2008
-
Messages postés
1
Date d'inscription
samedi 11 janvier 2014
Statut
Membre
Dernière intervention
11 janvier 2014
-
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>?

9 réponses

Messages postés
3014
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2012
400
Bonjour,

Il y a une menu qui permet de transformer du texte en colonnes (menu : data)
Messages postés
5
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
12 mai 2008

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
Messages postés
3014
Date d'inscription
jeudi 16 novembre 2006
Statut
Membre
Dernière intervention
23 janvier 2012
400
En 2 étapes, tu y arrives : une coupure à > et une coupure à <
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
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
Messages postés
5
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
12 mai 2008

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?
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181 >
Messages postés
5
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
12 mai 2008

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.
>
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020

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 ;-)
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
Messages postés
10509
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 octobre 2021
1 221
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.
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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
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.
Messages postés
10509
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 octobre 2021
1 221
Bonjour lermite222,
Merci pour la remarque.
Je sais aussi que le VBA est super.
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!
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
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..
Oui, dans T(1), il y a subsrcipt out of range

Mais, ce n'est pas une erreur de syntaxe, j'ai verifie...
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
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
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181 > Braco_Nico
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.
Messages postés
10509
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 octobre 2021
1 221 >
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020

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 ..!
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181 >
Messages postés
10509
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 octobre 2021

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...
Messages postés
10509
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 octobre 2021
1 221 >
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020

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.
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181 >
Messages postés
10509
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
25 octobre 2021

Aucun problème Le pingou, et tant mieux si cela a pu te servir.
A+
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181
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+
Messages postés
5
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
12 mai 2008

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!!!"
Messages postés
8700
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 181 >
Messages postés
5
Date d'inscription
lundi 28 avril 2008
Statut
Membre
Dernière intervention
12 mai 2008

ont fait s'qu'ont pneu
Messages postés
1
Date d'inscription
samedi 11 janvier 2014
Statut
Membre
Dernière intervention
11 janvier 2014

Bonjour,

Voici un fonction qui permet d'extraire une chaine dans une cellule comportant une liste de valeurs avec un séparateur :

Function ElementListe(chaine As String, separateur As String, position As Long) As String
'Fonction retournant une chaine provenant d'une liste de valeur avec un séparateur
' - Paramètre 1 : Chaine de caractère contenant la liste des valeurs
' - Paramètre 2 : Chaine ou caractère représentant le séparateur
' - Paramètre 3 : Position de la liste de la valeur à retourner
'@Auteur: Rémi Porcedda

' Variables
Dim tableau() As String

' Tableau recevant la liste de valeurs
tableau = Split(chaine, separateur)

' Retour en fonction de la position demandée
ElementListe = tableau(position - 1)

End Function

Elle permet d'utiliser la fonction "split" des macros Excel dans une formule.

Exemple :
La cellule A1 contient la chaine suivante : "valeur1;valeur2;valeur3"
Si la cellule A2 contient la formule "=ElementListe(A1;";";1)" le résultat va être "valeur1"

Bon courage.