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 :

Fonction convertir en VBA


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut Fonction convertir en VBA
    Bonjour,

    Je suis en train d'essayer de programmer en VBA (Je dis bien "essayer".....) une page qui me permette de séparer les mots d'un texte.

    Dans une cellule, j'y collerai tous le texte d'un coup (Jusque là facile....)
    Lorsque je clique sur le bouton convertir, je voudrais que le texte soit séparé en mot (1 mot par cellule). J'ai trouvé la commande sur Excel pour le faire mais je ne sais pas comment le programmer en VBA....

    Votre aide sera la bien venue. Merci à tous

    L'escargot baveur du désert Pyrénéen

  2. #2
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    avec l'enregistreur de macro tu devrais avoir le code.
    pour information regarde ici : Range.TextToColumns

    Il y a eu une discussion récente ici
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  3. #3
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut Plus de précision
    Voici un exemple de texte

    AAA AAB AAC AAD AAE AAF AAG


    Je voudrais arriver au résultat suivant :

    Cellule A1 : AAA
    Cellule B1 : AAB
    Cellule C1 : AAC
    Cellule D1 : AAD
    Cellule E1 : AAE
    Cellule F1 : AAF

    Je sais le faire en utilisant la commande convertir mais pas en VBA à la demande.....

  4. #4
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    justement si tu sais le faire manuellement, il faut refaire la même manipulation mais avec l'enregistreur de macro qui lui te donnera un code
    Regarde ici : Excel et l'enregistreur de macro
    on regardera le code fourni par celui-ci
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour,

    activer l'Enregistreur de macros puis manipuler : une base de code est livrée sur un plateau ‼

    Excel et l'enregistreur de macro

    Sinon rien qu'en consultant l'aide VBA interne de la méthode TextToColumns

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …


  6. #6
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut Résultat
    Voici le résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Selection.TextToColumns Destination:=Range("B5"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(4, 1), Array(5, 1), Array(8, 1), Array(9, 1), Array _
            (11, 1), Array(12, 1), Array(15, 1), Array(16, 1), Array(20, 1), Array(21, 1), Array(25, 1), _
            Array(26, 1), Array(28, 1), Array(29, 1), Array(33, 1), Array(34, 1), Array(44, 1), Array( _
            45, 1), Array(49, 1)), TrailingMinusNumbers:=True
    J'en suis très satisfait. Merci à tous. Maintenant mon soucis est qu'il refuse de convertir le texte d'une page vers une autre page. Il m'indique de la destination est invalide....

  7. #7
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Désolé je ne comprends pas bien la suite,

    Une explication détaillé et explicite serait une plus pour la suite afin de comprendre les tenants et aboutissants en commençant au début jusqu'à la finalité
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  8. #8
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut explication
    Donc à partir d'un texte situé dans une cellule, je le converti pour avoir un mot par cellule. Tout ceci fonctionne tant que je suis sur la même page. si je veux convertir le texte d'une cellule se trouvant sur une autre page vers les cellules d'une autre page, cela ne fonctionne plus.....

  9. #9
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    alors ce que tu appelles "page" est en fait une feuille; regarde ici :
    Description de l'objet Feuille de calcul dans Excel

    ton problème viens du pointage, quanq tu écris : Selection.TextToColumns Destination:=Range("B5"),
    Selection => est sur la feuille active sur laquelle tu te trouves
    Range("B5") => est sur la celule de la feuille active sur laquelle tu te trouves

    Donc il faut pointé la copie sur la feuille voulue - ex.:
    si tu veux copier sur la feuille toto tu auras alors :
    Selection.TextToColumns Destination:=Worksheets("toto").Range("B5") … …
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  10. #10
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut re
    Alors j'ai essayé cette méthode mais sans résultat.
    Il découpe le texte sur la feuille active et en plus il le coupe n'importe comment. Il mets une lettre dans une cellule, 3 lettres dans une autre.....

    Voici de nouveau la macro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Selection.TextToColumns Destination:=Worksheets("Feuil4").Range("A1"), DataType:=xlFixedWidth, _
            FieldInfo:=Array(Array(0, 1), Array(4, 1), Array(5, 1), Array(8, 1), Array(9, 1), Array _
            (11, 1), Array(12, 1), Array(15, 1), Array(16, 1), Array(20, 1), Array(21, 1), Array(25, 1), _
            Array(26, 1), Array(28, 1), Array(29, 1), Array(33, 1), Array(34, 1), Array(44, 1), Array( _
            45, 1), Array(49, 1)), TrailingMinusNumbers:=True
    End Sub

  11. #11
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    peux tu me donner ce que tu as dans une cellule (cellule source), que je puisse de donner un exemple avec la feuille et cellule de destination
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  12. #12
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut RE
    Voici le fichier commenté et détaillé. Si vous pouvez m'apporter vos lumières....test.xlsx

  13. #13
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    j'ai regardé le fichier mais il y a des incohérences avec la demande et le fichier exemple dont je pense ne reflète pas la réalité :
    si je veux convertir le texte d'une cellule se trouvant sur une autre page vers les cellules d'une autre page, cela ne fonctionne plus.....
    Ce n'est pas la demande initial et donc apparemment il ne s'agit plus de la feuille active

    Dans le fichier :
    Texte source
    La destination se fait sur la ligne 1 de la feuille nommée Feuil4

    Texte retour
    La source se trouve sur la ligne 1 de la feuille nommée Feuil4[/B]
    c'est le même emplacement !! Pourtant la demande est autre !! ???

    les explications ne sont pas très claire; de plus j'ai TrailingMinusNumbers:=True dans le code, mais dans le fichier exemple, les données ne correspondent pas à ce type de code

    Il faudrait être vraiment clair sur la demande !
    avec des données fictive mais reflétant les données réelles, une feuille avec les données source (Ex: Feuil1), une feuille pour la destination (ex : Feuil2 ou Feuil1 si c'est sur la même feuille) et une feuille "résultat" montrant le résultat final

    PS : je n'ai rien compris à cette mise en forme dans la feuille 1, c'est sensé représentait quoi ??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  14. #14
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    un autre outil possible : Split()


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub LesMots()
    Dim MaPhrase As String
    Dim MesMots() As String
    MaPhrase = "AAA AAB AAC AAD AAE AAF AAG"
    MesMots = Split(MaPhrase)
     
    ThisWorkbook.Worksheets("Feuil1").Cells(1, 1).Resize(1, UBound(MesMots) + 1).Value = MesMots
     
    End Sub

  15. #15
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    En effet @joe.levrai,
    mais tant que sa demande ne soit pas plus clair, j'attends son retour, surtout que je lui avait donné un lien sur le post #2, montrant plusieurs façon de faire,
    mais avec le niveau débutant vba ça sera du pas à pas pour une meilleur compréhension :
    Citation Envoyé par cagouille65 Voir le message
    Je suis en train d'essayer de programmer en VBA (Je dis bien "essayer".....)
    PS : @cagouille65 merci d'uliser - utiliser le bouton # et mettre le code entre les 2 balises
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  16. #16
    Membre averti
    Homme Profil pro
    economiste
    Inscrit en
    Février 2014
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

    Informations professionnelles :
    Activité : economiste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Février 2014
    Messages : 28
    Par défaut Ma réponse
    Bonsoir à tous et merci d'avance pour votre aide

    Effectivement, ma demande a changé par rapport à mon premier POST....

    Voulant rechercher l'amélioration à tout instant j'ai modifié ma page et l'ai faite évoluée....

    Mon idée est la suivante :

    Première page je rentre un texte dans une cellule
    Lorsque je clique sur convertir
    Le texte est divisé en nombre de cellules égalent au nombre de mots dans une deuxième page.
    Lorsque je clique sur le bouton reconstituer, alors le texte divisé en cellule sur l'autre page revient se reconstituer dans une nouvelle cellule de la première page.

    En espérant avoir été plus clair.....


    Merci à tous

  17. #17
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    je persiste avec la méthode Split() ... car comme tu souhaites pouvoir réaliser le traitement inverse (rassembler les mots), on va utiliser son anti-frère Join()

    j'ai utilisé pas mal de variables pour que tu puisses t'y retrouver, mais aucune n'est nécessaire
    j'ai également simulé l'écriture de ta phrase en A1 en début de procédure

    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
    25
    26
    27
    28
    Sub LesMots()
    Dim FeuilleDepart As Worksheet
    Dim FeuilleArrivee As Worksheet
    Dim MaPhrase As String
    Dim MesMots()
     
    Set FeuilleDepart = Feuil1: Set FeuilleArrivee = Feuil2
     
    ' pour simuler l'écriture du texte qu'on met en A1 de Feuil1
    FeuilleDepart.Cells(1, 1).Value = "AAA AAB AAC AAD AAE AAF AAG"
     
    With FeuilleArrivee
        ' on écrit la phrase, mot à mot, vers la Feuil2, en A1/B1/C1 etc..
        .Cells(1, 1).Resize(1, UBound(Split(FeuilleDepart.Cells(1, 1))) + 1).Value = Split(FeuilleDepart.Cells(1, 1).Value)
     
        ' facultatif : on mets les mots dans un tableau
        ' on transpose deux fois le tableau pour qu'il soit unidimensionnel
        MesMots = Application.Transpose(Application.Transpose(.Range(.Cells(1, 1), .Cells(1, .UsedRange.Columns.Count)).Value))
    End With
     
    ' on récupère chaque mot qu'on rassemble dans une phrase
    ' en utilisant le tableau MesMots
    MaPhrase = Join(MesMots, " ")
     
    ' la phrase reconstituée
    MsgBox MaPhrase
     
    End Sub

  18. #18
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    Bonsoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub texttocolumn() 'dans meme feuille la ligne en dessous
        Sheets(2).Range("A1").TextToColumns Range("A2"), DataType:=xlDelimited, ConsecutiveDelimiter:=True, Space:=True
    End Sub
    Sub texttocolumn2() ' dans une  autre feuille
    With Sheets(3).Range("A2")
    .Value = Sheets(2).Range("A1")
    .TextToColumns , DataType:=xlDelimited, ConsecutiveDelimiter:=True, Space:=True
    End With
    End Sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  19. #19
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonsoir cagouille65,

    Citation Envoyé par cagouille65 Voir le message
    Effectivement, ma demande a changé par rapport à mon premier POST....
    Cela aurait été judicieux de le préciser dans le post du fichier joint

    là tu as le choix ente le code @joe.levrai ou @patricktoulon
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

Discussions similaires

  1. Comment écrire dans une cellule la fonction SUM en vba?
    Par Subkill dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/02/2007, 19h24
  2. Fonction excel en VBA
    Par Gary US dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 18/12/2006, 17h39
  3. Fonction Yield en VBA sans Automation
    Par laurentcr dans le forum Access
    Réponses: 7
    Dernier message: 02/10/2006, 14h43
  4. Réponses: 9
    Dernier message: 05/08/2006, 11h44
  5. Réponses: 1
    Dernier message: 14/10/2005, 15h36

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