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 :

Copier coller en supprimant le retour à la ligne


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut Copier coller en supprimant le retour à la ligne
    Bonjour,

    Je viens vers vous pour m'aider à trouver une solution à mon problème.
    J'ai un tableau Excel avec du texte dans les champs d'une colonne avec des retours à la ligne. Je souhaite diviser ce texte en deux colonnes distinctes soit avec une formule soit en VBA comme ci-dessous.
    Le nombre de caractère du texte est vaviable sur l'ensemble des retours à la ligne.

    Texte A
    Texte B
    Texte C
    Texte A Texte B
    Texte C
    Merci pour votre aide.

  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
    Bonjour,
    Peux-tu être plus précis sur les règles ? Je comprends ceci :


    1
    A
    B
    C
    2
    Texte A
    Texte B
    Texte C
    Texte A Texte B
    Texte C
    3

    OU

    1
    A
    B
    C
    2
    Texte A
    Texte B
    Texte C
    Texte A Texte B
    3
    Texte C

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonjour,

    Par VBA.
    Tu peux créer une variable tableau à 1 dimension (Array) par la méthode Split

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub RETOURL()
     
    Dim larray As Variant
    Dim i As Byte
     
    larray = Split(Worksheets("Feuil2").Range("A1").Value, Chr(10))
    For i = LBound(larray) To UBound(larray)
            Debug.Print larray(i)
    Next i
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  4. #4
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Je souhaite avoir ça:
    Texte A
    Texte B
    Texte C
    Texte A Texte B
    Texte C
    Merci

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Nous sommes d'accord


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub RETOURL()
     
    Dim larray As Variant
    Dim i As Byte
     
    With Worksheets("Feuil2").Range("A1")
            larray = Split(.Value, Chr(10))
            .Offset(0, 1).Value = larray(0)
            .Offset(0, 2).Value = larray(1) & Chr(10) & larray(2)
    End With
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  6. #6
    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
    Pour s'amuser en formules.

    En B1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =GAUCHE(A1;TROUVE(CAR(10);A1)-1)
    En C1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =STXT(A1;CHERCHE(CAR(10);A1)+1;CHERCHE(CAR(10);A1;CHERCHE(CAR(10);A1)+1)-CHERCHE(CAR(10);A1)-1)&CAR(10)&DROITE(A1;NBCAR(A1)-CHERCHE(CAR(10);A1;CHERCHE(CAR(10);A1)+1)-0)

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Salut QuestVBA,

    Certes, nous ne sommes pas sur le forum VBA.
    Ta formulation doit être valable.
    Mais tu comprends qu'au regard de ta formule, mieux vaut passer par VBA.
    D'autant que la simples notion de tableau à une dimension est abordée, la méthode Split étant un cas particulier.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  8. #8
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci pour vos premiéres réponse.

    En VBA le code marche avec la première cellule A1 mais pas avec les suivantes
    Avec la formule, ça marche sur en B1 mais pas en C1. En ligne 2 ça marche pour B2 et C2 puis aussi pour les suivantes

    Nom : Capture2.jpg
Affichages : 192
Taille : 28,2 Ko

  9. #9
    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
    Oui, si tu n'as que deux éléments alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =DROITE(A1;NBCAR(A1)-NBCAR(GAUCHE(A1;TROUVE(CAR(10);A1)-1))-1)

  10. #10
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Les cellules à découper se situent en colonne A et se décomposent en colonnes B (1ère partie) et C (concaténation de toutes les autres parties)
    Nous sommes d'accord

    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
    Option Explicit
     
    Sub RETOURL()
     
    Dim derligne As Integer
    Dim larray As Variant
    Dim i As Integer
    Dim lachaine As String
    Dim j As Byte
     
    With Worksheets("Feuil2")
            derligne = .Cells(.Rows.Count, 1).End(xlUp).Row
            For i = 1 To derligne
                    With .Cells(i, 1)
                            larray = Split(.Value, Chr(10))
                            .Offset(0, 1).Value = larray(0)
                            lachaine = ""
                            For j = 1 To UBound(larray)
                                    lachaine = lachaine & larray(j) & Chr(10)
                            Next j
                            lachaine = Left(lachaine, Len(lachaine) - 1)
                            .Offset(0, 2).Value = lachaine
                    End With
            Next i
    End With
     
    End Sub

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  11. #11
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut
    Merci beaucoup, ça marche tiptop. Sauf pour des cas particuliers que je n'avais pas vu.

    Nom : Capture15.jpg
Affichages : 197
Taille : 43,6 Ko

    Dans tous les cas et

  12. #12
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Non, non!

    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
    29
    30
    31
    32
    Option Explicit
     
    Sub RETOURL()
     
    Dim derligne As Integer
    Dim larray As Variant
    Dim i As Integer
    Dim lachaine As String
    Dim j As Byte
     
    With Worksheets("Feuil2")
            derligne = .Cells(.Rows.Count, 1).End(xlUp).Row
            For i = 1 To derligne
                    With .Cells(i, 1)
                            larray = Split(.Value, Chr(10))
                            If UBound(larray) = 0 Then
                                    .Offset(0, 1).Value = .Value
                                    .Offset(0, 2).Value = .Value
                            Else
                                    .Offset(0, 1).Value = larray(0)
                                    lachaine = ""
                                    For j = 1 To UBound(larray)
                                            lachaine = lachaine & larray(j) & Chr(10)
                                    Next j
                                    lachaine = Left(lachaine, Len(lachaine) - 1)
                                    .Offset(0, 2) = lachaine
                            End If
                    End With
            Next i
    End With
     
    End Sub
    L'idéal, c'est que tu comprennes tous les éléments ici présentés (Méthodes et Propriétés).
    En cas d'interrogation, tu reviens.
    Par cette démarche, beaucoup de rigueur et la fréquentation du forum, la maîtrise ne sera pas loin.

    Bien Cordialement.

    Marcel

    Dernier billet:
    Suppression des doublons d'un tableau structuré, gestion d'un array

    Pas de messagerie personnelle pour vos questions, s'il vous plaît. La réponse peut servir aux autres membres. Merci.


  13. #13
    Futur Membre du Club
    Homme Profil pro
    Webmaster
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 6
    Points
    6
    Par défaut


    Je n'ai pas encore tout compris c'est bien poussé pour mon petit niveau en VBA et formule. Mais je vais finir par comprendre.

    Merci beaucoup.

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Salut
    Dans la fenêtre de codes de l'onglet (Alt F11)
    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
    Option Explicit
    Sub e()
       Dim Plage As Range, R As Range, A, n As Byte, k As Byte
      Set Plage = Range("A1", [A65000].End(xlUp)) 'à adapter
      [B:C] = ""  'nettoyage en cas de changement de valeur
      For Each R In Plage
        A = Split(R, vbLf) 'array des termes
        Select Case UBound(A) 'test de la dimension du tableau obtenu
          Case -1: R(1, 2) = "" 'cellule vide
          Case 0: R(1, 2) = A(0) 'un seul retour
          Case Else
            R(1, 2) = A(0)
            k = InStr(R, vbLf) 'rang du premier retour
            R(1, 3) = Right(R, Len(R) - k)  'droite après celui-ci, retours compris
        End Select
      Next
    End Sub
    Remarque : ici, il est prévu de traiter aussi les cellules vides

    sans les retours
    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
    Option Explicit
    Sub e()
      Dim Plage As Range, R As Range, A, n As Byte
      Set Plage = Range("A1", [A65000].End(xlUp)) 'à adapter
      [B:C] = ""  'nettoyage en cas de changement de valeur
      For Each R In Plage
        A = Split(R, vbLf) 'array des termes
        Select Case UBound(A) 'test de la dimension du tableau obtenu
          Case -1: R(1, 2) = "" 'cellule vide
          Case 0: R(1, 2) = A(0) 'un seul retour
          Case Else
          R(1, 2) = A(0)
          For n = 1 To UBound(A): R(1, 3) = R(1, 3) & A(n): Next
        End Select
      Next
    End Sub

Discussions similaires

  1. Macro pour Copier/Coller et Supprimer la ligne
    Par OMAREH dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/05/2017, 08h51
  2. [XL-2003] Copier coller et supprimer des lignes filtrées Erreur 1004
    Par Denis_67 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/04/2015, 09h30
  3. [MySQL] Supprimer les retours à la ligne
    Par p0Kep0K dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 18/06/2012, 11h54
  4. [CSV] supprimer les retours à la ligne
    Par illegalsene dans le forum Langage
    Réponses: 3
    Dernier message: 09/01/2006, 16h14
  5. [RegEx] supprimer les retours à la ligne
    Par illegalsene dans le forum Langage
    Réponses: 4
    Dernier message: 21/10/2005, 10h53

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