Autres Problème VBA sur Excel 2007

Co_Lac

XLDnaute Junior
Bonjour,
Mon problème est de conserver la mise en forme de cellules de reception en VBA, je vous explique:
Je récupère sur Yahoo Finance des infos style "Données historiques" que j'utilise sur excel 2007.
Cette opération se passe très bien mais je bute sur un détail dans Excel et principalement sur cette commande:

Sheets("Donnees bourse").Range("Q7").Copy Sheets("Base").Cells(25, index)
---->Sheets("Donnees bourse").Range("G4:G27").Copy Sheets("Base").Cells(90, index)
Sheets("Donnees bourse").Range("F4:F27").Copy Sheets("Base").Cells(1, index)
Sheets("Donnees bourse").Range("A4:A27").Copy Sheets("Base").Cells(1, 1)

Sur cette ligne en gras:
Le but c'est de copier les valeurs des cellules "G4:G27" sur la feuille "Base" à une endroit défini par "Cells(90, index)"
Mais le problème c'est que je veux conserver la mise en forme des cellules de réception et je ne trouve rien sur google pour m'aider.
Avez vous des idées svp ?
Merci
Claude
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Co_Lac,
Pour cela il ne faut coller que les valeurs, vous conserverez ainsi votre format d'origine.
Essayez de remplacer votre ligne en gras par :
VB:
    Sheets("Donnees bourse").Range("G4:G27").Copy
    Sheets("Base").Cells(90, Index).PasteSpecial Paste:=xlPasteValues, _
    Operation:=xlNone, SkipBlanks:=False, Transpose:=False
 

patricktoulon

XLDnaute Barbatruc
bonjour il faudra m'expliquer pourquoi utiliser "Paste"et toute son armada si c'est pour ne récupérer le .value

VB:
Sheets("Base").Cells(90, Index).resize(,[G4:g27].columns.count).value= Sheets("Donnees bourse").Range("G4:G27").value
épicétoo'
;)
 

Co_Lac

XLDnaute Junior
Merci beaucoup,
Effectivement ça marche plus vite !
J'aime bien cette dernière version, le paste et son armada alourdi la macro, j'ai 25 colonne à réactualiser!
Bonne fin de journée
Et merci pour votre aide
 

Staple1600

XLDnaute Barbatruc
Bonjour le fil, Co_Lac, sylvanu, patricktoulon

•>patricktoulon
tu à dit:
bonjour il faudra m'expliquer pourquoi utiliser "Paste"et toute son armada si c'est pour ne récupérer le .value
Enrichi (BBcode):
Sheets("Base").Cells(90, Index).resize(,[G4:g27].columns.count).value= Sheets("Donnees bourse").Range("G4:G27").value
épicétoo'
;)
Si je n'abuse que ce soit en Bretagne ou à Valparaiso.
Que l'on soit confiné ou pas
[G4:g27].columns.count
donnera toujours 1
Alors pourquoi ne pas mettre 1
?
NB [Xi:Xj].Columns.Count donne toujours 1 quand X=X non ?
 

Co_Lac

XLDnaute Junior
Bonjour,
J'ai encore une autre question svp !
Je veux faire un rangement sur une ligne avec en "A123" par exemple le ou les premiers des participants , (dans ce cas incrémenter les cellules, "B123", "C123" etc.... ) ensuite le ou les deuxièmes "D123", "E123", troisième etc....
Sur une ligne, comme dans mon exemple "A121:Z121" j'ai une série de valeurs qui sont des notes numériques.
La ligne au dessus, "A120:Z120" j'ai le nom des participants.
Le but de ma question c'est en VBA, rechercher l'adresse de la cellule qui correspond à par exemple la note de 45?
Réponse par exemple: "L121"
J'ai cherché sur google mais rien ne correspond ou ne marche pas, donc je frappe à votre porte !
Merci
Claude
 

Co_Lac

XLDnaute Junior
bonjour Staple1600
oui c'est vrai en fait logiquement c'est le row que l'on devrait resizer
resize([g4:g27].rows.count,1)
normalement mais il en est satisfait j'en conclu que tout ce ramdam c'est pour copier une seule cellule
Bonjour,
Je viens de m'apercevoir, en apportant vos modifications; "resize([g4:g27].rows.count,1)" à la ligne de patricktoulon; "Sheets("Base").Cells(90, Index).resize(,[G4:g27].columns.count).value= Sheets("Donnees bourse").Range("G4:G27").value" ça ne marche pas, ça plante!
j'ai écris:
"Sheets("Base").Cells(90, Index).resize(,[G4:g27].rows.count,1).value= Sheets("Donnees bourse").Range("G4:G27").value"
Erreur d’exécution: "450"
Nombre d'argument incorrect ou affectation de propriété incorrecte
J'ai cherché des solutions mais je ne trouve pas !
Je vous remercie de me dire svp
Merci
 

Co_Lac

XLDnaute Junior
Bonjour,
Je viens de m'apercevoir, en apportant vos modifications; "resize([g4:g27].rows.count,1)" à la ligne de patricktoulon; "Sheets("Base").Cells(90, Index).resize(,[G4:g27].columns.count).value= Sheets("Donnees bourse").Range("G4:G27").value" ça ne marche pas, ça plante!
j'ai écris:
"Sheets("Base").Cells(90, Index).resize(,[G4:g27].rows.count,1).value= Sheets("Donnees bourse").Range("G4:G27").value"
Erreur d’exécution: "450"
Nombre d'argument incorrect ou affectation de propriété incorrecte
J'ai cherché des solutions mais je ne trouve pas !
Je vous remercie de me dire svp
Merci
c'est vrai, le premier qui fait poster a gagné .
j'aurai du supprimer le mien.
dont acte .
ce message s'autodétruira dans 5 secondes ...



J'ai une autre question svp:
Sur ma feuille "Base":
j'ai une ligne de A120 à Z120 = participants (nom de Sociétés)
J'ai une ligne de A121 à Z121 = notes attribuées (suivant critères)
Je veux si c'est possible et pas trop complexe, recopier ces 2 lignes sur une feuille "Classement" en "A1 à Z1" et "A2 à Z2" par exemple en les réordonnant en ordre décroissant.
Comment faire une recherche sur la ligne A121 à Z121 de la note, 50 à 0 et récupérer l'adresse de la cellule ligne au dessus correspondante puis d'une seconde note (identique à la première) si ex aequo il y a et les ranger depuis "A1 à "Z" de la feuille "Classement" en ordre décroissant ?
Et ensuite faire une boucle de la note 50 à 0 par exemple?
J'ai cherché sur google mais rien ne correspond ou ne marche pas, donc je frappe à votre porte !
Excusez moi mais je débute en VBA, c'est trés prenant, ça occupe par les temps qui court!
Merci
Claude
 

Pièces jointes

  • rangement.PNG
    rangement.PNG
    15.8 KB · Affichages: 14

Discussions similaires

Réponses
3
Affichages
790

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
314 628
Messages
2 111 337
Membres
111 105
dernier inscrit
Joffrette