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.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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
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
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
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.
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.
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.
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
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... :-/
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
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.
| 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.
| 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.