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

macro collage spécial

7 réponses
Avatar
lukkyy
Bonjour, voici le problème que je rencontre,

je traivail sur une base de données extraite d'un autre logiciel, dans cette base il y a un champ date, avec les dates en format texte, donc pour pouvoir faire des calculs avec je copi une cellule avec 1, et fais un collage spécial => multiplication pour convertir le format texte en nombre, jusque la tout va bien.
mais lorsque je passe par une marco, seulement certaines cellules se transforment, or la base est la même que lorsque que je le fais manuellement, donc je ne comprends pas.

voici la macro :

Sub date_texte_en_numerique()
'
' date_texte_en_numerique1 Macro
' Macro enregistrée le 26/10/2011 par DCN
'

'
Range("A3").Select
Application.CutCopyMode = False
Selection.Copy
Range("J2").Select
ActiveWindow.ScrollRow = 17
ActiveWindow.ScrollRow = 32
...
ActiveWindow.ScrollRow = 9957
Range("J2:J10000").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False
ActiveWindow.SmallScroll Down:=-6
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A1").Select
End Sub

espérant que ma question est clair, et qu'il existe une solution

7 réponses

Avatar
MichD
Bonjour,

Essaie comme ceci:

Attention : La macro doit obligatoirement être appelée à partir de l'interface
de la feuille de calcul soit par un bouton soit à partir de la fenêtre affichant
les macros (raccourci clavier Alt + F8) . Si tu exécutes la macro directement
dans la fenêtre de l'éditeur de code, cela ne fonctionnera pas.

Prend le temps de lire la macro, tu devras l'adapter quelque peu à ton environnement.

Les dates avec Excel, c'est un réel plaisir ! N'est-ce pas ? ;-)

'----------------------------------------------
Sub Test()
'Tu adaptes le nom de l'onglet de la feuille
'où sont tes données
With Worksheets("Feuil2")
.Select
'Tu places 1 dans une cellule de ton choix
.Range("H1") = 1
'Remplace J par la lettre de la colonne de ton application
With .Range("J1:J" & .Range("J65536").End(xlUp).Row)
'Le format final de date que tu veux avoir...
.NumberFormat = "DD-MM-YY"
.Select
End With
'Envoie la valeur 1 dans le presse-papier
.Range("H1").Copy
'Séquence des commandes que tu ferais
'si tu utilisais les lettres du menu pour
'effectuer le collage special
SendKeys "%egvm" & "~"
DoEvents
'Efface le contenu de H1
.Range("H1") = ""
.Range("J1").Select
End With
Application.CutCopyMode = False
End Sub
'----------------------------------------------


MichD
------------------------------------------
"lukkyy" a écrit dans le message de groupe de discussion :

Bonjour, voici le problème que je rencontre,

je traivail sur une base de données extraite d'un autre logiciel, dans cette
base il y a un champ date, avec les dates en format texte, donc pour pouvoir
faire des calculs avec je copi une cellule avec 1, et fais un collage spécial =>
multiplication pour convertir le format texte en nombre, jusque la tout va bien.

mais lorsque je passe par une marco, seulement certaines cellules se
transforment, or la base est la même que lorsque que je le fais manuellement,
donc je ne comprends pas.

voici la macro :

Sub date_texte_en_numerique()
'
' date_texte_en_numerique1 Macro
' Macro enregistrée le 26/10/2011 par DCN
'

'
Range("A3").Select
Application.CutCopyMode = False
Selection.Copy
Range("J2").Select
ActiveWindow.ScrollRow = 17
ActiveWindow.ScrollRow = 32
...
ActiveWindow.ScrollRow = 9957
Range("J2:J10000").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
ActiveWindow.SmallScroll Down:=-6
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A1").Select
End Sub

espérant que ma question est clair, et qu'il existe une solution
Avatar
lukkyy
MichD a écrit le 26/10/2011 à 14h08 :
Bonjour,

Essaie comme ceci:

Attention : La macro doit obligatoirement être appelée à
partir de l'interface
de la feuille de calcul soit par un bouton soit à partir de la
fenêtre affichant
les macros (raccourci clavier Alt + F8) . Si tu exécutes la macro
directement
dans la fenêtre de l'éditeur de code, cela ne fonctionnera pas.

Prend le temps de lire la macro, tu devras l'adapter quelque peu à ton
environnement.

Les dates avec Excel, c'est un réel plaisir ! N'est-ce pas ? ;-)

'----------------------------------------------
Sub Test()
'Tu adaptes le nom de l'onglet de la feuille
'où sont tes données
With Worksheets("Feuil2")
.Select
'Tu places 1 dans une cellule de ton choix
.Range("H1") = 1
'Remplace J par la lettre de la colonne de ton application
With .Range("J1:J" & .Range("J65536").End(xlUp).Row)
'Le format final de date que tu veux avoir...
.NumberFormat = "DD-MM-YY"
.Select
End With
'Envoie la valeur 1 dans le presse-papier
.Range("H1").Copy
'Séquence des commandes que tu ferais
'si tu utilisais les lettres du menu pour
'effectuer le collage special
SendKeys "%egvm" & "~"
DoEvents
'Efface le contenu de H1
.Range("H1") = ""
.Range("J1").Select
End With
Application.CutCopyMode = False
End Sub
'----------------------------------------------


MichD
------------------------------------------
"lukkyy" a écrit dans le message de groupe de discussion :


Bonjour, voici le problème que je rencontre,

je traivail sur une base de données extraite d'un autre logiciel, dans
cette
base il y a un champ date, avec les dates en format texte, donc pour pouvoir
faire des calculs avec je copi une cellule avec 1, et fais un collage
spécial =>
multiplication pour convertir le format texte en nombre, jusque la tout va
bien.

mais lorsque je passe par une marco, seulement certaines cellules se
transforment, or la base est la même que lorsque que je le fais
manuellement,
donc je ne comprends pas.

voici la macro :

Sub date_texte_en_numerique()
'
' date_texte_en_numerique1 Macro
' Macro enregistrée le 26/10/2011 par DCN
'

'
Range("A3").Select
Application.CutCopyMode = False
Selection.Copy
Range("J2").Select
ActiveWindow.ScrollRow = 17
ActiveWindow.ScrollRow = 32
...
ActiveWindow.ScrollRow = 9957
Range("J2:J10000").Select
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
SkipBlanks:úlse, Transpose:úlse
ActiveWindow.SmallScroll Down:=-6
ActiveWindow.ScrollColumn = 4
ActiveWindow.ScrollColumn = 3
ActiveWindow.ScrollColumn = 2
ActiveWindow.ScrollColumn = 1
Range("A1").Select
End Sub

espérant que ma question est clair, et qu'il existe une solution


Merci pour la réponce, je vai essayer demain, et espère que sa va marcher, car je ne comprends vraiment pas le résultat de ma macro.

voici un exemple du résultat de ma 1ère macro (chiffre bidon, dans le seul but de montrer le comportement de la macro) :

avant après
16/10/2011 00:00:00 => 40567
21/09/2011 00:00:00 => 21/09/2011 00:00:00
12/10/2011 00:00:00 => 40563
17/10/2011 00:00:00 => 40568
09/10/2011 00:00:00 => 09/10/2011 00:00:00
26/10/2011 00:00:00 => 26/10/2011 00:00:00

donc résultat totalement incohérant puisque les dates avant sont sous le méme format texte, et donc pourquoi seulement le 16 le 12 et le 17 dans mon exemple ont fonctionné? mistère, que la macro ne fonctionne pas, je peu comprendre et la corriger, mais la, elle fonctionne à moitié sans explication!

je vous tiens au courant demain avec cette nouvelle macro, merci
Avatar
Maude Este
Bonsour®

"lukkyy" a écrit

voici un exemple du résultat de ma 1ère macro (chiffre bidon, dans le seul but
de montrer le comportement de la macro) :
avant après
16/10/2011 00:00:00 => 40567
21/09/2011 00:00:00 => 21/09/2011 00:00:00
12/10/2011 00:00:00 => 40563
17/10/2011 00:00:00 => 40568
09/10/2011 00:00:00 => 09/10/2011 00:00:00
26/10/2011 00:00:00 => 26/10/2011 00:00:00

donc résultat totalement incohérant puisque les dates avant sont sous le méme
format texte, et donc pourquoi seulement le 16 le 12 et le 17 dans mon exemple
ont fonctionné? mistère, que la macro ne fonctionne pas, je peu comprendre et la
corriger, mais la, elle fonctionne à moitié sans explication!
========================================================================= A moitié ???
même pas !!!
les n° de série 40567, 40563, 40568 ne correspondent absolument aux dates texte
respectives
il y a une erreur de 265 Jours !!!!

à mon humble avis c'est dans les opérations précédentes qu'il y a quelque chose
d'anormal...
entre autre :
à coup sûr présence d'espaces surabondant dans les dates texte

pour pouvoir t'aider concretement il faudrait un extrait des données issues de
l'autre logiciel

;o)))
Les dates avec Excel, c'est un réel plaisir ! N'est-ce pas ? ;-)
Avatar
MichD
J'ai modifié légèrement la macro selon le format de date que tu dis avoir dans les cellules : 21/09/2011 00:00:00
Quand tu poses une question impliquant des formats de cellules, il est toujours bon de donner quelques
exemples...

'----------------------------------------------
Sub Test()
'Tu adaptes le nom de l'onglet de la feuille
'où sont tes données
With Worksheets("Feuil2")
.Select
'Tu places 1 dans une cellule de ton choix
.Range("H1") = 1
'Remplace J par la lettre de la colonne de ton application
With .Range("J1:J" & .Range("J65536").End(xlUp).Row)
.Replace "00:00:00", ""
.Replace " ", ""
.Replace Chr(160), ""
'Le format final de date que tu veux avoir...
.NumberFormat = "DD-MM-YY"
.Select
End With
'Envoie la valeur 1 dans le presse-papier
.Range("H1").Copy
'Séquence des commandes que tu ferais
'si tu utilisais les lettres du menu pour
'effectuer le collage special
SendKeys "%egvm" & "~"
DoEvents
'Efface le contenu de H1
.Range("H1") = ""
.Range("J1").Select
End With
Application.CutCopyMode = False
End Sub
'----------------------------------------------


MichD
------------------------------------------
Avatar
lukkyy
Maude Este a écrit le 27/10/2011 à 01h04 :
Bonsour®

"lukkyy" a écrit

voici un exemple du résultat de ma 1ère macro (chiffre bidon,
dans le seul but
de montrer le comportement de la macro) :
avant après
16/10/2011 00:00:00 => 40567
21/09/2011 00:00:00 => 21/09/2011 00:00:00
12/10/2011 00:00:00 => 40563
17/10/2011 00:00:00 => 40568
09/10/2011 00:00:00 => 09/10/2011 00:00:00
26/10/2011 00:00:00 => 26/10/2011 00:00:00

donc résultat totalement incohérant puisque les dates avant sont
sous le méme
format texte, et donc pourquoi seulement le 16 le 12 et le 17 dans mon exemple
ont fonctionné? mistère, que la macro ne fonctionne pas, je peu
comprendre et la
corriger, mais la, elle fonctionne à moitié sans explication!
========================================================================= A
moitié ???
même pas !!!
les n° de série 40567, 40563, 40568 ne correspondent absolument aux
dates texte
respectives
il y a une erreur de 265 Jours !!!!

à mon humble avis c'est dans les opérations
précédentes qu'il y a quelque chose
d'anormal...
entre autre :
à coup sûr présence d'espaces surabondant dans les dates
texte

pour pouvoir t'aider concretement il faudrait un extrait des données
issues de
l'autre logiciel

;o)))
Les dates avec Excel, c'est un réel plaisir ! N'est-ce pas ? ;-)




bonjour

Désolé, les dates que j'ai donné sont juste une présentation du résultat, les dates dans mon exemple qui ont fonctionné sont fausse car je les ai mise en me rappelant du résultat (un à peu pret qui va bien ^^), dans le seul but d'illustrer ce que j'obtiens.

je ne peu pas trasmettre le fichier (appartenant a la DCNS), mais je devrais pouvoir transmettre une copie avec seulement les dates et la macro.

C'est la première fois sur le forum, comment joindre le fichier?
Avatar
lukkyy
lukkyy a écrit le 27/10/2011 à 08h27 :
Maude Este a écrit le 27/10/2011 à 01h04 :
Bonsour®

"lukkyy" a écrit

voici un exemple du résultat de ma 1ère macro (chiffre bidon,
dans le seul but
de montrer le comportement de la macro) :
avant après
16/10/2011 00:00:00 => 40567
21/09/2011 00:00:00 => 21/09/2011 00:00:00
12/10/2011 00:00:00 => 40563
17/10/2011 00:00:00 => 40568
09/10/2011 00:00:00 => 09/10/2011 00:00:00
26/10/2011 00:00:00 => 26/10/2011 00:00:00

donc résultat totalement incohérant puisque les dates avant sont
sous le méme
format texte, et donc pourquoi seulement le 16 le 12 et le 17 dans mon exemple
ont fonctionné? mistère, que la macro ne fonctionne pas, je peu
comprendre et la
corriger, mais la, elle fonctionne à moitié sans explication!
========================================================================= A
moitié ???
même pas !!!
les n° de série 40567, 40563, 40568 ne correspondent absolument aux
dates texte
respectives
il y a une erreur de 265 Jours !!!!

à mon humble avis c'est dans les opérations
précédentes qu'il y a quelque chose
d'anormal...
entre autre :
à coup sûr présence d'espaces surabondant dans les dates
texte

pour pouvoir t'aider concretement il faudrait un extrait des données
issues de
l'autre logiciel

;o)))
Les dates avec Excel, c'est un réel plaisir ! N'est-ce pas ? ;-)






bonjour

Désolé, les dates que j'ai donné sont juste une
présentation du résultat, les dates dans mon exemple qui ont
fonctionné sont fausse car je les ai mise en me rappelant du
résultat (un à peu pret qui va bien ^^), dans le seul but
d'illustrer ce que j'obtiens.

je ne peu pas trasmettre le fichier (appartenant a la DCNS), mais je devrais
pouvoir transmettre une copie avec seulement les dates et la macro.

C'est la première fois sur le forum, comment joindre le fichier?


Un grand merci à toi!

Je viens de rentré la macro et elle fonctionne à la perfection :)

Je ne sais pas pourquoi la mienne ne marche pas! mais bon le problème est résolu, encors merci. Pour info vien de commencer sur les macros il y a 1 semaine et je trouve cela extrèmement pratiquepour les actions a répéter. et pour l'instant je passais par les fonctions enregistrer une nouvelle macro, mais je commence a apprendre le langage VBA.

PS: comment fait-on pour cloturer l'entraide? ou marquer comme résolu?
Avatar
MichD
Pour ceux qui aiment les détails, dans la macro, il y a cette commande : SendKeys "%egvm" & "~"

SendKeys "%egvm" & "~" Cette commande correspond à l'interface des versions Excel 1977-2003

SendKeys "%lvgvm" & "~" Cette commande correspond à l'interface des versions Excel 2007-2010

Dans son souci de la compatibilité des versions, en utilisant la commande pour les versions antérieures
d'Excel (97-2003), les nouvelles versions (2007-2010) reconnaissent l'ancienne commande. Ce n'est
pas vrai évidemment si quelqu'un utilise la nouvelle commande sur les anciennes versions d'Excel.

Ce n’est pas beau la compatibilité ! Merci Microsoft de nous rendre la vie facile!


'----------------------------------------------
Sub Test()
'Tu adaptes le nom de l'onglet de la feuille
'où sont tes données
With Worksheets("Feuil2")
.Select
'Tu places 1 dans une cellule de ton choix
.Range("H1") = 1
'Remplace J par la lettre de la colonne de ton application
With .Range("J1:J" & .Range("J65536").End(xlUp).Row)
.Replace "00:00:00", ""
.Replace " ", ""
.Replace Chr(160), ""
'Le format final de date que tu veux avoir...
.NumberFormat = "DD-MM-YY"
.Select
End With
'Envoie la valeur 1 dans le presse-papier
.Range("H1").Copy
'Séquence des commandes que tu ferais
'si tu utilisais les lettres du menu pour
'effectuer le collage special
SendKeys "%egvm" & "~"
DoEvents
'Efface le contenu de H1
.Range("H1") = ""
.Range("J1").Select
End With
Application.CutCopyMode = False
End Sub
'----------------------------------------------


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