Excel VBA décaler tableau

manu203

Nouveau membre
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

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

manu203

Nouveau membre
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:
Sheets("NE PAS TOUCHER").Select
    Columns("B:B").Select
    Selection.Insert Shift:=xlToRight
    Selection.ColumnWidth = 10
    Sheets("feuil2").Activate
    Sheets("NE PAS TOUCHER").Activate
    Sheets("NE PAS TOUCHER").Range("B2:B4") = Feuil2.Range("C4:C6")
    Sheets("NE PAS TOUCHER").Range("B6:B8") = Feuil2.Range("C10:C12")
    Sheets("NE PAS TOUCHER").Range("B10:B11") = Feuil2.Range("K4:K5")
    Sheets("NE PAS TOUCHER").Range("B13:B16") = Feuil2.Range("K10:K13")
    Sheets("NE PAS TOUCHER").Range("B18:B21") = Feuil2.Range("C17:F17")
    Sheets("NE PAS TOUCHER").Range("B22:B25") = Feuil2.Range("C18:F18")
    Sheets("feuil2").Activate
    Feuil2.Range("F4:F6") = Feuil2.Range("E4:E6")
    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.


 

zeb

Modérateur
:)

La prochaine fois, clique sur
Vous devez être connecté pour voir les images.
ou mieux sur
Vous devez être connecté pour voir les images.
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.
 

zeb

Modérateur
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 [fixed]Truc.Select
Selection.Machin[/fixed] remplace-le par [fixed]Truc.Machin[/fixed]

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:
Worksheets("NE PAS TOUCHER").Columns("B:B").Insert Shift:=xlToRight
Worksheets("NE PAS TOUCHER").Columns("B:B").ColumnWidth = 10
Worksheets("NE PAS TOUCHER").Range("B2:B4") = Worksheets("TOTO").Range("C4:C6")
Worksheets("NE PAS TOUCHER").Range("B6:B8") = Worksheets("TOTO").Range("C10:C12")
Worksheets("NE PAS TOUCHER").Range("B10:B11") = Worksheets("TOTO").Range("K4:K5")
Worksheets("NE PAS TOUCHER").Range("B13:B16") = Worksheets("TOTO").Range("K10:K13")
Worksheets("NE PAS TOUCHER").Range("B18:B21") = Worksheets("TOTO").Range("C17:F17")
Worksheets("NE PAS TOUCHER").Range("B22:B25") = Worksheets("TOTO").Range("C18:F18")
Worksheets("TOTO").Range("F4:F6") = 
Worksheets("TOTO").Range("E4:E6")

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

Code:
Dim f_Source As Worksheet
Dim f_Destin As Worksheet

Set f_Destin = Worksheets("NE PAS TOUCHER")
Set f_Source = Worksheets("TOTO")

f_Destin.Columns("B:B").Insert Shift:=xlToRight
f_Destin.Columns("B:B").ColumnWidth = 10
f_Destin.Range("B2:B4") = f_Source.Range("C4:C6")
f_Destin.Range("B6:B8") = f_Source.Range("C10:C12")
f_Destin.Range("B10:B11") = f_Source.Range("K4:K5")
f_Destin.Range("B13:B16") = f_Source.Range("K10:K13")
f_Destin.Range("B18:B21") = f_Source.Range("C17:F17")
f_Destin.Range("B22:B25") = f_Source.Range("C18:F18")
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:
f_Destin.Range("B2:B4").Cells.Forluma = f_Source.Range("C4:C6").Cells.Forluma
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 :
[fixed]Source.Copy Destination[/fixed]

Ton code revu :
Code:
Dim f_Source As Worksheet
Dim f_Destin As Worksheet

Set f_Destin = Worksheets("NE PAS TOUCHER")
Set f_Source = Worksheets("TOTO")

f_Destin.Columns("B:B").Insert Shift:=xlToRight
f_Destin.Columns("B:B").ColumnWidth = 10

f_Source.Range("C4:C6")  .Copy f_Destin.Range("B2:B4")
f_Source.Range("C10:C12").Copy f_Destin.Range("B6:B8")    
f_Source.Range("K4:K5")  .Copy f_Destin.Range("B10:B11")  
f_Source.Range("K10:K13").Copy f_Destin.Range("B13:B16")  
f_Source.Range("C17:F17").Copy f_Destin.Range("B18:B21")  
f_Source.Range("C18:F18").Copy f_Destin.Range("B22:B25")  
f_Source.Range("E4:E6")  .Copy f_Source.Range("F4:F6")
 

zeb

Modérateur
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.

;)
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 136
Messages
6 718 119
Membres
1 586 397
Dernier membre
Chachabidou
Partager cette page
Haut