[Résolu] Affectation de variable/Macro copier coller Excel

Affectation de variable/Macro copier coller Excel [Résolu] - VB/VBA/VBS - Programmation

Marsh Posté le 24-06-2011 à 09:55:08    

Bonjour à tous
 
En préambule, je dois dire que je n'ai quasiment jamais fait de programmation auparavant, excepté quelques bribes en prépa, et que je dois m'y mettre suite aux aléas d'un stage. Je vous prie donc de m'excuser pour la très haute teneur noobesque de ce post :jap: .
 
Voici ma problématique : je dispose de tableaux croisés dynamiques issus d'une base de données msie à jour fréquemment, et je désire copier certaines données dans une autre feuille qui servirait d'historique, à la suite des données précédentes, en y mettant la date et en modifiant la mise en forme (suppression de l'italique par exemple).
 
J'en suis arrivé après maintes recherches à écrire le code suivant
 

Code :
  1. Sub Historique()
  2.     Worksheets("PropCom" ).Range("B12:G12" ).Copy Destination:=Worksheets("Historique" ).Range("B15" ).End(xlDown).Offset(1)
  3.     Sheets("Historique" ).Select
  4.     Range("A1" ).Select
  5.     Selection.End(xlDown).Select
  6.     ActiveCell.Offset(1, 0).Select
  7.     ActiveCell.End(xlDown).Offset(1).FormulaR1C1 = "=NOW()"
  8.     Selection.NumberFormat = "[$-409]dd/mm/yyyy;@"
  9. End Sub


Le soucis, c'est que je ne connais pas la syntaxe pour modifier la mise en forme dans la ligne 2, et que je n'arrive pas à trouver une solution simple et élégante.
 
C'est pourquoi j'avais pensé (attention le freestyle commence [:cupra] ) à créer 2 variables de type Range, à affecter dans l'une ce que je désire copier dans l'historique, puis à affecter cette variable dans une autre, à faire les modifs sur cette variable (là je connais la syntaxe) et à la copier ensuite dans l'historique.
Cela me donnerait
 

Code :
  1. Dim Origin As Range
  2.     Dim Resultat As Range
  3.    
  4.    
  5.     With ThisWorkbook.Worksheets("PropCom" )
  6.         Set Origin = .Range("B12:G12" )
  7.     End With
  8.    
  9.     Set Resultat = Origin
  10.        
  11.     With Resultat
  12.         .HorizontalAlignment = xlCenter
  13.         .Font.Size = 10
  14. etc...
  15.         End With
  16.    
  17.     Resultat.Copy Destination:=Worksheets("Historique" ).Range("B15" ).End(xlDown).Offset(1)


Problème : si la mise en forme est bien modifiée, celle dans le tableau d'origine l'est aussi!
Cela signifie-t-il que j'ai lamentablement échoué à comprendre ce qu'était l'affectation d'une variable  [:tinostar] ?
Je pense qu'une solution bien plus simple existe, mais voilà, je pense avoir atteint mes (faibles) limites en programmation, quelqu'un aurait-il la bonté de m'aider  :jap: ?
Merci d'avance


Message édité par Klivan le 24-06-2011 à 16:55:02

---------------
We are the knights who say : Ni! / 'Bye Julfisher, so long Shepard :(
Reply

Marsh Posté le 24-06-2011 à 09:55:08   

Reply

Marsh Posté le 24-06-2011 à 11:20:14    

Non, tu as a peu pres bien compris. Le seul probleme est que ta variable designe un objet (le range) et que quand tu fais un 'set', tu fais pointer une autre variable sur le meme objet. Rien d'etonnant alors a ce que la modification de l'une (d'un des objets) affecte egalement l'autre.
Une solution simple serait de faire ta copie avant et de pointer sur le resultat pour faire tes modifs.

Reply

Marsh Posté le 24-06-2011 à 11:32:57    

Merci de ta réponse  ;)  
 
Dans ce cas là, comment faire justement pour "pointer" vers ce que je copie?
 
Copier, puis faire une sélection de la dernière ligne occupée et la modifier?
 
Je dois avouer que là je ne vois pas trop comment m'y prendre  :sweat:


---------------
We are the knights who say : Ni! / 'Bye Julfisher, so long Shepard :(
Reply

Marsh Posté le 24-06-2011 à 15:08:52    

:) Tu as bien la bonne reponse, tu selectionne, tu copie et tu reselectionne ce que tu as copie pour faire la mise en forme :)

Reply

Marsh Posté le 24-06-2011 à 16:12:49    

Solution trouvée, merci beaucoup pour ton aide précieuse  ;)  
 
S'il y a des débutants comme moi qui d'aventure parcourent un jour ce topic, je peux poster le code s'ils le demandent


---------------
We are the knights who say : Ni! / 'Bye Julfisher, so long Shepard :(
Reply

Marsh Posté le 24-06-2011 à 16:13:39    

Le mieux c'est de le poster directement ;)


---------------
Soyez malin, louez entre voisins !
Reply

Marsh Posté le 24-06-2011 à 16:28:51    

Ok, voici:
 
Macro Excel pour copier coller en changeant la mise en forme

Code :
  1. Sub Historique()
  2.     Worksheets("PropCom" ).Range("B12:G12" ).Copy Destination:=Worksheets("Historique" ).Range("B15" ).End(xlDown).Offset(1)
  3.     Sheets("Historique" ).Select
  4.     Range("B15" ).Select
  5.     Selection.End(xlDown).Select             'sélection de la dernière cellule en dessous de la cellule B15'
  6.     i = ActiveCell.Row                   
  7.     Range("B" & i, "G" & i).Select           'avec la ligne précédente, permet d'étendre la sélection à une plage de cellule'
  8.    
  9.     With Selection                           'c'est ici que se fait la modification de tous les paramètres souhaités'
  10.         .HorizontalAlignment = xlCenter      'ici l'alignement'
  11.         .Font.Size = 10                      'ici la taille de la police'
  12.         .Font.Name = "Calibri"               'ici le nom de la police'
  13.         .Font.Bold = False                   'et ici la désactivation de la mise en gras'
  14. 'etc...'
  15.     End With
  16. End Sub


 
Je pense qu'il y a largement moyen de l'améliorer, mais au moins c'est fonctionnel  [:tinostar]  [:cupra]
 
Edit: Rajout d'un titre et d'explications au sein du code pour les curieux/débutants  :)


Message édité par Klivan le 24-06-2011 à 16:53:38

---------------
We are the knights who say : Ni! / 'Bye Julfisher, so long Shepard :(
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed