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...
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.
Message édité par manu203 le 24-01-2008 à 12:41:40
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 :
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 :
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.