Excel VBA décaler tableau
Dernière réponse : dans Programmation
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
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
Autres pages sur : excel vba decaler tableau
Lassé par la pub ? Créez un compte
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
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.
Je repose donc ma question correctement et en plus court.
Mon problème est le suivant lorsque j'exécute ce 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.
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
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 :
Bon, ça ne marche toujours pas, je sais.
Pour alléger, j'utilise des variables locales explicites :
Ce n'est pas plus efficace, c'est plus joli.
Bon. Qu'est-ce que tu veux, copier les formules, les valeurs ?
Tu veux tout copier !!!
Utilise la méthode Copy alors.
Syntaxe :
Ton code revu :
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 Selection.Machin
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 :
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 :
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 ?
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 :
Source.Copy Destination
Ton code revu :
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")
Lassé par la pub ? Créez un compte
- Contenus similaires :
- ForumGraphique tableau excel vba
- ForumTableau dynamique excel vba
- ForumExcel vba tableau croisé dynamique
- ForumExcel vba tableau constante requise
- ForumExcel vba selection lignes dans tableau
- ForumExcel vba parcourir tableau filtrã
- benchmarkVba excel tableau
- ForumSupprimer ligne tableau excel vba
- ForumVba trier un tableau excel
- ForumVba excel recherche dans un tableau
- Voir plus
ou mieux sur
et modifie directement ton message. J'aurai eu le plaisir de supprimer le mien.