Extraire données VBA d'une cellule Excel

Fermé
Tibo - 26 août 2011 à 13:59
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 29 août 2011 à 19:45
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 !

4 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
26 août 2011 à 23:43
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 :
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
1
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
26 août 2011 à 15:34
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
0
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 !
0
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.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié par eriiic le 29/08/2011 à 19:48
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 :
Sub eclate()   
    Dim c As Range   
    For Each c In Selection   
        c.Resize(1, 3) = Split(c.Value, " ", 3)   
    Next c   
End Sub


eric
0