Insérer des ; dans une liste de caractère
vinceCS
Messages postés
1
Statut
Membre
-
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 25847 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous
j'ai une tache a faire sous excel, mais je bloque !
j'ai un fichier de plus de 1000 lignes, dans une des colonnes, j'ai une chaines de caractères, dont le nombre peut varier en gros de 2 à 192
Exemple:
810253951525455
84
384269
2776
596280
18
30
33
ces nombres (qui sont en fait des N° de département), je souhaite les séparer deux par deux avec un point virgule, comme ci dessous:
81;02;53;95;15;25;45;50;
84;
38;42;69;
27;76;
59;62;80;
18;
30;
33;
mais je ne sais pas comment faire ca de maniere "industrielle", pour les 1000 lignes d'un coup, mes compétences en macro sont largement dépassées
je remercie par avance la communauté pour son aide !
A bientot,
Vincent
(config: vista, office 2007)
j'ai une tache a faire sous excel, mais je bloque !
j'ai un fichier de plus de 1000 lignes, dans une des colonnes, j'ai une chaines de caractères, dont le nombre peut varier en gros de 2 à 192
Exemple:
810253951525455
84
384269
2776
596280
18
30
33
ces nombres (qui sont en fait des N° de département), je souhaite les séparer deux par deux avec un point virgule, comme ci dessous:
81;02;53;95;15;25;45;50;
84;
38;42;69;
27;76;
59;62;80;
18;
30;
33;
mais je ne sais pas comment faire ca de maniere "industrielle", pour les 1000 lignes d'un coup, mes compétences en macro sont largement dépassées
je remercie par avance la communauté pour son aide !
A bientot,
Vincent
(config: vista, office 2007)
A voir également:
- Insérer des ; dans une liste de caractère
- Liste déroulante excel - Guide
- Insérer une vidéo dans powerpoint - Guide
- Caractère spéciaux - Guide
- Comment insérer des points de suite sur word - Guide
- Caractère ascii - Guide
4 réponses
Bonjour,
dans un module :
eric
dans un module :
Function sep2(s As String) As String
Dim i As Long
For i = Len(s) - 2 To 1 Step -2
s = Left(s, i) & ";" & Mid(s, i + 1)
Next i
sep2 = s
End Function
eric
Bonjour,
J'ai décomposé le problème en 4 étapes:
- découpage par paires (stxt)
-concatener des paires avec un ; intermédiaire
-supression des ; en double (substitue)
-ajoute le dernier ; si manquant
http://www.cijoint.fr/cj201012/cij2y5KHqP.xls
J'ai décomposé le problème en 4 étapes:
- découpage par paires (stxt)
-concatener des paires avec un ; intermédiaire
-supression des ; en double (substitue)
-ajoute le dernier ; si manquant
http://www.cijoint.fr/cj201012/cij2y5KHqP.xls
bonjour
une autre ...
dans ton pb
RQ1. les cellules contiennent des chaines de caracteres
RQ2. les chaines de caracteres sont de longueurs paires (ce n'est pa verifie)
bonne suite
une autre ...
Private Sub CommandButton1_Click()
Dim c As Range
For Each c In Selection
c.Value = inserepv(c.Value)
Next c
End Sub
Function inserepv(ByVal s As String) As String
If Len(s) = 2 Then
inserepv = s
Else
inserepv = Left(s, 2) & ";" & inserepv(Right(s, Len(s) - 2))
End If
End Function
dans ton pb
RQ1. les cellules contiennent des chaines de caracteres
RQ2. les chaines de caracteres sont de longueurs paires (ce n'est pa verifie)
bonne suite
Ton exemple d'énoncé est incorrect (nombre impair de car).
Voici la solution.
F11 éditeur VBA, ajouter module, dedans du colles ça
Public Function DeuxParDeux(Cel As Range) As String
Dim S As String
Dim S2 As String
Dim i As Integer
Dim Ct As Integer
S = CStr(Cel)
If Len(S) / 2 = Len(S) \ 2 Then
'Delete possible blanks
S = Replace(S, " ", "")
S = Replace(S, ";", "")
For i = 1 To Len(S)
S2 = S2 & Mid$(S, i, 1)
Ct = Ct + 1
If Ct = 2 Then
Ct = 0
S2 = S2 & ";"
End If
Next i
DeuxParDeux = S2
Else
DeuxParDeux = "IMPAIR !"
End If
End Function
Puis tu fais dans une colonne =deuxpardeux(colonnenonséprarée)
si le nombre de car est impair, il retourne impair.
TRES vite fait sur le gaz, signale-moi si tu vois un bug.
Oki ?
Voici la solution.
F11 éditeur VBA, ajouter module, dedans du colles ça
Public Function DeuxParDeux(Cel As Range) As String
Dim S As String
Dim S2 As String
Dim i As Integer
Dim Ct As Integer
S = CStr(Cel)
If Len(S) / 2 = Len(S) \ 2 Then
'Delete possible blanks
S = Replace(S, " ", "")
S = Replace(S, ";", "")
For i = 1 To Len(S)
S2 = S2 & Mid$(S, i, 1)
Ct = Ct + 1
If Ct = 2 Then
Ct = 0
S2 = S2 & ";"
End If
Next i
DeuxParDeux = S2
Else
DeuxParDeux = "IMPAIR !"
End If
End Function
Puis tu fais dans une colonne =deuxpardeux(colonnenonséprarée)
si le nombre de car est impair, il retourne impair.
TRES vite fait sur le gaz, signale-moi si tu vois un bug.
Oki ?
- ne gère pas le terminateur ;
- ne gère pas les anomalies (impair)
- ne gère pas le terminateur ;
Bonne remarque, je n'avais pas vu.
remplacer sep2 = s par sep2 = s & ";"
- ne gère pas les anomalies (impair)
Pas demandé, les données sont sensées être correctes pour moi
eric
Et c'est en testant ma fonction que j'ai remarqué que l'énoncé ne correspondait pas à la question.
Il semble qu'on était tout un peloton sur le coup ? C'est un peu con...
On ne pourrait pas prévoir quelque chose du genre un post "JE PRENDS..." à éditer dans la 1/2h ? Parce que là ça fait un peu débauche même si en finale, j'ai comme l'impression qu'il n'y a que deux solutions sur quatre qui fonctionnent.dans le cas général. Mais je vais arrêter de critiquer sinon je vais me faire manger tout cru.
La palme de l'artisanat (no pun intended) revient à ccm81 qui réussit à trouver une solution garantie 100% sans produits dopants de type VBA. :D Par contre, impossible de prédire la longueur de la chaine initiale.
Bonne soirée,
RQ1. comme eriic pas vu le ; final d'où la modif ..
Function inserepv(ByVal s As String) As String
If Len(s) = 2 Then
inserepv = s & ";"
Else
inserepv = Left(s, 2) & ";" & inserepv(Right(s, Len(s) - 2))
End If
End Function
RQ2. pourquoi se contenter de gerer les espaces et pas les eventuelles erreurs de frappes (+,-,*,/, sont si près geographiquement du pavé numérique )
RQ3. que veux tu dire par
Par contre, impossible de prédire la longueur de la chaine initiale.
cordialement
Pourquoi les "blanks' c'est à dire pas uniquement les espaces, mais aussi les ; Tout simplement parce que les données sont plus susceptibles d'être polluées (copies, manips) par ces caractères. Le mieux aurait été en fait de ne permettre QUE les car de 0 à 9 qui suffisent pour noter les départements.