FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Excel VBA décaler tableau
 

Excel VBA décaler tableau

Il y a 411 utilisateurs connus et inconnus. Pour voir la liste des connectés connus, cliquez ici
Ajouter une réponse



 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet : Excel VBA décaler tableau
 
Plus d'informations

Bonjour,

je débute dans les macro Excel... et j'ai beau chercher sur tous le forums, je ne trouve pas de solutions à mon problème.

Je dispose d'une feuille excel avec 4 tableaux.
Chaque tableau dispose de 4 colonnes (Mois, Mois-1, mois-2, mois-3) et de 3 lignes correspondant à des indicateurs.

J'aimerais créer une macro qui permettrait d'enregister les données de la colonne mois (idéalement indiquer le mois en cours) dans une autre feuille (archive de toutes les données) et qui ensuite décalerait toutes les données vers la droite. Ainsi la colonne mois serait prête pour un nouvel encodage et ainsi de suite chaque fois qu'on appuie sur un bouton auquel on aurait affecté la macro.

Ma macro actuelle n'est pas "belle" et ne fonctionne pas totalement en plus...

Sheets("NE PAS TOUCHER" ).Select
Columns("B:B" ).Select
Selection.Insert Shift:=xlToRight
Selection.ColumnWidth = 10
Range("B2" ) = Range("'feuil2'!C4" )
Range("B3" ) = Range("'feuil2'!C5" )
Range("B4" ) = Range("'feuil2'!C6" )
Range("B6" ) = Range("'feuil2'!C10" )
Range("B7" ) = Range("'feuil2'!C11" )
Range("B8" ) = Range("'feuil2'!C12" )
Range("B10" ) = Range("'feuil2'!K4" )
Range("B11" ) = Range("'feuil2'!K5" )
Range("B13" ) = Range("'feuil2'!K10" )
Range("B14" ) = Range("'feuil2'!K11" )
Range("B15" ) = Range("'feuil2'!K12" )
Range("B16" ) = Range("'feuil2'!K13" )
Range("B18" ) = Range("'feuil2'!C17" )
Range("B19" ) = Range("'feuil2'!D17" )
Range("B20" ) = Range("'feuil2'!E17" )
Range("B21" ) = Range("'feuil2'!F17" )
Range("B22" ) = Range("'feuil2'!C18" )
Range("B23" ) = Range("'feuil2'!D18" )
Range("B24" ) = Range("'feuil2'!E18" )
Range("B25" ) = Range("'feuil2'!F18" )
Sheets("feuil2" ).Select
Range("F4:F6" ).Select = Range("E4:E6" )

Pourriez-vous m'aider.

Merci beaucoup

Manu

zeb
Profil : Modérateur libre
Plus d'informations

>> je débute dans les macro Excel...
En forum aussi. Va lire le règlement et applique-le.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

désolé de ne pas avoir respécté le forum, d'après ce que je comprend j'aurais du insérer code

Je repose donc ma question correctement et en plus court.

Mon problème est le suivant lorsque j'exécute ce code


Code :
  1. Sheets("NE PAS TOUCHER" ).Select
  2.     Columns("B:B" ).Select
  3.     Selection.Insert Shift:=xlToRight
  4.     Selection.ColumnWidth = 10
  5.     Sheets("feuil2" ).Activate
  6.     Sheets("NE PAS TOUCHER" ).Activate
  7.     Sheets("NE PAS TOUCHER" ).Range("B2:B4" ) = Feuil2.Range("C4:C6" )
  8.     Sheets("NE PAS TOUCHER" ).Range("B6:B8" ) = Feuil2.Range("C10:C12" )
  9.     Sheets("NE PAS TOUCHER" ).Range("B10:B11" ) = Feuil2.Range("K4:K5" )
  10.     Sheets("NE PAS TOUCHER" ).Range("B13:B16" ) = Feuil2.Range("K10:K13" )
  11.     Sheets("NE PAS TOUCHER" ).Range("B18:B21" ) = Feuil2.Range("C17:F17" )
  12.     Sheets("NE PAS TOUCHER" ).Range("B22:B25" ) = Feuil2.Range("C18:F18" )
  13.     Sheets("feuil2" ).Activate
  14.     Feuil2.Range("F4:F6" ) = Feuil2.Range("E4:E6" )
  15.     Application.ScreenUpdating = True



il m'ajoute bien une colonne et ne m'inscrit pas les données demandées. Idem pour toutes les commandes de type .range(" : " ). Il me renvoie des cases vides.



Message édité par manu203 le 24-01-2008 à 12:41:40
zeb
Profil : Modérateur libre
Plus d'informations

:)

La prochaine fois, clique sur http://img.infos-du-net.com/forum/themes_static/images_forum/1/edit.gif ou mieux sur http://img.infos-du-net.com/forum/themes_static/images_forum/1/edit-in.gif et modifie directement ton message. J'aurai eu le plaisir de supprimer le mien.

Bon, c'est pas tout ça, maintenant que le môssieur il a montré de la bonne volonté, il va falloir règler son problème.


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
zeb
Profil : Modérateur libre
Plus d'informations

Mais pourquoi fais-tu des Select et des Activate ???
Et n'essaye pas de me justifier les lignes 5 et 6.

 

A chaque fois que tu fais

Truc.Select
Selection.Machin

remplace-le par

Truc.Machin

 

La variable Feuil2 n'existe que dans certains modules. Donc pour éviter les déconvenues lors d'un transfert de code, Par principe, même si ça marche, n'utilise pas ce type de variable. Renomme ta feuille en TOTO (ou autre, c'est toi qui choisis ;) ) et désigne-la par Sheets("TOTO" )

 

Encore mieux. Tes onglets sont des feuilles de calculs, pas des graphes. Tu peux donc les désigner par Worksheets(..) plutôt que par Sheets(..)

 

Je réécris ton code :

Code :
  1. Worksheets("NE PAS TOUCHER" ).Columns("B:B" ).Insert Shift:=xlToRight
  2. Worksheets("NE PAS TOUCHER" ).Columns("B:B" ).ColumnWidth = 10
  3. Worksheets("NE PAS TOUCHER" ).Range("B2:B4" ) = Worksheets("TOTO" ).Range("C4:C6" )
  4. Worksheets("NE PAS TOUCHER" ).Range("B6:B8" ) = Worksheets("TOTO" ).Range("C10:C12" )
  5. Worksheets("NE PAS TOUCHER" ).Range("B10:B11" ) = Worksheets("TOTO" ).Range("K4:K5" )
  6. Worksheets("NE PAS TOUCHER" ).Range("B13:B16" ) = Worksheets("TOTO" ).Range("K10:K13" )
  7. Worksheets("NE PAS TOUCHER" ).Range("B18:B21" ) = Worksheets("TOTO" ).Range("C17:F17" )
  8. Worksheets("NE PAS TOUCHER" ).Range("B22:B25" ) = Worksheets("TOTO" ).Range("C18:F18" )
  9. Worksheets("TOTO" ).Range("F4:F6" ) =
  10. Worksheets("TOTO" ).Range("E4:E6" )
 

Bon, ça ne marche toujours pas, je sais.
Pour alléger, j'utilise des variables locales explicites :

 
Code :
  1. Dim f_Source As Worksheet
  2. Dim f_Destin As Worksheet
  3. Set f_Destin = Worksheets("NE PAS TOUCHER" )
  4. Set f_Source = Worksheets("TOTO" )
  5. f_Destin.Columns("B:B" ).Insert Shift:=xlToRight
  6. f_Destin.Columns("B:B" ).ColumnWidth = 10
  7. f_Destin.Range("B2:B4" ) = f_Source.Range("C4:C6" )
  8. f_Destin.Range("B6:B8" ) = f_Source.Range("C10:C12" )
  9. f_Destin.Range("B10:B11" ) = f_Source.Range("K4:K5" )
  10. f_Destin.Range("B13:B16" ) = f_Source.Range("K10:K13" )
  11. f_Destin.Range("B18:B21" ) = f_Source.Range("C17:F17" )
  12. f_Destin.Range("B22:B25" ) = f_Source.Range("C18:F18" )
  13. f_Source.Range("F4:F6" ) = f_Source.Range("E4:E6" )
 

Ce n'est pas plus efficace, c'est plus joli.
Bon. Qu'est-ce que tu veux, copier les formules, les valeurs ?

 
Code :
  1. f_Destin.Range("B2:B4" ).Cells.Forluma = f_Source.Range("C4:C6" ).Cells.Forluma
  2. f_Destin.Range("B6:B8" ).Cells.Value = f_Source.Range("C10:C12" ).Cells.Value
 

Tu veux tout copier !!!
Utilise la méthode Copy alors.

 

Syntaxe :

Source.Copy Destination

 

Ton code revu :

Code :
  1. Dim f_Source As Worksheet
  2. Dim f_Destin As Worksheet
  3. Set f_Destin = Worksheets("NE PAS TOUCHER" )
  4. Set f_Source = Worksheets("TOTO" )
  5. f_Destin.Columns("B:B" ).Insert Shift:=xlToRight
  6. f_Destin.Columns("B:B" ).ColumnWidth = 10
  7. f_Source.Range("C4:C6" )  .Copy f_Destin.Range("B2:B4" )
  8. f_Source.Range("C10:C12" ).Copy f_Destin.Range("B6:B8" )   
  9. f_Source.Range("K4:K5" )  .Copy f_Destin.Range("B10:B11" ) 
  10. f_Source.Range("K10:K13" ).Copy f_Destin.Range("B13:B16" ) 
  11. f_Source.Range("C17:F17" ).Copy f_Destin.Range("B18:B21" ) 
  12. f_Source.Range("C18:F18" ).Copy f_Destin.Range("B22:B25" ) 
  13. f_Source.Range("E4:E6" )  .Copy f_Source.Range("F4:F6" )


Message édité par zeb le 24-01-2008 à 14:23:57

---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...
Plus d'informations

Un grand merci ça fonctionne... c'est propre... que demander de plus :-) ?!

zeb
Profil : Modérateur libre
Plus d'informations

Que tu comprennes pourquoi et comment ça marche. Ce serait ma plus grande récompense.
Que tu reviennes de temps en temps pour peut-être aider un autre.

;)


---------------
Règlement du forum / Règlement de Programmation / Règlement du Monde de Linux euh, n'y en a pas...

Aller à :
Ajouter une réponse
  FORUM Tom's Hardware » Programmation » VB / VBA / VBS » Excel VBA décaler tableau
 

Annonces Google
Publicité