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

Excel Discussion :

Splitter des données d'une cellule contenant une fonction


Sujet :

Excel

  1. #1
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut Splitter des données d'une cellule contenant une fonction
    Bonjour à tous,

    J'avais déjà mis un poste à propos de ce ficher Excel la semaine dernière et les réponses m'avaient bien aidée ! Cependant, il y a une limite à la réponse que l'on m'a donnée. Je souhaite splitter des données séparées par un ; obtenues par une formule et qui se trouvent dans une même cellule dans des cellules différentes afin de les exploiter plus facilement ensuite (voir capture d'écran ci-joint pour avoir plus de détails). Les formules que l'on m'a donné la semaine dernière fonctionnent parfaitement lorsque je n'ai que 2 données.
    Voici les formules en question :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    =GAUCHE(C2;TROUVE(";";C2)-1)
    =STXTB(C2;TROUVE(";";C2)+1;1000)
    Or, il arrive que j'en ai 6 ou 5 (voir capture d'écran). Cela dépend. Avez vous une solution pour adapter les formules et/ou créer une macro ?

    Je vous remercie pour votre aide,

    Nom : Macro.PNG
Affichages : 180
Taille : 12,4 Ko

  2. #2
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Salut,

    Voici un truc à adapter à ton contexte (prends les données dans la colonne A pour les répartir à partir de B en fonction du nombre d'éléments) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test_Split()
        Columns("A:A").Select
        Selection.TextToColumns Destination:=Range("B1"), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=";", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
    [A1].Select
    End Sub

  3. #3
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Merci ! Toutefois je débute, donc ce n'est pas évident de savoir ce qu'il faut adapter...

  4. #4
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Re-,
    C'est assez difficile de'être certain de la bonne réponse quand on ne connaît pas tout l'utilité et l'utilisation de ton fichier.
    Je peux te proposer cette adaptation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Selection.TextToColumns Destination:=Range(ActiveCell.Offset(0, 1).AddressLocal(ColumnAbsolute:=False, RowAbsolute:=False)), DataType:=xlDelimited, _
            TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
            Semicolon:=False, Comma:=False, Space:=False, Other:=True, OtherChar _
            :=";", FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), _
            TrailingMinusNumbers:=True
    Si tu démarres le code au moment où tu as sélectionné la cellule à splitter, l'effet sera reporté sur les colonnes à droite. C'est la partie suivante qui permet de détecter l'endroit où tu te situais et où il doit aller.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveCell.Offset(0, 1).AddressLocal(ColumnAbsolute:=False, RowAbsolute:=False)

  5. #5
    Futur Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2018
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2018
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse. Pour être plus précise, je voudrais que les données de la colonne C obtenues grâce à une formule se split ensuite dans des cellules différentes comme sur l'image (j'ai recopié les données à la main). Parce que depuis la formule je ne peux pas vraiment les exploiter (je ne peux pas faire de copier coller d'une seule donnée par exemple).
    Est-ce plus clair ?

    Merci,
    Images attachées Images attachées  

  6. #6
    Membre habitué
    Inscrit en
    Juin 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 93
    Points : 139
    Points
    139
    Par défaut
    Bonjour MathDbrn
    La macro que t'a donné QuestVBA va lancer la fonction "convertir" de l'onglet "Donnée" avec le ";" comme séparateur. Cela aura pour effet de séparer ta cellule en autant de cellule qu'il y avait de valeurs séparées par des ";". La différence avec ta présentation est que toutes les valeurs seront sur une même ligne et pas en colonne.
    Tu peux faire un copier / coller spécial avec transposition.
    Pour cela, ne néglige pas l'enregistreur de macro, de l'onglet développeur
    => tu lances l'enregistreur
    => tu éxécutes tes actions (convertir / copier / coller spécial avec transposition)
    => tu arrêtes l'enregistrement de la macro
    => tu analyses ton code et fais les quelques modifications nécessaires (typiquement : le nombre de cellule à prendre en considération pour le copier)

    Nekko

  7. #7
    Membre expert Avatar de QuestVba
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2012
    Messages
    2 477
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2 477
    Points : 3 864
    Points
    3 864
    Par défaut
    Vu sur Google est ton ami - Ce code va te demander où se trouve tes données de départ (tu peux sélectionner une plage) et où tu veux tes données d'arrivée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    Sub splitvertically()
    'updatebyExtendoffice 20160303
        Dim xRg As Range
        Dim xOutRg As Range
        Dim xCell As Range
        Dim xTxt As String
        Dim xStr As String
        Dim xOutArr As Variant
        On Error Resume Next
        xTxt = ActiveWindow.RangeSelection.Address
        Set xRg = Application.InputBox("please select the data range:", "Kutools for Excel", xTxt, , , , , 8)
        If xRg Is Nothing Then Exit Sub
        Set xOutRg = Application.InputBox("please select output cell:", "Kutools for Excel", , , , , , 8)
        If xOutRg Is Nothing Then Exit Sub
        For Each xCell In xRg
            If xStr = "" Then
                xStr = xCell.Value
            Else
                xStr = xStr & ";" & xCell.Value
            End If
        Next
        xOutArr = VBA.split(xStr, ";")
        xOutRg.Range("A1").Resize(UBound(xOutArr) + 1, 1) = Application.WorksheetFunction.Transpose(xOutArr)
    End Sub

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/02/2017, 12h03
  2. Réponses: 2
    Dernier message: 29/07/2016, 16h49
  3. Réponses: 5
    Dernier message: 21/03/2016, 18h48
  4. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  5. [XL-2002] Macro de comparaison d'une cellule d'une feuille avec une cellule d'une autre feuille.
    Par steelydan dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 08/09/2010, 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