Creation de script

Résolu/Fermé
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013 - Modifié par irongege le 31/12/2012 à 12:40
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013 - 7 janv. 2013 à 13:37
Bonjour, les amis
J'ai besoin de votre aide:
j'aimerais écrire un script qui me permettrais d'extraire des données dans un fichier
excel ( c'est à dire tout est enregistré dans une seule colonne sur plusieurs ligne avec des séparateurs comme : / _ ). Je dois les extraire en tenant compte des séparateur et les ranger dans un fichier dans plusieurs colonne pour les rendre plus lisible et agréable.
Merci de vouloir m'aider,
A voir également:

9 réponses

Célien Messages postés 5729 Date d'inscription jeudi 8 mai 2008 Statut Membre Dernière intervention 9 septembre 2021 1 993
28 déc. 2012 à 15:24
Salut,

Je suppose que tu pourrais faire ça en VBA Excel : Tutoriels VBA Excel.
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
29 déc. 2012 à 11:11
bonjour

de combien est le nombre maxi (environ) de séparateurs dans une cellule?
0
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013
31 déc. 2012 à 11:46
Bonjour,
il y a au total 4 séparateur que je dois prendre en compte, ce sont:
" " espace qui sépare le nom et prenom
":" deux point qui sépare le prenom et la fonction (profession)
"_" trait de 8 qui sépare la fonction et le nom de la société
Merci.
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
31 déc. 2012 à 12:01
Bonjour,

Merci
autre précision: combien de lignes (à peu près: 10,100,1000...)?
0
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013
31 déc. 2012 à 12:39
170
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
31 déc. 2012 à 13:42
maquette à adapter à la disposition réelle
https://www.cjoint.com/?3LFnPJU3c1e

le code
Sub separer()
Dim Derlig As Byte, Lig As Byte
Dim T_nom, T_prenom, T_fonction

Application.ScreenUpdating = False
With Sheets(1)
     Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
     For Lig = 2 To Derlig
          T_nom = Split(.Cells(Lig, "A"), " ")
          T_prenom = Split(T_nom(1), ":")
          T_fonction = Split(T_prenom(1), "_")
          With Sheets(2)
               .Cells(Lig, "A") = T_nom(0)
               .Cells(Lig, "B") = T_prenom(0)
               .Cells(Lig, "C") = T_fonction(0)
               .Cells(Lig, "D") = T_fonction(1)
               .Select
          End With
     Next
End With
End Sub

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013
31 déc. 2012 à 15:12
Merci pour ton aide,
lors de l'exécution il m'envoie un message d'erreur comme suit
"erreur 6
dépassement de capacité"

Je suis suspendu a ton aide.
Merci
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
31 déc. 2012 à 16:16
Tu m'avais dit 170 lignes...
remplace
Dim Derlig As Byte, Lig As Byte
par
Dim Derlig As Integer, Lig As integer

si tu as beaucoup de lignes, il faudrait utiliser une méthode + rapide
tu dis...
0
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013
2 janv. 2013 à 13:19
Bonjour mon frère,
je profite de l'occasion pour vous souhaiter tous mes meilleurs voeux pour cette nouvelle année 2013 et que les meilleures choses vous accompagnent par la grace de mon sauveur Jésus Christ.

Concernant le script j'ai encore un petit couac lors de la compilation pas à pas détaillé et j'ai remarqué que c'est au niveau de:
".Cells(Lig, "D") = T_fonction(1) "
le message d'erreur est la suivante:
"erreur d'exécution 9, l'indice n'appartient pas à la sélection"
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
2 janv. 2013 à 13:36
bonjour,
Curieux, je viens dé ré-essayer sur la maquette et je n'ai pas ce problème!
as tu un "souligné" _ entre la fonction et la société ?
0
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013
2 janv. 2013 à 14:17
Voilà en exemple comment se présente chaque ligne:
Rodrigue Mawafelo: Business Unit Manager CFS/RETAIL/DSD _InfoSolux
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
2 janv. 2013 à 16:12
hé oui! tu m'avais pas dit que la séparation était un espace suivi d'un signe pour le _ et : suivi d'un espace
d'autre part la fonction comporte des espaces....

bref! c'est un tout autre problème....

sois patient, pour l'instant je n'ai pas d'idées
0
michel_m Messages postés 16602 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 313
2 janv. 2013 à 17:57
le code
Option Explicit

Sub separer()
Dim T_in(), T_out()
Dim Lig As Integer, Derlig As Integer
Dim T_ligne, T_ident, T_fonction

Application.ScreenUpdating = False

With Sheets(1)
     Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
     'mémorise en RAM la source
     T_in = Application.Transpose(.Range("A2:A" & Derlig))
End With

ReDim T_out(1 To UBound(T_in), 1 To 4)
'mémorise en ram les éléments séparés
For Lig = 1 To UBound(T_in)
          T_ligne = Split(T_in(Lig), ": ")
          T_ident = Split(T_ligne(0))
          T_out(Lig, 1) = T_ident(0) 'prenom
          T_out(Lig, 2) = T_ident(1) 'nom
          T_fonction = Split(T_ligne(1), "_")
          T_out(Lig, 3) = T_fonction(0) 'fonction
          T_out(Lig, 4) = T_fonction(1) 'société
Next

'restitution en feuille 2
 With Sheets(2)
     Derlig = .Columns("A").Find("", .Range("A1")).Row
     .Range("A2:D" & Derlig).ClearContents
     .Range("A2").Resize(UBound(T_out), 4) = T_out
     .Select
End With
End Sub

La maquette
https://www.cjoint.com/?3Acr4xJDA4T
0
cephas_igor Messages postés 14 Date d'inscription jeudi 27 décembre 2012 Statut Membre Dernière intervention 27 mars 2013
7 janv. 2013 à 13:37
Salut Michel_m,
franchement je ne sais te dire pour ce gros boulot tu m'as fais, juste un mot Merci.
Voilà après quelques petites rectif sur ton programme, mon programme qui marche actuellement et qui va exactement pour mon besoin:

Sub Macro_Separer()

Dim T_in(), T_out()
Dim Lig As Integer, Derlig As Integer
Dim T_ligne, T_ident, T_fonction

Application.ScreenUpdating = False

With Sheets(1)
Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
'mémorise en RAM la source
T_in = Application.Transpose(.Range("A2:A" & Derlig))
End With

ReDim T_out(1 To UBound(T_in), 1 To 4)
'mémorise en ram les éléments séparés
For Lig = 1 To UBound(T_in)
T_ligne = Split(T_in(Lig), ":" & " ")
T_ident = Split(T_ligne(0))
T_out(Lig, 1) = T_ident(0) 'prenom
T_out(Lig, 2) = T_ident(1) 'nom
T_fonction = Split(T_ligne(1), " " & "_")
T_out(Lig, 3) = T_fonction(0) 'fonction
T_out(Lig, 4) = T_fonction(1) 'société
Next

'restitution en feuille 2
With Sheets(2)
Derlig = .Columns("A").Find("", .Range("A1")).Row
.Range("A2:D" & Derlig).ClearContents
.Range("A2").Resize(UBound(T_out), 4) = T_out
.Select
End With

End Sub


Une fois encore merci.
0