Macro Excel: Couper des donnees d'une cellule
Résolu
Braco_Nico
Messages postés
5
Date d'inscription
Statut
Membre
Dernière intervention
-
mimosa@rp Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
mimosa@rp Messages postés 1 Date d'inscription Statut Membre Dernière intervention -
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>?
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>?
A voir également:
- Couper la valeur d'une cellule
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
9 réponses
Bonjour,
Une solution parmi d'autre
A+
PS: pour autant que le clé ai toujours la même longueur, sinon..
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
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 ;-)
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
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
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.
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
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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...
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.
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.
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!
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!
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..
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..
Fait une autre macro pour tester...
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
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
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....
A+
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+
Bonjour,
Voici un fonction qui permet d'extraire une chaine dans une cellule comportant une liste de valeurs avec un séparateur :
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.
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.
Je dois donc garder seulement la partie interressante.
C'est pourquoi, je pensais a l'utilisation d'une macro
Merci