![]() |
Brico Micro | ![]() |
- Classeur :
- Date et heure :
- Format :
- Autres :
Ajouter une fonction de calcul dans Excel :
Exemple avec une fonction permettant de calculer le prix TTC d'un produit avec une TVA de 19,6%.
Faire menu Outils / Macro / Nouvelle Macro… Taper TTC dans la zone Nom de la macro,
puis cliquer dans la zone Enregistrer la macro dans sur la flèche et choisir Classeur de macros personnelles. Valider
en cliquant sur le bouton OK.
Arrêter la macro sans enregistrer d'actions en cliquant sur le bouton Arrêt de la petite boite de dialogue qui s’est
ouverte, puis ouvrir Visual Basic Editor depuis le menu Outils / Macro / Visual Basic Editor.
Dans la partie gauche de la fenêtre affichée, cliquer sur le signe + de +VBAProject (PERSO.XLS) puis sur le signe +
de + Modules et effectuer un double-clic sur Module1.
A droite de l'écran se trouve la macro créée par Excel. L’effacer et taper à la place :
Function TTC(nb)
Appuyer sur la touche Entrée du clavier. S’affiche alors automatiquement l'instruction terminant la fonction :
Function TTC(nb)
End Function
Entre ces deux lignes d'instructions saisir la ligne de commande suivante :
TTC=nb+(nb*19.6)/100
Faire menu Fichier / Enregistrer PERSO.XLS
et ensuite menu Fichier / Fermer et retourner à Microsoft Excel.
Il ne reste plus qu’à vérifier si la formule decalcul fonctionne en opérant de la même façon que pour les fonctions de
Excel. La nouvelle fonction se trouve dans la Catégorie de fonctions / Personnalisées et se nomme PERSO.XLS
!TTC.
Par la suite il sera toujours possible de rajouter des fonctions personnelles directement dans le Module1 de Visuel Basic Editor puisque le classeur de macros personnelles est déjà créé.
Utiliser les filtres sur une feuille protégée :
Lorsque l'on veut utiliser un filtre sur une feuille protégée, cela est impossible, tout du moins avec certaines versions d'Excel.
Pour y remédier, procéder de le façon suivante :
Placer le filtre et protéger la feuille. Aller ensuite sur le projet VBA par Alt+F11.
Dans l' Explorateur de projets (à gauche de l'écran) cliquer deux fois sur le nom de la feuille Excel pour activer la
Fenêtre Code (à droite) et y copier le code suivant :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.EnableAutoFilter = True ActiveSheet.Protect contents:=True, userInterfaceOnly:=True End Sub |
Fermer VBE pour revenir à la feuille Excel.
Si des modifications doivent être faites par la suite il faudra supprimer le code VBA...
et le recopier si besoin est.
Pour télécharger un exemple, cliquer ici.
A partir d' Excel XP cette procédure est inutile, il suffit de cocher l'autorisation Utiliser le filtre automatique depuis la boite de dialogue Protection de la feuille.
Date et ordre de saisie automatiques :
Pour une saisie en colonne C, le numéro d'ordre s'inscrit en colonne A
et la date en colonne B.
Code à saisir dans le module Feuil :
Private Sub Worksheet_Change(ByVal Target As Range)
|
Pour télécharger un exemple, cliquer ici.
Date et ordre de saisie automatiques protégés :
Pour une saisie en colonne C, le numéro d'ordre s'inscrit en colonne A
et la date en colonne B.
Les saisies des trois colonnes sont protégées.
Code à saisir dans le module Feuil :
Private Sub Worksheet_Change(ByVal Target As Range) |
Pour télécharger un exemple, cliquer ici.
Numérotation automatique à chaque ouverture :
Pour entrée automatique du numéro d'ordre d'ouverture du classeur en cellule A1 de la première feuille.
Code à saisir dans ThisWorkBook :
Private Sub Workbook_Open()
|
Pour télécharger un exemple, cliquer ici.
Dernière cellule non vide d'une colonne :
Pour sélectionner la dernière cellule non vide de la colonne A d'une
feuille.
Code à saisir dans un Module standard :
Sub DerCel()
Range("A65534").End(xlUp).Select 'Remplacer A pour autre colonne End Sub |
Pour télécharger un exemple, cliquer ici.
Copier une feuille et la classer par ordre croissant :
Pour copier la première feuille d'un classeur et la classer par ordre
croissant sur le nom des onglets (feuille - feuille (2) - feuille (3) - etc...).
Nom de la feuille à adapter.
Code à saisir dans un Module standard :
Sub CopFeuil()
'pour une feuille nommée ("jour") Sheets("jour").Select 'sélectionne la feuille 1 Sheets("jour").Copy After:=Sheets(1) 'copie la feuille 1 'trie les feuilles par ordre croissant Dim I As Integer, J As Integer For I = 1 To Sheets.Count For J = 1 To I - 1 If UCase(Sheets(I).Name) < UCase(Sheets(J).Name) Then Sheets(I).Move Before:=Sheets(J) Exit For End If Next J Next I Sheets("jour").Select 'sélectionne la feuille 1 End Sub |
Pour télécharger un exemple, cliquer ici.
Activer une macro x temps après l'ouverture du classeur :
Pour activer une macro à un instant déterminé après l'ouverture d'un classeur, saisir le code suivant dans ThisWorkBook :
Private Sub Workbook_Open() 'Effectue une action x temps après ouverture Application.OnTime Now + TimeValue("00:00:00"), "Macrox" 'Temps à déterminer ("00:00:00") 'Macro dans Module1 "Macrox" à adapter End Sub |
Pour télécharger un exemple, cliquer ici.
Actionner une commande lors de la sélection d'une cellule :
Pour lancer une action par la seule sélection d'une cellule, saisir le code suivant dans le module Feuil :
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
If Target.Address = "$B$3" Then 'clique dans cellule B3 - à adapter Sheets("truc").Activate 'ouvre la feuille "truc" - adaptable à autre action End If End Sub Private Sub Worksheet_Activate() Range("A1").Select End Sub |
Pour télécharger un exemple, cliquer ici.
Lister les onglets d'un classeur :
Pour lister les onglets d'un classeur, dans l'ordre affiché des feuilles, saisir le code suivant dans un module standard :
Sub ListOnglets()
'Liste les onglets d'un classeur Dim i As Integer Dim ligne As Integer Dim colonne As Integer ligne = 0 'Ligne depuis laquelle on écrit (0 = rangée 1) colonne = 1 'Colonne dans laquelle on écrit (1 =colonne A) For i = 1 To Worksheets.Count Cells(ligne + i, colonne).FormulaR1C1 = Worksheets.Item(i).Name Next i End Sub |
Pour télécharger un exemple, cliquer ici.
Lister les onglets d'un classeur avec liens hypertextes :
Pour lister les onglets d'un classeur dans l'ordre affiché des feuilles avec liens permettant leur accès direct, saisir le code suivant dans un module standard :
Sub HyperOnglets()
Dim I As Integer ActiveWorkbook.Worksheets(1).Select ActiveSheet.Range("A2").CurrentRegion.ClearContents For I = 2 To ActiveWorkbook.Worksheets.Count ActiveSheet.Range("A" & I).Select ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:="'" & Worksheets(I).Name & "'!A1", TextToDisplay:=Worksheets(I).Name Next Cancel = True End Sub |
Pour télécharger un exemple, cliquer ici.
Protection de toutes les feuilles d'un classeur :
Pour protéger toutes les feuilles d'un classeur saisir le code suivant :
D'une part dans un Module standard :
Sub MetProtec()
'Protège toutes les feuilles For i = 1 To Worksheets.Count Worksheets(i).Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, Password:="" 'Empêche la sélection des cellules verrouillées - facultatif Worksheets(i).EnableSelection = xlUnlockedCells Next End Sub |
Si la protection est avec mot de passe, le saisir entre les "" de Password:="mot de passe"
D'autres part dans ThisWorkbook :
Private Sub Workbook_Open()
MetProtec End Sub |
Pour enlever la protection de toutes feuilles d'un classeur, saisir le code suivant dans un Module standard :
Sub SupProtec()
'Supprime la protection de toutes les feuilles For i = 1 To Worksheets.Count Worksheets(i).Unprotect Password:="" Next End Sub |
Pour télécharger un exemple, cliquer ici.
Tri des feuilles d'un classeur par ordre croissant ou décroissant :
Pour trier les feuilles d'un classeur par ordre croissant, saisir le code suivant dans un Module standard :
Sub TriFeuilsCrois()
'trie les feuilles par ordre croissant Dim I As Integer, J As Integer For I = 1 To Sheets.Count 'pour débuter le tri à la feuille x remplacer For I = 1 pat For I = x For J = 1 To I - 1 'pour débuter le tri à la feuille x remplacer For J = 1 par For J = x If UCase(Sheets(I).Name) < UCase(Sheets(J).Name) Then 'pour tri décroissant remplacer < par > Sheets(I).Move Before:=Sheets(J) Exit For End If Next J Next I End Sub |
Pour trier les feuilles d'un classeur par ordre décroissant, saisir le code ci-dessus dans un Module standard en remplaçant < par >.
Pour trier les feuilles à partir de la feuille x modifier le code For I = X To Sheets.Count et For J = X To I - 1
Pour télécharger un exemple, cliquer ici.
Activer la cellule contenant la date du jour lors de l'ouverture du classeur :
Pour activer la cellule contenant la date du jour lors de l' ouverture d'un classeur saisir le code suivant :
D'une part dans un Module standard :
Sub CelAujourdhui()
'sélectionne la cellule contenant la date du jour 'dans colonne 1 - à adapter Do Cells(i + 1, 1).Activate If Cells(i + 1, 1) = Date Then ActiveWindow.ScrollRow = i + 1 Exit Do End If i = i + 1 Loop End Sub |
D'autres part dans ThisWorkbook :
Private Sub Workbook_Open()
'à l'ouverture ouvrir Feuil1 Worksheets("Feuil1").Activate 'activer macro CelAujourdhui CelAujourdhui End Sub |
Pour télécharger un exemple, cliquer ici.
Insertion de la date du jour dans une cellule (date figée) :
Pour insérer la date du jour dans une cellule sélectionnée, saisir le code suivant dans un Module standard :
Sub DateJour()
'Insertion date du jour Selection = Now End Sub |
Pour insérer la date du jour dans une cellule nommée, saisir le code suivant dans un module standard :
Sub DateToday()
'Insertion date du jour Range("today") = Now End Sub |
Pour insérer la date du jour par double clique dans une cellule, saisir le code suivant dans le module de feuille :
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
ActiveCell = Date End Sub |
Pour insérer la date du jour à l'ouverture du classeur, saisir le code suivant dans ThisWorkbook :
Private Sub Workbook_Open()
'insertion date du jour dans cellule "jour" Range("jour") = Now End Sub |
Pour télécharger un exemple, cliquer ici.
Supprimer les rangées vides d'une feuille :
Pour supprimer les rangées vides intercalées d' une feuille, saisir le code suivant dans un module standard :
Sub SupRanVid() With ActiveSheet.UsedRange derLi = .Row + .Rows.Count - 1 End With Application.ScreenUpdating = False For r = derLi To 1 Step -1 If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete Next r End Sub |
Pour télécharger un exemple, cliquer ici.
Afficher un message avec condition à l'ouverture d'un classeur :
Pour afficher un message à l' ouverture d'un classeur saisir le code suivant :
D'une part dans un Module standard :
Sub MessOuv() 'si la cellule B1 est égale à la date du jour + 5 If Range("B1") = Date + 5 Then 'montrer la fenêtre MsgBox '& Chr(10) & permet d'aller à la ligne MsgBox "Message pouvant être modifié depuis l'éditeur VBAProject" & Chr(10) & "Accessible dans Module1" End If End Sub |
D'autres part dans ThisWorkbook :
Private Sub Workbook_Open() 'Sélection de la page contenant la date Sheets("ouv").Select 'Renvoi à macro Module1 MessOuv End Sub |
Pour télécharger un exemple, cliquer ici.
Afficher un simple message à l'ouverture d'un classeur :
Pour afficher un message à l' ouverture d'un classeur saisir le code suivant dans un Module standard :
Sub auto_open() MsgBox "bonjour" End Sub |
Pour télécharger un exemple, cliquer ici.
Afficher l' heure courante dans une cellule :
Pour afficher l' heure dans une cellule saisir le code suivant :
D'une part dans un Module standard :
Sub Horloge() ' Variables: ' "Montre.xls" nom du classeur ' "heure" nom de la feuille ' "A1" cellule affichant l'heure Workbooks("Montre.xls").Worksheets("heure").Range("A1") = Time Application.OnTime Now + TimeValue("00:00:01"), "Horloge" End Sub |
D'autres part dans ThisWorkbook :
Private Sub Workbook_Open() ' "Horloge" nom de la macro à lancer à l'ouverture Application.OnTime Now + TimeValue("00:00:01"), "Horloge" End Sub |
Pour télécharger un exemple, cliquer ici.
Ouverture d' un document Word :
Pour commander l' ouverture un document Word depuis Excel, activer préalablement la référence Microsoft Word Object Library et saisir le code suivant dans un module standard :
Sub OuvrirDocWord() 'necesite d'activer la reference Microsoft Word xx.x Object Library 'depuis le menu Outils > Références... Dim appWrd As Word.Application Dim docWord As Word.Document 'chemin d'accès du fichier Word à ouvrir Fichier = "C:\Documents and Settings\GG\Bureau\OuvWord\MonWord.doc" 'A adapter Set appWrd = CreateObject("Word.Application") 'creation session Word appWrd.Visible = True 'pour que word soit apparent Set docWord = appWrd.Documents.Open(Fichier) End Sub |
Pour activer la Référence Microsoft Word xx.x Object Library, depuis VBE, aller dans le menu Outils > Références...
Pour télécharger un exemple, cliquer ici et ici.
Pour modifier le texte sélectionné d'une feuille de calcul en majuscules ou en minuscules.
Code à copier dans un Module standar.
Sub Majuscule() |
|
![]() |
Pour télécharger un exemple, cliquer ici.
Pour une saisie en colonne A, de A1 à A20, l' heure de saisie s' inscrit en colonne B..
Code à saisir dans le module Feuil :
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column = 1 And Target.Row <= 20 Then 'saisie en colonne 1 jusqu'à rangée 20 Target.Offset(0, 1) = Format(Now, "hh:mm") 'heure affichée en colonne 2 - format modifiable End If End Sub |
Pour télécharger un exemple, cliquer ici.
Première lettre en majuscule :
Pour mettre automatiquement la première lettre de chaque cellule en majuscule, saisir dans le module Feuil :
Private Sub Worksheet_Change(ByVal Target As Range) |
Pour télécharger un exemple, cliquer ici.
Afficher les 56 couleurs de la palette des couleurs d' Excel :
Pour afficher les 56 couleurs d' Excell :avec leur code, saisir dans un module standar le code suivant :
Affiche_Couleurs pour les couleurs sans le code. Le code est défini par les numéros de rangées.
Affiche_Couleurs_Codes avec les codes.
Sub Affiche_Couleurs() |
Pour télécharger un exemple, cliquer ici.
Mise en forme conditionnelle :
Code à utiliser lorsque la foncton Mise en forme conditionnelle d' Excel ne suffit pas. A copier dans le module de feuille et à adapter s'il y a plus de 4 conditions.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) |
Pour télécharger un exemple, cliquer ici.
Pour effectuer un tri aléatoire copier le code suivant dans un module standart.
Au préalable les valeurs auront été saisies en colonne B.
Sub TriAleatoire() |
Pour télécharger un exemple, cliquer ici.
Pour définir la dimension des rangées et des colonnes en centimètre le code suivant est à copier dans un module standard.
Pour les rangées :
Sub RangéesEnCm() |
Pour les colonnes :
Sub ColonnesEnCm() |
|
![]() |
Pour télécharger un exemple, cliquer ici.
Afin de ne pas perdre le contenu d'un classeur ou de ses modifications à la suite d'une fausse manœuvre il est conseillé de faire Enregistrer sous... régulièrement.
Pour éviter cette contrainte il est possible de programmer l'enregistrement à une cadence désirée.
Pour cela, copier le code suivant dans un module standard.
Public MTime As Date
|
Et le code suivant dans ThisWorkbook
Private Sub Workbook_Open()
|
Pour télécharger un exemple, cliquer ici.
Compteur manuel par clique dans une cellule.
Pour cela, copier le code suivant dans un module standard.
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
|
D'autres possibilités de comptage dans le fichier téléchargeable.
Pour télécharger un exemple, cliquer ici.
Afficher une feuille en fonction du contenu d'une cellule :
Il est possible d'afficher une feuille masquée en fonction du contenu d'une cellule.
Pour cela, copier le code suivant dans un module standard.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
Dans cet exemple la feuille 2 sera affichée si la cellule A5 n'est pas vide.
Pour télécharger un exemple, cliquer ici.
Enregistrement à la fermeture avec ajout de la date au nom du classeur :
Il est possible d'ajouter la date du jour à la suite du nom du classeur lors de la fermeture de ce dernier, l'enregistrement se faisant automatiquement.
Pour cela, copier le code suivant dans ThisWorkbook.
Private Sub Workbook_BeforeClose(Cancel As Boolean)
|
Dans cet exemple le nom du classeur s'enregistre sous la forme EnrTest_12-07-2001.xls Le code sera donc à adapter pour:
- Le nom du classeur "EnrTest_"
- Le chemin d'accès "C:\Documents and Settings\GG\Bureau"
Pour le cas où le fichier est à enregistrer sur un lecteur externe, le code doit être adapté comme ci-dessous (exemple pour lecteur O:\ :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
|
Pour télécharger un exemple, cliquer ici.
Colorier une rangée sur deux :
Pour colorier une rangée sur deux, copier le texte suivant dans le module de feuille.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
Dans cet exemple les lignes de code 4, 5, et 6 pourront être adaptées en fonction de la mise en page choisie.
- Ligne 5: plage concernée.
- Ligne 6: Choix de la couleur. Palette des couleurs.
- Nombre de saut de ligne i = i + x.
Pour télécharger un exemple, cliquer ici.
Effacer le contenu d'une cellule par sélection d'une autre :
Pour effacer le contenu d'une cellule par simple clique dans une autre, le code suivant est à copier dans le module de feuille.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
Dans cet exemple les cellules concernées peuvent être adaptées en fonction du besoin.
Pour télécharger un exemple, cliquer ici.
Il est possible de provoquer le recalcule automatique des formules d' un classeur à des fréquences programmées.
Pour cela, copier le code suivant dans un module standard.
Public MTime As Date
|
Et le code suivant dans ThisWorkbook
Private Sub Workbook_Open()
|
Pour télécharger un exemple, cliquer ici.
Ce code à copier dans le module de feuille donne les résultats d'une recherche dans une plage.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
Il est bien sur à adapter et pour cela des précisions sont données sur l'exemple téléchargeable.
Pour télécharger un exemple, cliquer ici.
Sélectionner une plage en cliquant dans une cellule :
Pour sélectionner une rangée ou une plage en cliquant dans la première cellule, le code suivant est à copier dans le module de feuille.
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
Dans cet exemple les cellules concernées peuvent être adaptées en fonction du besoin.
Pour télécharger un exemple, cliquer ici.
Activer une feuille numérotée :
Pour activer une feuille numérotée (onglets 1, 2, 3, etc...), le code suivant est à copier dans le module de feuille.
L'ordre des feuilles doit être respecté. Feuil1 est la feuille de choix, Feuil2 avec onglet 1, Feuil3 avec onglet 2, etc...
Private Sub Worksheet_Change(ByVal Target As Range)
|
Pour télécharger un exemple, cliquer ici.
Les fonctions sont à copier dans le module de Feuille entre les deux lignes suivantes:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
|
- Math & Trigo:
ROMAIN
WorksheetFunction.Roman([F43], 0) |
SOMME
WorksheetFunction.Sum(Range("G5:G38"))
'ou WorksheetFunction.Sum([G5:G38]) 'ou Evaluate("Sum(G5:G38)") |
SOMME.SI
WorksheetFunction.SumIf(Range("G5:G38"), Range("F23"))
'ou WorksheetFunction.SumIf([G5:G38], [F23]) 'ou Evaluate("SumIf(G5:G38,F23)") |
SOMMEPROD
Evaluate("SumProduct((G5:G38 = 10) * (H5:H38 = 100))")
'ou Evaluate("SumProduct((G5:G38 = F29) * (H5:H31 = F33))") 'ou Evaluate("SumProduct((G5:G38 = 10) * (H5:H38 = 100))*(I5:I38)") 'ou Evaluate("SumProduct((G5:G38 = F31) * (H5:H38 = F33))*(I5:I38)") |
- Statistiques:
GRANDE.VALEUR
WorksheetFunction.Large([H5:H38], 1) |
PETITE.VALEUR
WorksheetFunction.Small([H5:H38], 1) |
NB
WorksheetFunction.CountA(Range("G5:G38"))
'ou WorksheetFunction.CountA([G5:G38]) 'ou Evaluate("CountA(G5:G38)") |
NB.SI
WorksheetFunction.CountIf(Range("G5:G38"), Range("F13"))
'ou WorksheetFunction.CountIf([G5:G38], [F13]) 'ou Evaluate("CountIf(G5:G38,F13)") 'ou WorksheetFunction.CountIf(Range("G5:G38"), 10) 'ou WorksheetFunction.CountIf([G5:G38], 10) 'ou Evaluate("CountIf(G5:G38,10)") |
NB.VIDE
Evaluate("COUNTBLANK(I5:I38)") |
- Recherches & Matrices:
RECHERCHE
WorksheetFunction.Lookup(9 ^ 9, [H:H]) |
- Dates & Heures:
ANNEE
Evaluate("Year(G7)") |
AUJOURDHUI
Evaluate("Today()") |
HEURE
Evaluate("Hour(G21)") |
JOUR
Evaluate("Day(G7)") |
JOURSEM
Evaluate("WeekDay(G7,2)") |
JOUR360
Evaluate("Days360(G15,G7)") |
MAINTENANT
Evaluate("Now()") |
MINUTE
Evaluate("Minute(G21)") |
MOIS
Evaluate("Month(G7)") |
NO.SEMAINE
Evaluate("No.Semaine(G7,2)") |
SECONDE
Evaluate("Second(G21)") |
Pour télécharger un exemple, cliquer ici.