Discussion:
VBA, EXCEL & « COPY/PASTE »
(trop ancien pour répondre)
Philippe Dhondt
2005-11-20 11:47:44 UTC
Permalink
Bonjour,

Je copie, via VBA, des data d'une feuille vers une autre



Feuille 1 :

Range("A1:F1).Select

Selection.copy



Feuille 2 :

Range("A1:F1).Select

Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False



Les colonnes des deux feuilles sont formatées en numérique



Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)

Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....

L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....



Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?



Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .



Quelqu'un aurait-il une idée ???



Merci





Philippe Dhondt
François
2005-11-20 12:36:02 UTC
Permalink
Bonjour Philippe,

Essaye l'instruction worksheets("feuil1").range("A1:F1").value =
worksheets("feuil2").range("A1:F1").value
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Jacky
2005-11-20 13:06:25 UTC
Permalink
Bonjour Philippe

Ceci copie les VALEURS des cellules A1 à F1 la feuille 1 vers les mêmes
cellules de la feuille 2
'-----
Worksheets("feuil2").Range("A1:F1").Value =
Worksheets("feuil1").Range("A1:F1").Value
'-----

Et ceci copie les VALEURS+ FORMATS+FORMULES
'------
Worksheets("feuil1").Range("A1:F1").Copy Worksheets("feuil2").Range("A1")
'------

Salutations
JJ
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Jacky
2005-11-20 13:47:39 UTC
Permalink
Re...
Il serait aussi sympathique de ta part ou pour le moins encourageant pour
ceux qui proposent des solutions (gratuites), que tu nous dises si les
réponses qui te sont faites ou ceux qui t'on déjà étaient faites donnent
satisfactions.

Salutations
JJ
Post by François
Bonjour Philippe
Ceci copie les VALEURS des cellules A1 à F1 la feuille 1 vers les mêmes
cellules de la feuille 2
'-----
Worksheets("feuil2").Range("A1:F1").Value =
Worksheets("feuil1").Range("A1:F1").Value
'-----
Et ceci copie les VALEURS+ FORMATS+FORMULES
'------
Worksheets("feuil1").Range("A1:F1").Copy Worksheets("feuil2").Range("A1")
'------
Salutations
JJ
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées
le
Post by Philippe Dhondt
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même
chose
Post by François
en
Post by Philippe Dhondt
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre,
mais
Post by Philippe Dhondt
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Jacky
2005-11-20 14:15:01 UTC
Permalink
Ouppps
On lira:
ou celles qui t'ont déjà été faites te donnent satisfactions.
Post by Jacky
Re...
Il serait aussi sympathique de ta part ou pour le moins encourageant pour
ceux qui proposent des solutions (gratuites), que tu nous dises si les
réponses qui te sont faites ou ceux qui t'on déjà étaient faites donnent
satisfactions.
Salutations
JJ
Post by François
Bonjour Philippe
Ceci copie les VALEURS des cellules A1 à F1 la feuille 1 vers les mêmes
cellules de la feuille 2
'-----
Worksheets("feuil2").Range("A1:F1").Value =
Worksheets("feuil1").Range("A1:F1").Value
'-----
Et ceci copie les VALEURS+ FORMATS+FORMULES
'------
Worksheets("feuil1").Range("A1:F1").Copy
Worksheets("feuil2").Range("A1")
Post by Jacky
Post by François
'------
Salutations
JJ
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks
Post by François
Post by Philippe Dhondt
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées
le
Post by Philippe Dhondt
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même
chose
Post by François
en
Post by Philippe Dhondt
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre,
mais
Post by Philippe Dhondt
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces
données
Post by François
Post by Philippe Dhondt
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
anonymousA
2005-11-20 13:54:12 UTC
Permalink
Bonjour,

une autre écriture possible qui ne pose pas de problème sur des copies
de valeurs numériques.

'copier l'intégralité des propriétés de la zone , y.c donc les valeurs
et leurs formats

[A1:F1].Copy [Feuil2!A1]

'copier seulement les valeurs de la zone mais ne les convertit pas en texte

[Feuil2!A1:F1].Value = [A1:F1].Value

A+
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Jacky
2005-11-20 14:21:09 UTC
Permalink
Bonjour,

Moi qui suis fervent des "[]"; oublier ceci,
honte à moi.
;o))
JJ
Post by Philippe Dhondt
Bonjour,
une autre écriture possible qui ne pose pas de problème sur des copies
de valeurs numériques.
'copier l'intégralité des propriétés de la zone , y.c donc les valeurs
et leurs formats
[A1:F1].Copy [Feuil2!A1]
'copier seulement les valeurs de la zone mais ne les convertit pas en texte
[Feuil2!A1:F1].Value = [A1:F1].Value
A+
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
anonymousA
2005-11-20 14:26:17 UTC
Permalink
Bonjour,

N'aies pas honte,car personnellement, je ne suis guère un fervent adepte
du Captitaine Crochet mais c'était juste pour le fun.

Cordialement,

A+
Post by Philippe Dhondt
Bonjour,
Moi qui suis fervent des "[]"; oublier ceci,
honte à moi.
;o))
JJ
Post by Philippe Dhondt
Bonjour,
une autre écriture possible qui ne pose pas de problème sur des copies
de valeurs numériques.
'copier l'intégralité des propriétés de la zone , y.c donc les valeurs
et leurs formats
[A1:F1].Copy [Feuil2!A1]
'copier seulement les valeurs de la zone mais ne les convertit pas en
texte
Post by Philippe Dhondt
[Feuil2!A1:F1].Value = [A1:F1].Value
A+
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,
SkipBlanks
Post by Philippe Dhondt
Post by Philippe Dhondt
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées
le
Post by Philippe Dhondt
Post by Philippe Dhondt
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même
chose en
Post by Philippe Dhondt
Post by Philippe Dhondt
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre,
mais
Post by Philippe Dhondt
Post by Philippe Dhondt
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces
données
Post by Philippe Dhondt
Post by Philippe Dhondt
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Philippe Dhondt
2005-11-20 14:39:29 UTC
Permalink
Bonjour,
Post by Jacky
Re...
Il serait aussi sympathique de ta part ou pour le moins encourageant pour
ceux qui proposent des solutions (gratuites), que tu nous dises si les
réponses qui te sont faites ou ceux qui t'on déjà étaient faites donnent
satisfactions.
Salutations
JJ
Je teste ces reponses et vous tiens au courant.


Cordialement


Philippe Dhondt
Post by Jacky
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Philippe Dhondt
2005-11-20 15:09:11 UTC
Permalink
Re,

La solution :
Worksheets("feuil2").Range("A1:F1").Value =
Worksheets("feuil1").Range("A1:F1").Value

bien que plus elegante (moins de lignes) ne fonctionnent pas non plus. (Les
data arrivent toujours dans la feuille destination sous format texte)


Petite precision, les feuilles se trouvent dans des classeurs differents...

En fait, il s'agit d'une appli boursière:
j'ouvre un classeur "Indice", puis j'ouvre un par un les classeurs "Titres"
des titres composants cette indice.
Je ramene les derniers cours de chaque titre dans le classeur Indice pour
effectuer ensuite une batterie de calculs.

J'espère que cette precision sera utile.

Merci


@+
Jacky
2005-11-20 19:35:40 UTC
Permalink
Re...
Post by Jacky
(Les data arrivent toujours dans la feuille destination sous format texte)
Si les datas arrivent au format texte après la copie , c'est quelles sont au
format texte dans le fichier de départ, il n'y a pas de modification en
cours de route.
N'y aurait-il pas une histoire de reconnaissance du Symbole décimale ??
Sinon mets un échantillons des données sur:
http://cjoint.com/index.php


JJ
Post by Jacky
Re,
Worksheets("feuil2").Range("A1:F1").Value =
Worksheets("feuil1").Range("A1:F1").Value
bien que plus elegante (moins de lignes) ne fonctionnent pas non plus. (Les
data arrivent toujours dans la feuille destination sous format texte)
Petite precision, les feuilles se trouvent dans des classeurs
differents...
Post by Jacky
j'ouvre un classeur "Indice", puis j'ouvre un par un les classeurs "Titres"
des titres composants cette indice.
Je ramene les derniers cours de chaque titre dans le classeur Indice pour
effectuer ensuite une batterie de calculs.
J'espère que cette precision sera utile.
Merci
@+
LSteph
2005-11-20 18:15:57 UTC
Permalink
Bonsoir Philippe,
Essaie ceci:
'***
Sub test2()
Feuil2.Range("a1:f1") = Feuil1.Range("a1:f1")
End Sub
'***

'Sinon chez moi entre deux feuilles ceci fonctionne sans le pb évoqué:
'***
Sub test()

Feuil1.Range("A1:F2").Copy
Feuil2.Activate
Range("A1:F2").Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=False

End Sub
'***
'lSteph
Post by Philippe Dhondt
Bonjour,
Je copie, via VBA, des data d'une feuille vers une autre
Range("A1:F1).Select
Selection.copy
Range("A1:F1).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks
:=False, Transpose:=False
Les colonnes des deux feuilles sont formatées en numérique
Quelque soient les options utilisées dans le « Paste », les data copiées le
sont en Texte !!!!!!!!!!!! (Number stored as text)
Reformater, après le paste, les cellules en numeriques via VBA ne change
rien....
L'aide Excel propose de multiplier les cellules par 1, mais la même chose en
VBA ne change rien ....
Dans la feuille, le menu contextuel permet de les convertir en nombre, mais
quid en VBA ?
Evidemment, la suite de mon code doit obligatoirement utiliser ces données
copiées, et ce en nombre .
Quelqu'un aurait-il une idée ???
Merci
Philippe Dhondt
Philippe Dhondt
2005-11-21 07:52:10 UTC
Permalink
Bingo



« N'y aurait-il pas une histoire de reconnaissance du Symbole décimale ? »



Je pense qu'effectivement tout le problème vient de là :



Dans les données passées, l'une d'entre-elle est au format date : pas de
problème.

Une autre est numerique, mais ses valeurs sont toujours arrondies à l'unité
: pas de problème.

Seules les data possédant le symbole décimale posent problème.

Après avoir exécuter le code VBA, je selectionne les data transférées et je
remplace (Ctrl-H) la virgule par une virgule (ok, c'est étrange mais bon) et
, Oh Magie, les données redevienneent numérique.



J'inclu donc ceci dans le VBA juste après le transfert des données :

Columns("B:E").Select

Selection.Replace What:=",", Replacement:=",", LookAt:=xlPart, _

SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _

ReplaceFormat:=False

Et, Oh rage, Oh désespoir, rien ne change .... ???

Mais data refusent obstinement de passer de texte à numérique via le VBA .



Une idée ?
Post by Philippe Dhondt
Merci
Philippe Dhondt
Merci
Philippe Dhondt
Philippe Dhondt
2005-11-21 08:19:28 UTC
Permalink
Re,



Voici encore un indice :



Dans le code VBA j'ai ceci : ActiveCell.FormulaR1C1 = "=(E2-DDBY!E2)/E2"

Les cellules E2 sont toutes 2 formatées en %



Le resultat obtenu dans cette cellule après execution du code est :
=('E2'-DDBY!'E2')/'E2' !!!!!!!





Dur dur de rester Zen.



Philippe Dhondt
JpPradier
2005-11-21 08:37:15 UTC
Permalink
Bonjour Philippe

Essaie en remplaçant
ActiveCell.FormulaR1C1 = "=(E2-DDBY!E2)/E2"

par
ActiveCell.FormulaLocal = "=(E2-DDBY!E2)/E2"

j-p
Philippe Dhondt
2005-11-21 11:47:32 UTC
Permalink
Cela fonctionne, merci.

Je vais maintenant essayer de comprendre la différence entre les deux.

@+
Post by François
Bonjour Philippe
Essaie en remplaçant
ActiveCell.FormulaR1C1 = "=(E2-DDBY!E2)/E2"
par
ActiveCell.FormulaLocal = "=(E2-DDBY!E2)/E2"
j-p
Philippe Dhondt
2005-11-21 13:43:39 UTC
Permalink
Re,

vous trouverez xci-après un exemple du problème:

http://cjoint.com/?lvoNiE6dMj

un classeur "Indice" & un calsseur "Titre"
le classeur indice comprend un module avec les exemples de code
le résultat obtenu est toujours du texte.

Merci à toutes et à tous



Philippe Dhondt
Jacky
2005-11-21 15:16:10 UTC
Permalink
Re...
A essayer....
En debut de macro,
ceci devrait transformer les colonnes (B:E) en format nombre utilisable
'-----------
Columns("B:E").Select
Selection.NumberFormat = "0.00"
Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart,
SearchOrder:=xlByRows, MatchCase:=False
'-----------
Salutations
JJ
Post by Philippe Dhondt
Re,
http://cjoint.com/?lvoNiE6dMj
un classeur "Indice" & un calsseur "Titre"
le classeur indice comprend un module avec les exemples de code
le résultat obtenu est toujours du texte.
Merci à toutes et à tous
Philippe Dhondt
Philippe Dhondt
2005-11-21 19:48:28 UTC
Permalink
Bravo et merci, cette solution fonctionne

Je ne comprends trop d'où vient le problème et espère trouver un peu de doc
là-dessus.

Encore une fois , merci

Cordialement

Philippe Dhondt
Post by Jacky
Re...
A essayer....
En debut de macro,
ceci devrait transformer les colonnes (B:E) en format nombre utilisable
'-----------
Columns("B:E").Select
Selection.NumberFormat = "0.00"
Selection.Replace What:=",", Replacement:=".", LookAt:=xlPart,
SearchOrder:=xlByRows, MatchCase:=False
'-----------
Salutations
JJ
Post by Philippe Dhondt
Re,
http://cjoint.com/?lvoNiE6dMj
un classeur "Indice" & un calsseur "Titre"
le classeur indice comprend un module avec les exemples de code
le résultat obtenu est toujours du texte.
Merci à toutes et à tous
Philippe Dhondt
Continuer la lecture sur narkive:
Loading...