Bonjour,
Et bien... au taf ! Excellente opportunité de se former au VBA
Dans l'ordre, à coder (une solution parmi d'autres) :
- Créer un bouton sur la feuille source qui va créer la mise en forme sur la feuille de destination (onglet développeur -> Insérer -> bouton activeX)
- Lui changer son titre :
Click droit -> Propriété -> changer caption en "Créer blocs horaires"
- Lui affecter du code :
Click droit -> Visualiser le code -> Insérer call Macro, puis passer dans un module (en créer un si nécessaire) et taper sub Macro et Enter
Il est possible de mettre des commentaires dans le code en commençant par '
'Ceci est un commentaire qui ne s'exécutera pas mais qui permettra de se comprendre
- Déclarer les variables :
Dim Nomdelavariable as Typedelavariable -> dim i as long, ShEdT as sheets, etc.
- Affecter une valeur aux variables objets :
set ShEdT = ThisWorkBook.Sheets("Emploi du Temps")
- Déclarer une variable particulière : un array ( dim Nomdel'array() )
(Un tableau qui n'a pas d'interface graphique qui permet d'aller bcp plus vite quand on boucle dessus)
- Faire un "copier-coller" de la plage de cellule contenant les données (range en anglais) à l'array :
Tablo = Sheets("Emploi du Temps").range("A1").currentregion.value
- Désactiver le rafraichissement d'écran qui ralentirait la macro
- RAZ de la feuille de destination :
Sheets(Nomdelafeuillededestination).cells.delete shift :=xlup
- Boucler sur l'array par ligne avec une boucle for :
for i = 1 to ubound(tablo, 1)...
- Boucler sur l'array par colonne toujours avec une boucle for :
for j = 1...
- Définir la variable CelluleTitre (une range) que l'on prendra soin de déclarer en début de macro (dim) :
Set Plage = ShEdT.Range(Cells(i, j), Cells(i, j))
- Mettre en place un with range(range à mettre en forme) qui permettra d'alléger et éclaircir le code :
with sheets(...).range(cells(cellulededépart en ligne, colonne), cellule d'arrivée pareillement)
- Mise en forme de la couleur, des traits, etc.
-> interior.color = CelluleTitre .Interior.Color
-> with .borders(xlEdgeLeft) (mais aussi top, bottom, etc.) -> .linestyle et .weight
Pour trouver les propriétés à changer : onglet développeur -> enregistrer une macro (qui se situera dans un module vba) -> Faire une mise en forme -> Arrêter l'enregistrement -> Comprendre les lignes de code créées -> Faire des essais dans une sub test pour être sûr qu'on obtiendra le résultat souhaité
Pour exécuter la macro en pas à pas : F8
Pour mettre un point d'arrêt sur une ligne : F9
Pour exécuter la macro d'un coup : F5
Pour renvoyer dans la console la valeur d'une variable (et s'assurer au passage de la syntaxe) : debug.print Unelignedecode
Voilà. Une trame à suivre, et des des mots clés pour faire des recherches et comprendre de quoi il en retourne.
Après rien n'empêche d'alimenter ce fil pour montrer ton code et obtenir des conseils
@+