Copier une plage de valeur visible avec un séparateur ";" Le sujet est résolu

Y compris Power BI, Power Query et toute autre question en lien avec Excel
L
LordUnreal
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 31 décembre 2016
Version d'Excel : 2013 FR

Message par LordUnreal » 5 février 2020, 22:31

Bonjour,

Je souhaite copier une plage de donnée à l'aide d'un bouton dans mon UserForm. Je voudrais que les données copier soit l'ensemble des cellules visibles dans cette plage. Et que quand je les colles dans un autre logiciel en faisant "crtl+v" elles soient sous le format avec un séparateur ";"

Avec mon début de code :
Sub Copier()
    Worksheets("Mesure").Range("C3:O76").SpecialCells(xlCellTypeVisible).Copy
End Sub
J'ai actuellement ceci :
Image

Et je voudrais ceci :
Image

Merci d'avance pour votre aide
Avatar du membre
oxydum
Membre dévoué
Membre dévoué
Messages : 694
Appréciations reçues : 73
Inscrit le : 29 mai 2019
Version d'Excel : 2016 FR

Message par oxydum » 5 février 2020, 22:37

Bonsoir,
Un truc comme ça :
Sub TabReplace()
  Columns("C:C").Replace What:=Chr(9), Replacement:=";"
End Sub
L
LordUnreal
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 31 décembre 2016
Version d'Excel : 2013 FR

Message par LordUnreal » 5 février 2020, 23:00

Bonjour,

Merci pour votre réponse mais malheureusement cela ne fait pas ce que je souhaite.
Je pars d'un tableau sur une feuille excel, et je voudrais obtenir quand je fais "copier" l'ensemble de mes données visibles de la plage en question (ex :"A3:C4") sous la forme avec delimiter ";".

Cela afin de pouvoir coller les données ailleurs, et sans modifier la structure de mon tableau en excel.

Donc je clique sur un bouton "copier" présent sur la feuille excel. Ensuite je vais dans un autre logiciel exemple le bloc note et je fais ctrl+v et j'obtiens les données sous forme
aaa;aaaaa;aaaa;aaaa
bbbb;bbbb;bbb;bbb;bb
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 5 février 2020, 23:35

Bonjour,

Il faut déposer les fichiers (images et xls) sur le forum en cliquant sur Ajouter un fichier.
Là je n'ai pas été voir tes images...
Option Explicit

Private Declare Function OpenClipboard Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function CloseClipboard Lib "user32" () As Long

Sub VidePP()
    OpenClipboard 0
    EmptyClipboard
    CloseClipboard
End Sub

Sub Copier()
    Dim pl As Range, c As Range, result As String, lig As Long
    Dim Presspp As New DataObject
    VidePP
    Set pl = Worksheets("Mesure").Range("C3:O76").SpecialCells(xlCellTypeVisible)
    If Not pl Is Nothing Then
        lig = pl.Row
        For Each c In pl
            If c.Row <> lig Then
                result = result & vbLf
                lig = c.Row
            End If
            result = result & ";" & c.Value
        Next c
        ' activer la référence "Microsoft Form 2.0 Object Library" dans VBA
        With New DataObject
            .SetText Mid(result, 2)
            .PutInClipboard
        End With
    End If
End Sub
eric
2 membres du forum aiment ce message.
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
L
LordUnreal
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 31 décembre 2016
Version d'Excel : 2013 FR

Message par LordUnreal » 6 février 2020, 00:11

Bonjour erric,

Merci pour ta réponse, c'est presque ce que j'ai besoin :)

Je te remet les images :

Au départ quand je colle les données, j'ai ceci :
1.JPG
1.JPG (67.68 Kio) Vu 118 fois
Je voudrais avoir ça :
2.JPG
2.JPG (65.14 Kio) Vu 118 fois

Avec la macro, les données arrivent en brut (voir le haut de l'image), mais j'aurai besoin de les avoirs comme juste en dessous:
Que chaque ligne du classeur excel, soit visible
6.JPG
Merci d'avance
LordUnreal
L
LordUnreal
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 31 décembre 2016
Version d'Excel : 2013 FR

Message par LordUnreal » 6 février 2020, 00:16

Car quand je colle dans le logiciel, pour importer les données.

Il me prend les données en brut (obtenue via la macro) et me les affiches comme ceci :
7.JPG
7.JPG (59.77 Kio) Vu 117 fois
Hors avec le ; en début de ligne il refuse de prendre les données.
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 6 février 2020, 20:00

Bonjour,

tu peux déposer un fichier que j'ai un jeu de données stp ?
J'ai ajouté le vblf un peu plus tard. As-tu testé la dernière version ?
Je n'avais pas trop testé car il se faisait tard...
eric
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
L
LordUnreal
Jeune membre
Jeune membre
Messages : 22
Inscrit le : 31 décembre 2016
Version d'Excel : 2013 FR

Message par LordUnreal » 7 février 2020, 02:03

Bonjour erriic,

Oui j'ai testé la version avec le vblf. Et le résultat obtenue est celui-ci dessus.
Je te met un fichier test avec les données :)
classeur test.xlsm
(19.64 Kio) Téléchargé 2 fois
Il faudrait que quand je colle dans un bloc note par exemple, ça me donne le rendu avec chaque ligne du tableau correspondant à une ligne dans le bloc note, et qui ne commence pas par un ";"


Merci pour ton aide
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 7 février 2020, 09:43

Bonjour,

Ah oui, je n'avais pas prêté attention au ; de début de ligne :
Sub Copier()
    Dim pl As Range, c As Range, result As String, lig As Long
    Dim Presspp As New DataObject
    VidePP
    With Worksheets("Feuil1")
    Set pl = .Range("A1:C1").Resize(.Cells(.Rows.Count, 1).End(xlUp).Row).SpecialCells(xlCellTypeVisible)
    End With
    If Not pl Is Nothing Then
        lig = pl.Row
        For Each c In pl
            If c.Row <> lig Then
                result = result & vbLf
                lig = c.Row
            Else
                result = result & ";" & c.Value
            End If
        Next c
        result = Replace(result, vbLf & ";", vbLf)
        ' activer la référence "Microsoft Form 2.0 Object Library" dans VBA
        With New DataObject
            .SetText Mid(result, 2)
            .PutInClipboard
        End With
    End If
End Sub
J'ai changé aussi la définition de Set pl = qu'il s'adapte automatiquement au nombre de lignes.
eric
1 membre du forum aime ce message.
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Avatar du membre
eriiic
Passionné d'Excel
Passionné d'Excel
Messages : 9'710
Appréciations reçues : 446
Inscrit le : 7 février 2010
Version d'Excel : 2010fr

Message par eriiic » 11 février 2020, 22:36

de rien...
En essayant continuellement, on finit par réussir.
Donc plus ça rate, plus on a de chances que ça marche.
(les Shadoks)

En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Répondre
  • Sujets similaires
    Réponses
    Vues
    Dernier message