Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VBA] Bug étrange sur le coller

4 réponses
Avatar
HD
Bonjour,

J'ai un bug étrange sur une macro VBA pourtant toute simple...

Je copie manuellement des données provenant d'un logiciel.

Lorsque je colle manuellement ces données sur une feuille Excel, j'ai bien
les données qui se collent correctement... par contre si j'utilise une macro
pour coller les données j'obtiens par exemple à la place du 0 la valeur
0,000 alignée à gauche comme du texte et à la place des autres données
numériques j'obtiens le montant multiplié par 1000.... et sur les dates j'ai
le bug de la date américaine (mois et jours inversés).

Il suffit juste d'avoir ces deux lignes:
Range("A1").Select
ActiveSheet.Paste
pour avoir le bug... si je colle à la main tout est bon.

J'ai également testé avec:
ActiveSheet.PasteSpecial Format:="Texte", Link:=False, DisplayAsIcon:= False
mais cela n'y change rien...

A savoir que lorsque je colle à la main et que je fais un clic-droit/collage
spécial j'ai le choix entre coller en "Texte Unicode" ou en "Texte". Mais
pour l'un et l'autre cela fonctionne sans bug.

Avez vous une idée de ce qu'il peut se passer ?

Cordialement,

HD

4 réponses

Avatar
MichD
Bonjour,

Ce n'est pas vraiment un "bogue"!

Comme tu utilises VBA, Excel utilise toujours dans cette fenêtre
le format américain des dates "Mois/jour/année" à moins que tu
lui indiques de faire autrement...C'est la même chose concernant
le séparateur décimal de VBA qui est le point et non la virgule.

Tu peux récupérer dans une variable X le contenu du presse-papier.
Selon son contenu, tu traites la donnée X pour obtenir ce que tu
désires afficher dans la cellule. Comme je ne sais pas le vrai contenu
de X, je vais te donner seulement la première partie, c'est-à-dire comment
récupérer le contenu du presse-papier dans la variable X.

Pour utiliser l'objet "DataObject", tu dois charger la bibliothèque suivante
:
"Microsoft Forms 2.0 Object Library". C'est la même bibliothèque que
lorsque tu insères un formulaire (userform) dans un projetVBA

'----------------------------------
Sub test()
Dim MyDataObj As New DataObject, X As Variant
MyDataObj.GetFromClipboard
Msgbox MyDataObj.GetText()

'Appliquer un traitement selon ce que contient X

End Sub
'----------------------------------

Pour définir le traitement, il faut savoir ce que contient exactement
la variable X selon différentes valeurs que l'on copie dans le presse-papier

MichD
-----------------------------------------------------------
Avatar
MichD
Si tu éprouves des difficultés à modifier la variable X
pour afficher ce que tu veux dans les cellules de la feuille de calcul,
fais quelques copier-coller typiques des valeurs de ton application
externe vers NotePad et donne-nous le contenu de NotePad.
Cela évitera le prisme d'Excel.

MichD
---------------------------------------------------------------
Avatar
HD
Il n'y a aucun moyen de forcer Excel à prendre en compte le bon formatage ?
C'est quand même dommage de voir qu'avec le copier/coller manuel tout est
correct alors que via le copier/coller VBA tout me ressort formaté n'importe
comment... :-/

@+
HD
Avatar
MichD
| Il n'y a aucun moyen de forcer Excel à prendre en compte le bon formatage
?

J'ai déjà émis 2 messages sur ta problématique. Je t'ai expliqué pourquoi et
comment le faire en VBA. Je t'ai même demandé que tu nous donnes quelques
exemples des "copier" que tu fais dans ton application externe vers NotePad
afin d'observer le contenu du presse-papier avant qu'Excel (feuille de
calcul)
le modifie.

La réalité, faire ce que tu désires en VBA c'est possible, mais encore
faut-il que tu répondes
à la question posée et que tu nous retournes le contenu à traiter du
presse-papier.


MichD
---------------------------------------------------------------