Extraire données VBA d'une cellule Excel
Tibo
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Voici ce qui se trouve dans mes cellules excel (j'utilise Excel 2010) actuellement :
A1 : Yan Grolet
A2 : 78 Impasse de Terre Neuve 49160 Saint-philbert-de-Bouaine
A3 :
A4 : Alacantine Maïté
A5 : Le pré valois 49730 Varennes sur Maine
Je viens de trouver une formule VBA sur un forum qui fonctionne bien :
Sub eclate()
Selection.Resize(1, 3) = Split(Selection.Value, " ", 3)
End Sub
En revanche, elle ne fonctionne que pour une cellule à la fois. Quand je sélectionne une plage de données, une erreur s'affiche "Erreur d'éxécution '13' Incompatibilité de type".
Comme je suis plus que novice en programmation, je suis bien incapable de m'en sortir seul !
Quelqu'un peut-il voler à mon secours ?
Merci beaucoup par avance !
Voici ce qui se trouve dans mes cellules excel (j'utilise Excel 2010) actuellement :
A1 : Yan Grolet
A2 : 78 Impasse de Terre Neuve 49160 Saint-philbert-de-Bouaine
A3 :
A4 : Alacantine Maïté
A5 : Le pré valois 49730 Varennes sur Maine
Je viens de trouver une formule VBA sur un forum qui fonctionne bien :
Sub eclate()
Selection.Resize(1, 3) = Split(Selection.Value, " ", 3)
End Sub
En revanche, elle ne fonctionne que pour une cellule à la fois. Quand je sélectionne une plage de données, une erreur s'affiche "Erreur d'éxécution '13' Incompatibilité de type".
Comme je suis plus que novice en programmation, je suis bien incapable de m'en sortir seul !
Quelqu'un peut-il voler à mon secours ?
Merci beaucoup par avance !
A voir également:
- Extraire données VBA d'une cellule Excel
- Extraire une video youtube - Guide
- Excel cellule couleur si condition texte - Guide
- Extraire le son d'une vidéo - Guide
- Liste déroulante excel - Guide
- Excel compter cellule couleur sans vba - Guide
4 réponses
Bonsoir,
Je viens de trouver une formule VBA sur un forum qui fonctionne bien
Tu es sûr de vraiment l'avoir testée pour l'utilisation que tu as besoin ???
Tu ne peux pas te baser sur les espaces puisque le nombre n'est jamais le même.
Une proposition qui recherche 5 chiffres consécutifs et qui découpe autour de cette position :
Sélectionne toute la plage concernée (sur 1 colonne), si une cellule ne contient pas 5 chiffres consécutifs elle restera inchangée.
eric
Je viens de trouver une formule VBA sur un forum qui fonctionne bien
Tu es sûr de vraiment l'avoir testée pour l'utilisation que tu as besoin ???
Tu ne peux pas te baser sur les espaces puisque le nombre n'est jamais le même.
Une proposition qui recherche 5 chiffres consécutifs et qui découpe autour de cette position :
Sub eclate() Dim c As Range, pos As Long, i As Long, ch As String For Each c In Selection ch = c For pos = 1 To Len(ch) - 1 If IsNumeric(Mid(ch, pos, 6)) Then c = Left(ch, pos - 1) c.Offset(0, 1) = Mid(ch, pos + 1, 5) c.Offset(0, 2) = Right(ch, Len(ch) - pos - 6) Exit For End If Next pos Next c End Sub
Sélectionne toute la plage concernée (sur 1 colonne), si une cellule ne contient pas 5 chiffres consécutifs elle restera inchangée.
eric
bonjour
cette procedure permet de couper en trois la valeur de la cellule sélectionnée
est ce cette action que tu veux réaliser sur un ensemble de cellules
- si oui lesquelles?
- sinon que veux tu faire exactement
bonne suite
cette procedure permet de couper en trois la valeur de la cellule sélectionnée
est ce cette action que tu veux réaliser sur un ensemble de cellules
- si oui lesquelles?
- sinon que veux tu faire exactement
bonne suite
Effectivement c'est bien cela que je veux faire. J'ai juste oublier de préciser une chose : il y a 6 espaces entre chaque valeurs. J'illustre parce que je sais que je ne suis pas clair :
A2 : 78 Impasse de Terre Neuve 49160 Saint-philbert-de-Bouaine
A5 : Le pré valois 49730 Varennes sur Maine
Du coup, je me disais qu'il était facile de séparer en trois ces cases, en tenant compte des 6 espaces. Oui, je veux couper en 3 : adresse, puis code postal, puis ville, qui sont chacun espacés de 6 espaces.
Je veux effectuer cette action sur une plage de données mais chaque prospect se réparti en 3 lignes :
A1 : le nom
A2 : l'adresse complète (adresse, CP, ville)
A3 : rien
A4 : le nom du suivant
A5 : l'adresse complète du suivant
et ainsi de suite...
L'objectif est d'avoir :
A1 : le nom
A2 : adresse B2 : code postal C2 : ville
A3 : rien
A4 : le nom du suivant
A5 : adresse du suivant B5 : CP de suivant etc...
Veuillez m'excuser si je ne suis pas assez clair... N'hésitez pas à me demander d'autres informations !
Merci !
A2 : 78 Impasse de Terre Neuve 49160 Saint-philbert-de-Bouaine
A5 : Le pré valois 49730 Varennes sur Maine
Du coup, je me disais qu'il était facile de séparer en trois ces cases, en tenant compte des 6 espaces. Oui, je veux couper en 3 : adresse, puis code postal, puis ville, qui sont chacun espacés de 6 espaces.
Je veux effectuer cette action sur une plage de données mais chaque prospect se réparti en 3 lignes :
A1 : le nom
A2 : l'adresse complète (adresse, CP, ville)
A3 : rien
A4 : le nom du suivant
A5 : l'adresse complète du suivant
et ainsi de suite...
L'objectif est d'avoir :
A1 : le nom
A2 : adresse B2 : code postal C2 : ville
A3 : rien
A4 : le nom du suivant
A5 : adresse du suivant B5 : CP de suivant etc...
Veuillez m'excuser si je ne suis pas assez clair... N'hésitez pas à me demander d'autres informations !
Merci !
Salut eriiic !
Merci pour ta réponse. Alors, deux choses.
1. Les espaces sont toujours au nombre de 6. Donc effectivement, le code que j'avais trouvé fonctionnait très bien, sauf lorsque je voulais sélectionner plus d'une case, voire une colonne.
2. La formule que tu me proposes fonctionne très bien sur une colonne entière mais le résultat n'est pas tout à fait celui attendu. En effet, on obtient bien 3 cases (pour les cellules où 5 chiffres sont consécutifs). La première contient ce qu'il faut (exemple : 78 Impasse de Terre Neuve). Mais çà se complique au niveau de la 2ème et 3ème. La 2ème contient juste le premier chiffre du code postal (exemple : 4), et la 3ème contient le reste du code postal et la ville (exemple : 9160 Saint-philbert-de-Bouaine).
Ne m'y connaissant pas du tout en VBA, je reviens donc vers toi pour te soumettre le problème ! Faut-il reprendre la formule que j'avais soumise ou la tienne... Je ne sais pas !
Encore merci,
Thibault.
Merci pour ta réponse. Alors, deux choses.
1. Les espaces sont toujours au nombre de 6. Donc effectivement, le code que j'avais trouvé fonctionnait très bien, sauf lorsque je voulais sélectionner plus d'une case, voire une colonne.
2. La formule que tu me proposes fonctionne très bien sur une colonne entière mais le résultat n'est pas tout à fait celui attendu. En effet, on obtient bien 3 cases (pour les cellules où 5 chiffres sont consécutifs). La première contient ce qu'il faut (exemple : 78 Impasse de Terre Neuve). Mais çà se complique au niveau de la 2ème et 3ème. La 2ème contient juste le premier chiffre du code postal (exemple : 4), et la 3ème contient le reste du code postal et la ville (exemple : 9160 Saint-philbert-de-Bouaine).
Ne m'y connaissant pas du tout en VBA, je reviens donc vers toi pour te soumettre le problème ! Faut-il reprendre la formule que j'avais soumise ou la tienne... Je ne sais pas !
Encore merci,
Thibault.
Bonjour,
1. Les espaces sont toujours au nombre de 6. Donc effectivement, le code que j'avais trouvé fonctionnait très bien, sauf lorsque je voulais sélectionner plus d'une case, voire une colonne.
Ben si le code que tu as fonctionne très bien je me suis fourvoyé.
En voyant ton exemple je pensais que tu voulais séparer le n° et la voie, le code postal et la commune.
C'est bien ce que fait mon code : début d'adresse en A, code postal sur 5 chiffre en B et commune en C.
Donc ton code qui va bien et qui agira sur la sélection en cours :
eric
1. Les espaces sont toujours au nombre de 6. Donc effectivement, le code que j'avais trouvé fonctionnait très bien, sauf lorsque je voulais sélectionner plus d'une case, voire une colonne.
Ben si le code que tu as fonctionne très bien je me suis fourvoyé.
En voyant ton exemple je pensais que tu voulais séparer le n° et la voie, le code postal et la commune.
C'est bien ce que fait mon code : début d'adresse en A, code postal sur 5 chiffre en B et commune en C.
Donc ton code qui va bien et qui agira sur la sélection en cours :
Sub eclate() Dim c As Range For Each c In Selection c.Resize(1, 3) = Split(c.Value, " ", 3) Next c End Sub
eric