Copier une plage de valeur visible avec un séparateur ";"

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 :

Et je voudrais ceci :

Merci d'avance pour votre aide

Bonsoir,

Un truc comme ça :

Sub TabReplace()
  Columns("C:C").Replace What:=Chr(9), Replacement:=";"
End Sub

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

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

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

Je voudrais avoir ça :

2

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

Merci d'avance

LordUnreal

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

Hors avec le ; en début de ligne il refuse de prendre les données.

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

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

3classeur-test.xlsm (19.64 Ko)

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

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

de rien...

Bonjour eriiic,

Veuillez m'excuser pour cette réponse tardive, des prérogatives au travail, Je n'ai pas su continuer mon projet.

Je viens de tester, et dans mon fichier réel je ne peux pas le laisser s'adapter au nombre de ligne. J'ai donc repris cette partie de code :

result = Replace(result, vbLf & ";", vbLf)

Que j'ai implémenté dans la première version et ça fonctionne nickel

Voici le code au complet :

Private Sub Copier_Click()
    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:O74").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
        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

Un grand merci pour votre aide (je met le sujet en résolu )

Rechercher des sujets similaires à "copier plage valeur visible separateur"