IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

mieux que la fonction split


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Par défaut mieux que la fonction split
    pour l'instant j'ai un colonne du type

    "premiere partie qui varie" xv "seconde partie qui varie"
    donc j'utilise une fonction split avec un code dela forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For i = 1 To 39
    TB = Split(Cells(i, 2), "SM")
    Cells(i, 6) = TB
    Next i
    mais les choses se compliiquent parce que desormais le separateur n'est pas toujours xv mais wz, dune part.
    et d'auter part je voudrait aussi recuperer la seconde partie .
    est ce que qqun connaiit une fonction plus a meme de remplir cette tache?

  2. #2
    Membre éclairé
    Profil pro
    chomeur
    Inscrit en
    Août 2006
    Messages
    343
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : chomeur

    Informations forums :
    Inscription : Août 2006
    Messages : 343
    Par défaut
    juste une qestion comme ça : dans tes parties de quelle type de données s'agit elle? des caracteres ou des chiffres?

    Si ce n'est que des chiffres et le séparateurs des lettres, alors tu peux faire un parcour de la chaine de caractere, et tu regardes si c'est un numeric. Si non alors tu stockes la lettre et tu passes au caractere voisin.

    Une fois que tu as la chaine de caractere qui sépare, bien tu fait un split.
    Si tu veux le début et la fin tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    For i = 1 To 39
    TB = Split(Cells(i, 2), "SM")
    Cells(i, 6) = TB(0)
    Cells(i, 7) = TB(1)
    Next i

  3. #3
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Par défaut interesse
    malheuressement ce sont ce sont que des lettres.

    mais ton code pour les chiffres et lettres m interesse aussi , je saurais en faire usage ailleurs

  4. #4
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour,

    je ne suis pas sûr d'avoir tout bien compris ...
    Une question, donc :
    Lorsque ta chaîne comporte le séparateur xv, peut-elle également contenir le séparateur wz (et vice-versa) ?
    En d'autres termes : ta chaîne ne peut-elle contenir, de manière certaine, qu'un seul de ces deux types de séparateur (l'un excluant systématiquement l'autre) ?
    Si oui : la solution sera fort simple ...

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    et d'auter part je voudrait aussi recuperer la seconde partie .
    si çà peut t ' aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Sub g()
    Dim A, TB
    Dim Sval_cel As String
     
    Sval_cel = "452SM6696"
    TB = Split(Sval_cel,"SM") 'ce décompose en un variant type tableau
     
    For Each A In TB
        MsgBox A
    Next A
    MsgBox TB(UBound(TB))
    End Sub

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Je reprends le code de Patbou pour répartir les données de ta cellule dans les colonnes de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Appel()
    Dim Separateur as string, Plage as range, Cell as range
    Dim DerLig as long, Tablo as variant, i as integer
        Separateur = "Cequetuveux"
        DerLig = Split(Worksheets("Feuil1").UsedRange.address, "$")(4)
        Set Plage = Range("A1:A" & DerLig)
        For Each Cell In Plage
            Tablo = Tableau(Cell, Separateur)
            For i = 0 to Ubbound(Tablo)
                 Cell.Offset(0, i).value = Tablo(i)
            Next
        Next
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Function Tableau(Cell as range, Separateur as string) as variant
    Tableau = Split(Cell, Separateur) 'décompose en un variant type tableau
    End function
    Tu peux même créer un tableau des séparateurs et ajouter une boucle sur ce tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim separateur as variant
        Separateur = array("sep0", "Sep1", "Sep2", "Sep3")
        for j = 0 to Ubound(Separateur)
            For Each Cell In Plage
                Tablo = Tableau(Cell, Separateur(j))
                'etc.
    Bon après-midi

  7. #7
    Membre confirmé
    Inscrit en
    Août 2008
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 141
    Par défaut satisfait ;-)
    cela marche a perfection. seulement je ne comprend pas deux des lignes du code d'une part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLig = Split(Worksheets("Feuil1").UsedRange.address, "$")(4)
        Set Plage = Range("A1:A" & DerLig)
    et d'aute part, etrangement, lorsque dans le code precedent je fais offset(0,i+1) et non i dans le but d'avoir une trace de la version avec separateur la "premier partie du split" apparait juste come un simple copier collerr de l''ecrture presedente comme la fonction split n'avait pas marche?
    j ai contourneer ce probleme mais je voufrais coprendre pourquoi il se porduit, aurais tu la reponse?

    enfin es it possible de garder aussi qqpart le separatuer?

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Qu'appelles-tu ""premier partie du split" ?
    Sinon, en faisant i + 1 tu laisses la cellule de la colonne dans laquelle tu as pris ta donnée complète telle qu'elle est. Ce n'est pas ce que tu veux faire ?

    Edit
    Pour ce qui est de
    seulement je ne comprend pas deux des lignes du code d'une part
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DerLig = Split(Worksheets("Feuil1").UsedRange.address, "$")(4)
        Set Plage = Range("A1:A" & DerLig)
    J'ai donné l'explication pour Lig, pour DerLig, c'est la même.
    Tablo = Split(Worksheets("Feuil1").UsedRange.address, "$")

    Tablo(0) = ""
    Tablo(1) = Colonne (en lettre) du début de la plage
    Tablo(2) = Première ligne de la plage
    Tablo(3) = Colonne (en lettre) de la fin de la plage
    Tablo(4) = Dernière ligne de la plage
    UsedRange.address donne l'adresse de la plage renseignée de ta feuille de calculs sous la forme "A1:" & "Dernière colonne en lettre & Dernière ligne"
    Quant à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim Plage as range
         Set Plage = Range("A1:A" & DerLig)
    Créer l'objet Plage en tant que range afin d'éviter à trainer Range(..........) partout dans le code.
    Simplifie l'écriture dans bien des cas

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 13/10/2005, 13h46
  2. procedure stockée et fonction "split"
    Par wehtam dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 18/07/2005, 17h21
  3. [Fortran 90] Fonction Split()
    Par gchazelle dans le forum Fortran
    Réponses: 2
    Dernier message: 02/03/2005, 11h16
  4. D7P mieux que D6P ?
    Par David dans le forum EDI
    Réponses: 5
    Dernier message: 16/06/2004, 22h15
  5. [dBase]il y a mieux que la commande sql UPDATE ?
    Par sana72 dans le forum Autres SGBD
    Réponses: 4
    Dernier message: 12/12/2002, 12h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo