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

[VBA] Bug vba sur un copier/coller multiplier par 1

11 réponses
Avatar
HD
Bonjour,

J'ai des colonnes avec des nombres considérés comme étant du texte.

Lorsque je fais manuellement un copier d'une cellule avec une valeur 1
et un coller sur ces colonnes "multiplier par" cela me transforme bien
les nombres considérés en texte comme nombre (alignement à droite).

Lorsque je fais la manip en VBA cela ne fonctionne pas. Rien ne change.

Range("Z1").Value = 1
Range("Z1").Copy
Range(Cells(2, 7), Cells(lMax, 16)).Select
Selection.PasteSpecial Paste:=xlValue, Operation:=xlMultiply,
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False

la plage sélectionnée est la bonne, je n'ai aucun message d'erreur, le
format des cellules est bien en nombre et pourtant...

Surtout que j'ai déjà utilisé cette macro sur d'autres classeurs et cela
à fonctionné.

D'après ce que j'ai vu sur internet d'autres personnes ont eu le souci.

Avez vous une idée de qui peut produire ce souci ?

Cordialement,
HD

10 réponses

1 2
Avatar
DanielCo
Bonjour,
Selection.PasteSpecial Operation:=xlMultiply
fonctionne, pour moi.
Cordialement.
Daniel
Bonjour,
J'ai des colonnes avec des nombres considérés comme étant du texte.
Lorsque je fais manuellement un copier d'une cellule avec une valeur
1 et un coller sur ces colonnes "multiplier par" cela me transforme
bien les nombres considérés en texte comme nombre (alignement à
droite).
Lorsque je fais la manip en VBA cela ne fonctionne pas. Rien ne
change.
Range("Z1").Value = 1
Range("Z1").Copy
Range(Cells(2, 7), Cells(lMax, 16)).Select
Selection.PasteSpecial Paste:=xlValue, Operation:=xlMultiply,
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
la plage sélectionnée est la bonne, je n'ai aucun message d'erreur,
le format des cellules est bien en nombre et pourtant...
Surtout que j'ai déjà utilisé cette macro sur d'autres classeurs et
cela à fonctionné.
D'après ce que j'ai vu sur internet d'autres personnes ont eu le
souci.
Avez vous une idée de qui peut produire ce souci ?
Cordialement,
HD
Avatar
isabelle
bonjour HD,
essaie en mettant la plage au format Général avant la transformation xlMultiply
Range(Cells(2, 7), Cells(lMax, 16)).NumberFormat = "General"
isabelle
Le 2016-10-28 à 10:16, HD a écrit :
Bonjour,
J'ai des colonnes avec des nombres considérés comme étant du texte.
Lorsque je fais manuellement un copier d'une cellule avec une valeur 1 et un
coller sur ces colonnes "multiplier par" cela me transforme bien les nombres
considérés en texte comme nombre (alignement à droite).
Lorsque je fais la manip en VBA cela ne fonctionne pas. Rien ne change.
Range("Z1").Value = 1
Range("Z1").Copy
Range(Cells(2, 7), Cells(lMax, 16)).Select
Selection.PasteSpecial Paste:=xlValue, Operation:=xlMultiply,
SkipBlanks:úlse, Transpose:úlse
Application.CutCopyMode = False
la plage sélectionnée est la bonne, je n'ai aucun message d'erreur, le format
des cellules est bien en nombre et pourtant...
Surtout que j'ai déjà utilisé cette macro sur d'autres classeurs et cela à
fonctionné.
D'après ce que j'ai vu sur internet d'autres personnes ont eu le souci.
Avez vous une idée de qui peut produire ce souci ?
Cordialement,
HD
Avatar
HD
Selection.PasteSpecial Operation:=xlMultiply
fonctionne, pour moi.

Cela ne fonctionne pas chez moi en VBA. Je n'ai aucun message d'erreur.
Par contre cela fonctionne lorsque je fais manuellement la procédure.
Je suis d'accord avec vous pour le reste, habituellement cette procédure
VBA fonctionne parfaitement, je l'utilise sur d'autres classeurs. Mais
là je ne sais pas pourquoi c'est sans effet. J'ai fait des recherches
sur internet et à priori d'autres personnes ont été dans mon cas... mais
je n'ai pas vu de solution.
@+
HD
Avatar
HD
essaie en mettant la plage au format Général avant la transformation
xlMultiply
Range(Cells(2, 7), Cells(lMax, 16)).NumberFormat = "General"

Cela ne change rien.
@+
HD
Avatar
HD
Le classeur était en xlsb, j'ai tenté en l'enregistrant en xls mais cela
bug toujours.
J'ai supprimé complètement la feuille où se trouve les données pour en
créer une vierge où importer les données mais cela bug toujours.
Les données brutes proviennent d'un fichier csv que j'ouvre via ce
script:
Workbooks.OpenText Filename:=NomFichier, StartRow:=1, _
DataType:=xlDelimited, TextQualifier:=xlDoubleQuote,
ConsecutiveDelimiter _
:=True, Semicolon:=True, DecimalSeparator:=".", Local:=True
puis les données sont collées sur mon classeur Excel via un
Selection.PasteSpecial Paste:=xlPasteValues
où je ne colle donc que les valeurs. Je dois faire un remplacement du
"." par une "," afin d'avoir une valeur qui soit en nombre et c'est à ce
moment là que j'ai le souci des données considérées en texte (alignement
gauche) et non en nombre.
@+
HD
Avatar
MichD
Bonjour,
Essaie comme ceci :
À cause de la méthode Sendkeys, cette macro doit être lancée
obligatoirement à partir de la feuille de calcul / fenêtre des macros
La séquence des lettres de la commande "Sendkeys" est adaptée pour
la version française Excel 2007 à 2016.
'-----------------------------------------------------
Sub Test()
'Tu adaptes le nom de l'onglet de la feuille
'où sont tes données
With Worksheets("Feuil1")
.Select
'Tu places 1 dans une cellule de ton choix
.Range("Z1").Value = 1
'Remplace J par la lettre de la colonne de ton application
With Range(Cells(2, 7), Cells(lMax, 16))
.Replace Chr(160), ""
.NumberFormat = "General"
.Select
End With
'Envoie la valeur 1 dans le presse-papier
.Range("Z1").Copy
'Séquence des commandes que tu ferais
'si tu utilisais les lettres du menu pour
'effectuer le collage special
SendKeys "%egvm" & "~"
' SendKeys "%lvgvm" & "~"
'Alt + L + V + G+V+M
DoEvents
'Efface le contenu de H1
.Range("Z1")= ""
.Cells(2, 7).Select
End With
Application.CutCopyMode = False
End Sub
'-----------------------------------------------------
MichD
Avatar
HD
Bonjour MichD,
Effectivement via le sendkey pour simuler la manipulation cela
fonctionne bien. Par contre, d'une version Excel à l'autre je risque
peut être à terme d'avoir des soucis en cas de changement de raccourcis
clavier pour obtenir un copier/coller avec multiplication.
Sinon, j'avai également eu en solution de rechange :
For Each c In Range(Cells(2, 7), Cells(lMax, 16))
c.Value = c.Value * 1
Next c
qui fonctionne aussi mais ce n'est pas optimisé. Cela va que je n'ai
qu'un nombre de cellule en dessous du millier mais si je m'étais trouvé
dans un cas avec des millions de cellules ça aurait été plus
préjudiciable.
Bizarre qu'il y'ai des cas où le Selection.PasteSpecial
Operation:=xlMultiply ne fonctionne pas... Je n'ai pas réussi à trouver
le scénario du bug. Peut être y'a t il un lien vers l'origine csv des
données ?
@+
HD
Avatar
MichD
Quelle est la version d'Excel qui pose problème avec cette ligne de code
Selection.PasteSpecial Operation:=xlMultiply
Peux-tu publier un échantillon de ton classeur (seulement la colonne sur laquelle
tu effectues l'opération en utilisant Cjoint.com. Tu nous redonnes ici l'adresse obtenue.
MichD
"HD" a écrit dans le message de groupe de discussion : nvcn72$skh$
Bonjour MichD,
Effectivement via le sendkey pour simuler la manipulation cela
fonctionne bien. Par contre, d'une version Excel à l'autre je risque
peut être à terme d'avoir des soucis en cas de changement de raccourcis
clavier pour obtenir un copier/coller avec multiplication.
Sinon, j'avai également eu en solution de rechange :
For Each c In Range(Cells(2, 7), Cells(lMax, 16))
c.Value = c.Value * 1
Next c
qui fonctionne aussi mais ce n'est pas optimisé. Cela va que je n'ai
qu'un nombre de cellule en dessous du millier mais si je m'étais trouvé
dans un cas avec des millions de cellules ça aurait été plus
préjudiciable.
Bizarre qu'il y'ai des cas où le Selection.PasteSpecial
Operation:=xlMultiply ne fonctionne pas... Je n'ai pas réussi à trouver
le scénario du bug. Peut être y'a t il un lien vers l'origine csv des
données ?
@+
HD
Avatar
MichD
'---------------------------------------
Effectivement via le sendkey pour simuler la manipulation cela
fonctionne bien. Par contre, d'une version Excel à l'autre je risque
peut être à terme d'avoir des soucis
'---------------------------------------
La procédure que je t'ai soumise fonctionne pour toutes les versions françaises
d'Excel de 2007 à 2016. (Évidemment, je n'ai pas fait un test explicite sur chacune
de ces versions.)
MichD
Avatar
MichD
Un petit détail en passant, de mémoire, la procédure soumise peut s'appliquer
à une plage de cellules contenant des cellules avec du texte sans causer le
moindre problème.
MichD
1 2