Les sujets abordés dans cette page Les fonctions mathématiques et trigonométriques , Les impressions , Les temporisations , Les fonctions , Les evenements , Excel , Les cellules , Copier & Coller , Les dates et les calendriers , Les spécificités Macintosh , Générer des fichiers Flash , Open Office . |
Généralités Excel - page 1
Ce qui touche aux userforms - page 2
Piloter d'autres applications depuis Excel - page 3
Fonctions, événements, dates et calendriers - page 4
Formules, audits, répertoires et fichiers - page 5
Doublons, tris et filtres, variables, fichiers fermés, Access - page 6
Commentaires, gestion des erreurs, aide en ligne, recherches, tableaux, pages html, PC et système d'exploitation - page 7
Les objets dans le feuille, liens hypertextes, formats, Visual basic editor, chaines de caractères, modules de classe- page 8
Les Tableaux et graphiques Croisés Dynamiques, fichiers XML - page 9
Le Publipostage Word / Excel - page 10
Librairie Windows Image Acquisition Automation Library v2.0 - page 11
Ce qui touche aux userforms - page 2
Piloter d'autres applications depuis Excel - page 3
Fonctions, événements, dates et calendriers - page 4
Formules, audits, répertoires et fichiers - page 5
Doublons, tris et filtres, variables, fichiers fermés, Access - page 6
Commentaires, gestion des erreurs, aide en ligne, recherches, tableaux, pages html, PC et système d'exploitation - page 7
Les objets dans le feuille, liens hypertextes, formats, Visual basic editor, chaines de caractères, modules de classe- page 8
Les Tableaux et graphiques Croisés Dynamiques, fichiers XML - page 9
Le Publipostage Word / Excel - page 10
Librairie Windows Image Acquisition Automation Library v2.0 - page 11
Les fonctions mathématiques
- Afficher la racine carré d'un nombre par la fonction Sqr
Sub Test()Msgbox Sqr(9) ' 3Msgbox Sqr(50) ' 7,07106781186548Msgbox Sqr(0) ' 0End Sub - La fonction Sgn permet de déterminer le signe d'un nombre
Les valeurs renvoyées :Si supérieur à zéro : 1Si égal à zéro : 0Si inférieur à zéro : -1Sub Test()Msgbox Sgn(20.4) ' 1Msgbox Sgn(-44) ' -1Msgbox Sgn(0) '0End Sub - Utiliser les fonctions des feuilles Excel par Vba
Par exemple calculer la moyenne de la plage A1:A5Sub calculMoyenne()Msgbox Application.Worksheetfunction.Average(Range("A1:A5"))End Sub - Calculer la somme de la plage A1:A5 par macro
Sub calculSomme()Msgbox Application.Worksheetfunction.Sum(Range("A1:A5"))End Sub - Convertir des Fahrenheit en Celsius
Sub conversion_Fahrenheit_Celsius()Dim Fahr As VariantFahr = inputBox("Saisir la température en Fahrenheit :", _"Conversion Fahrenheit en Celsius", 0)If Fahr = "" Then Exit SubmsgBox Fahr & " Fahrenheit = " & Format((5 / 9) * (Fahr - 32), "0.000") & " Celsius ."End Sub - Calculer la surface d'un cercle
Sub surfaceCercle()Dim Rayon As VariantRayon = inputBox("Saisir le rayon :", "Calcul surface d'un cercle", 0)If Rayon = "" Then Exit SubIf Sgn(Rayon) > 0 Then msgBox "La surface est : " & _Format(Application.worksheetFunction.Pi * Rayon ^ 2, "0.0000"), , _"Surface cercle-Rayon=" & RayonEnd Sub - Calculer le volume d'un cylindre droit
Sub volumeCylindreDroit()Dim Rayon As Variant, Hauteur As VariantRayon = inputBox("Saisir le rayon :", "Calcul volume d'un cylindre droit ", 0)If Rayon = "" Then Exit SubHauteur = inputBox("Saisir la hauteur :", "Calcul volume d'un cylindre droit ", 0)If Hauteur = "" Then Exit SubIf Sgn(Rayon) > 0 And Sgn(Hauteur) > 0 Then msgBox "Le volume est : " & _Format(Application.worksheetFunction.Pi * Rayon ^ 2 * Hauteur, "0.0000"), , _"volume cylindre droit-Rayon=" & Rayon & " Hauteur=" & HauteurEnd Sub - Calculer le volume d'une sphère
Sub volumeSphere()Dim Rayon As VariantDim vS As DoubleRayon = inputBox("Saisir le rayon :", "Calcul volume d'une sphère ", 1)If Rayon = "" Then Exit SubvS = Application.worksheetFunction.Pi * (Rayon ^ 3) * 4 / 3msgBox "Le volume est : " & VsEnd Sub - Vérifier si la valeur de la cellule A1 est un nombre premier
Sub verificationNombrePremier()Dim Valeur As Long, Diviseur As LongValeur = Range("A1")Diviseur = 1If Valeur > 1 ThenDoDiviseur = Diviseur + 1Loop While Valeur Mod Diviseur <> 0End IfIf Diviseur =Valeur ThenmsgBox Valeur & " est un nombre premier", , "Resultat"ElsemsgBox Valeur & " n'est pas un nombre premier", , "Resultat"End IfEnd Sub - Chercher les 3 plus grandes valeurs d'une plage
Sub troisPlusgrandesValeurs()Dim Plage As RangeDim i As Byte'les valeurs à rechercher sont dans la colonne ASet Plage = Columns(1)For i = 1 To 3'resultat s'affiche dans la colonne BCells(i, 2) = Application.worksheetFunction.Large(Plage, i)Next iEnd Sub - La difference entre la fonction Round et Application.worksheetFunction.Round
- Vérifier si un nombre est un multiple de 10
Dim maVariable As IntegermaVariable = 50If maVariable Mod 10 = 0 Then msgBox "est un multiple de 10" - Quelle valeur ajouter à un nombre pour obtenir un multiple de 10
Dim maVariable As IntegermaVariable = 32If maVariable Mod 10 <> 0 ThenmsgBox 10 - (maVariable Mod 10)ElsemsgBox 0End If
- Afficher le cosinus , le Sinus et la Tangente d'un angle
L'argument x entre parentheses exprime la valeur d'un angle en radiansPour convertir des radians en degrés, multipliez-les par 180/piSub test()Dim x As Double'exemple pour un angle de 30 degrés'transformation en radiansx = 30 * Application.Worksheetfunction.Pi / 180'résultatsMsgbox Cos(x) 'cosinusMsgbox 1 / Cos(x) 'secanteMsgbox Sin(x) 'sinusMsgbox 1 / Sin(x) 'cosecanteMsgbox Tan(x) 'tangenteMsgbox 1 / Tan(x) 'cotangenteEnd Sub
- Imprimer une feuille
Sub imprimerUneFeuille()Sheets("feuil2").printOutEnd Sub - Imprimer toutes les feuilles du classeur
Dim Ws As WorksheetFor Each Ws In thisWorkbook.WorksheetsWs.printOutNext - Imprimer une plage de cellules
Sub imprimerPlageCellules()Sheets("feuil1").Range("A1😀10").printOutEnd Sub - Aperçu de la Feuille nommée "Feuil2" avant impression
Sub previsualiserAvantPrint()Sheets("Feuil2").printPreviewEnd Sub - Effectuer l'aperçu avant impression en utilisant les boites de dialogues intégrées d'Excel
Application.Dialogs(xlDialogPrintPreview).ShowRemarque :L'argument False permet de rendre inactifs les boutons "mise en page" et "Marges"Application.Dialogs(xlDialogPrintPreview).Show False - Imprimer la page active et les tous les classeurs liés
Sub imprimerPageActiveEt_Liensclasseurs()Dim Lien As HyperlinkDim I As ByteApplication.screenUpdating = FalseActivesheet.printOutFor Each Lien In activeSheet.HyperlinksIf Right(Range(Lien.Range.Address).Hyperlinks(1).Address, 4) = ".xls" ThenRange(Lien.Range.Address).Hyperlinks(1).Follow newWindow:=FalseFor I = 1 To activeWorkbook.Sheets.CountactiveWorkbook.Sheets(I).printOutNext IactiveWorkbook.CloseEnd IfNextApplication.screenUpdating = TrueEnd Sub - Imprimer une feuille sans couleur de fond
- Choix par inputBox du nombre de copies à imprimer
Sub imprimeClasseur()Dim X As ByteOn Error goTo gestionErreurX = inputBox("Saisir le nombre de copies à effectuer . ", "Impression")activeWorkbook.printOut Copies:=X, Collate:=TrueExit SubgestionErreur:If Err = 13 Then msgBox "Saisie non valide ."End Sub - Imprimer une Feuille en noir et blanc
Sub impressionNoirEtBlanc()With Worksheets("Feuil1").pageSetup.blackAndWhite = True 'parametrage N&B.printOut 'imprimer.pageSetup.blackAndWhite = False'réinitialisationEnd WithEnd Sub - Changer temporairement l'imprimante active
- Afficher l'aperçu des sauts de page , de la feuille active
Sub afficherSautsDePage()activeWindow.View = xlPageBreakPreviewEnd Sub - Masquer l'aperçu des sauts de page , de la feuille active
Sub masquerLesSautsDePage()activeWindow.View = xlNormalViewEnd Sub - Afficher la boite de dialogue d'impression, en précisant le nombre de copies
'Dans l'exemple le nombre de copies par défaut =3Sub boiteDialogueImpression()Application.Dialogs(xlDialogPrint).Show , , , 3End Sub - Afficher la boite de dialogue pour le choix de l'imprimante
Sub boiteDialogueChoixImprimante()Application.Dialogs(Excel.xlBuiltInDialog.xlDialogPrinterSetup).ShowEnd Sub - Sélectionner l'imprimante pour l'édition
If Application.Dialogs(xlDialogPrinterSetup).Show = True Then Feuil1.printOut - Empècher l'impression
Private Sub Workbook_beforePrint(Cancel As Boolean)Cancel = TrueEnd Sub - Signaler la fin d'impression par un msgBox
- Suivre l'impression des documents
La macro "Suivi_Impression_V02" permet d'afficher dans la barre de statut des informations sur le document en cours d'édition :le nombre de pages déja impriméesle nombre total de pages à imprimerle nom du document en cours d'impressionLa macro "Temporisation" permet de rafraichir régulierement les informations( toutes les 2 secondes dans l'exemple )La macro "Finir" termine la procedure lorsque la file d'attente d'impression est videvoir la procedure du : 23-11-04 00:46 dans le fil de discussionUn autre exemple :Lien supprimé - Lister les imprimantes installées et préciser laquelle est active
Sub listeImprimantes_et_Statut()'testé avec Excel2002 et WinXPDim objWMIService As Object, colInstalledPrinters As Object, objPrinter As ObjectDim nomPC As String, Resultat As StringnomPC = "."Set objWMIService = getObject("winmgmts:" & _"{impersonationLevel=impersonate}!\\" & nomPC & "\root\cimv2")Set colInstalledPrinters = objWMIService.execQuery("Select * from Win32_Printer")For Each objPrinter In colInstalledPrintersResultat = Resultat & objPrinter.Name & " imprimante active : " & objPrinter.Default & vbLfNextmsgBox ResultatEnd Sub - Afficher les propriétés des imprimantes installées
Sub proprietesImprimantes()Dim objWMIService As Object, colItems As ObjectDim objItem As ObjectDim strComputer As StringDim i As ByteOn Error Resume NextstrComputer = "."Set objWMIService = getObject("winmgmts:\\" & strComputer & "\root\cimv2")Set colItems = objWMIService.execQuery("Select * from Win32_printerConfiguration", , 48)For Each objItem In colItemsi = i + 1Cells(1, i) = "bitsPerPel: " & objItem.bitsPerPelCells(2, i) = "Caption: " & objItem.CaptionCells(3, i) = "Collate: " & objItem.CollateCells(4, i) = "Color: " & objItem.ColorCells(5, i) = "Copies: " & objItem.CopiesCells(6, i) = "Description: " & objItem.DescriptionCells(7, i) = "deviceName: " & objItem.deviceNameCells(8, i) = "displayFlags: " & objItem.displayFlagsCells(9, i) = "displayFrequency: " & objItem.displayFrequencyCells(10, i) = "ditherType: " & objItem.ditherTypeCells(11, i) = "driverVersion: " & objItem.driverVersionCells(12, i) = "Duplex: " & objItem.DuplexCells(13, i) = "formName: " & objItem.formNameCells(14, i) = "horizontalResolution: " & objItem.horizontalResolutionCells(15, i) = "ICMIntent: " & objItem.ICMIntentCells(16, i) = "ICMMethod: " & objItem.ICMMethodCells(17, i) = "logPixels: " & objItem.logPixelsCells(18, i) = "mediaType: " & objItem.mediaTypeCells(19, i) = "Name: " & objItem.NameCells(20, i) = "Orientation: " & objItem.OrientationCells(21, i) = "paperLength: " & objItem.paperLengthCells(22, i) = "paperSize: " & objItem.paperSizeCells(23, i) = "paperWidth: " & objItem.paperWidthCells(24, i) = "pelsHeight: " & objItem.pelsHeightCells(25, i) = "pelsWidth: " & objItem.pelsWidthCells(26, i) = "printQuality: " & objItem.printQualityCells(27, i) = "Scale: " & objItem.ScaleCells(28, i) = "SettingID: " & objItem.SettingIDCells(29, i) = "specificationVersion: " & objItem.specificationVersionCells(30, i) = "TTOption: " & objItem.TTOptionCells(31, i) = "verticalResolution: " & objItem.verticalResolutionCells(32, i) = "XResolution: " & objItem.XresolutionCells(33, i) = "YResolution: " & objItem.YresolutionColumns(i).autoFitNextEnd Sub
- Modifier la mise en page avant impression
Sub miseEnPageAvantImpression()With Feuil1.pageSetup.leftMargin = Application.inchesToPoints(0.5).rightMargin = Application.inchesToPoints(0.75).topMargin = Application.inchesToPoints(1.5).bottomMargin = Application.inchesToPoints(1).headerMargin = Application.inchesToPoints(0.5).footerMargin = Application.inchesToPoints(0.5)End WithFeuil1.printPreviewEnd Sub - Arreter l'impression en cours et vider la file d'attente
- Définir la zone d'impression sur une plage de cellules
activeSheet.pageSetup.printArea = "$A$1:$E$10" - Adapter la zone d'impression à une seule feuille
With Sheets(1).pageSetup.printArea = "A1:M100".Zoom = False.fitToPagesWide = 1.fitToPagesTall = 1End With - Réinitialiser la zone d'impression à la feuille complete
activeSheet.pageSetup.printArea = ""Une autre possibilité :activeSheet.pageSetup.printArea = False - Vérifier si l'imprimante est parametree pour imprimer en Noir et Blanc ou en couleur
( Voir le message du 18/08/2005 20:54 ) - Répéter l'insertion des 4 premieres lignes dans toutes les pages imprimées
menu FichierMise en pageonglet "Feuille"dans le champ "Lignes à repeter en haut" , tu selectionnes les 4 lignes qui devront apparaître sur chaque page impriméetu peux aussi saisir directement dans ce champ $1:$4 - Centrer le contenu de la feuille lors de l'impression
With Feuil1.pageSetup.centerHorizontally = True.pageSetup.centerVertically = True.printOutEnd With - Imprimer un fichier texte
Shell "notepad.exe /P""C:\monRepertoire\leFichier.txt""", 1 - Ouvrir le port d'impression pour éditer un texte
Sub imprimerTexte()Open "LPT1:" For Output As #1Print #1, "test d'impression."Print #1, "test 2eme ligne."Close #1End Sub - Imprimer le 2eme graphique contenu dans le Feuil1
Feuil1.chartObjects(2).Chart.printOut - Imprimer la Feuil1 d'un Addin (.xla)
With Workbooks("test.xla").isAddin = False.Worksheets("Feuil1").printOut Copies:=1, Collate:=True.isAddin = TrueEnd With - Imprimer la première page en mode Paysage et la deuxième page en mode Portrait
With Feuil1.pageSetup.Orientation = xlLandscape.printOut From:=1, To:=1.pageSetup.Orientation = xlPortrait.printOut From:=2, To:=2End With
- Effectuer une pause dans la procédure
Declare Sub Sleep Lib "kernel32" (byVal dwMilliseconds As Long)Sub macroAvecPause()'le debut de la macroSleep 1000 'pause en millisecondes'la suite de la macroEnd Sub - Paramétrer la durée d'une action : 5 secondes dans cet exemple
t = Timer + 5: Do Until Timer > t: doEvents: Loop - La méthode onTime permet d'éxécuter les procedures à un moment précis( exemples issus de l'aide Excel)
Exécuter my_Procedure dans 15 secondes.Application.onTime Now + timeValue("00:00:15"), "my_Procedure"Exécuter my_Procedure à 17 heures.Application.onTime timeValue("17:00:00"), "my_Procedure"Annuler le paramétrage de onTime de l'exemple précédent.Application.onTime earliestTime:=timeValue("17:00:00"), Procedure:="my_Procedure", Schedule:=False - Relancer une macro de façon récursive toutes les 2 secondes , tant qu'une condition n'est pas remplie
'la macro incrémente la cellule B1 d'une unité toutes les 2 secondes' saisir la valeur 1 dans la cellule A1 pour terminer la procedure !!'***Sub lancerLaProcedure()TemporisationEnd Sub'***''**Sub Temporisation()'timer toutes les 2 secondesApplication.onTime Now + timeValue("00:00:02"), "maMacro"End SubSub maMacro()Range("B1") = Range("B1") + 1 'incementation de la cellule B1If Range("A1") = 1 Then ' terminer la procedure si la cellule A1=1FinirExit SubEnd IfTemporisationEnd SubSub Finir()On Error Resume NextApplication.onTime Now + timeValue("00:00:01"), "maMacro", , Schedule:=FalseEnd Sub'* - Un compte à rebours pour fermer un Userform
Lien supprimé
- La fonction Val et les valeurs décimales :
Pour extraire les données décimales avec la fonction Val , il faut remplacer la virgule par un point - Utiliser la fonction DROITEREG ( LINEST) par macro
Dim y_connus(), x_connus()y_connus = Array(5, 2, 1)x_connus = Array(6, 3, 4)Range("A1") = worksheetFunction.linEst(y_connus, x_connus) - Lancer une procédure contenue dans une macro complémentaire .XLA
Cet exemple lance une macro issue de l'utilitaire d'analyse - VBA (ATPVBAEN.XLA)msgBox Application.Run("ATPVBAEN.XLA!WORKDAY", 12/11/2005, 10, 5) - Utiliser une fonction matricielle SOMMEPROD par macro
La macro correspond à cette formule:SOMMEPROD((E58:E183=H60)(C58:C183=I60)(B58:B183=J60)*(F58:F183))Les arguments H60, I60 et J60 seront maintenant des données saisie dans les Textbox d'un UserformmsgBox Evaluate("=SUMPRODUCT((E58:E183 =""" & textBox1.Text & """) * " & _"(C58:C183 =""" & textBox2.Text & """) * (B58:B183 =""" & textBox3.Text & """) * (F58:F183))") - La fonction Switch: Renvoyer la donnée associée à un mot
Sub Test()msgBox valeurEquivalente("Vert")End SubFunction valeurEquivalente(Couleur As String)valeurEquivalente = Switch(Couleur = "Bleu", 5, Couleur = "Vert", 4, Couleur = "Rouge", 3)End Function - La fonction IIf : Renvoyer l'un ou l'autre de deux arguments selon l'évaluation d'une expression.
(informations issues de l'aide en ligne Excel)IIf(Expr, Truepart, Falsepart)Expr : Expression à évaluer.Truepart : Valeur ou expression renvoyée si la valeur de Expr est True.Falsepart : Valeur ou expression renvoyée si la valeur de Expr est False.Exemple : Attribuer une donnée à la cellule A1 en fonction du contenu de la variable CibleDim Cible As StringCible = "Bleu"Range("A1") = IIf(Cible = "Vert", "x", "y")Remarque :L'argument Falsepart est évalué même si la valeur de Expr est Vraie .
- Débuter : comment afficher un message à l'ouverture du classeur
Lien supprimé - Empecher l'affichage du menu contextuel lors du clic droit dans la feuille
Private Sub Workbook_sheetBeforeRightClick(byVal Sh As Object, _byVal Target As Range,Cancel As Boolean)Cancel = TrueEnd Sub - Emettre un son lors du clic sur un lien hypertexte , à partir d'Excel2000
Private Sub Workbook_sheetFollowHyperlink(byVal Sh As Object, byVal Target As Hyperlink)BeepEnd Sub - Utilisez la propriété enableEvents pour désactiver les procédures évenementielles et pour éviter certaines boucles infinies
Private Sub Workbook_sheetChange(byVal Sh As Object, byVal Target As Excel.Range)Application.enableEvents = False...ma macro…'TRES IMPORTANT : ne pas oublier de remettre la valeur True en fin de macroApplication.enableEvents = TrueEnd Sub - Appeler l'evenement Click d'un commandButton ( placé dans une feuille ) depuis une autre macro
Application.Run ("Feuil1.commandButton1_Click") - Afficher un message lors du clic sur la cellule E10
Private Sub Worksheet_selectionChange(byVal Target As Range)If Not Application.Intersect(Target, Range("E10")) Is Nothing Then msgBox "bonjour"End Subd'autres exemples très détaillés , par @+ThierryDéclencher une action si la Feuil1 est activée( affichage d'un USF dans l'exemple)Private Sub Workbook_sheetActivate(byVal Sh As Object)If Sh.Name = "Feuil1" Then userForm1.ShowEnd Sub - Réinitialiser le menu contextuel ( clic droit dans la feuille )
Une démo de Didier myDearFriendLa procédure permet de supprimer les menus personnalisés présents dans le menu contextuelLien suppriméUn autre exempleSub reinitialiserMenuContextuelDisparu()Application.commandBars("cell").ResetEnd Sub - Intercepter l'evenement changement de la couleur du fond des cellules
Option ExplicitDim x As IntegerDim Cell As StringPrivate Sub Worksheet_selectionChange(byVal Target As Range)On Error Resume NextIf Cell = "" Thenx = Target.Interior.colorIndexCell = Target.AddressExit SubEnd IfIf Range(Cell).Interior.colorIndex <> x Then _msgBox "la couleur de la cellule " & Cell & " a changé"x = Target.Interior.colorIndexCell = Target.AddressEnd Sub - Déclencher une procédure evenementielle contenue dans un USF ,depuis une macro qui possede une variable
le préfixe "Private" doit etre préalablement oté dans la macro de l'userFormPrivate Sub Worksheet_Change(byVal Target As Range)callByName userForm1, "commandButton" & Range("A1") & "_Click", vbMethodEnd Sub - Remplacer le menu contextuel ( clic droit de la souris ) par l'affichage de la palette de couleurs
La cellule active est coloriee par la couleur sélectionnéePrivate Sub Worksheet_beforeRightClick(byVal Target As Range, Cancel As Boolean)Dim x As LongCancel = TrueApplication.Dialogs(xlDialogPatterns).Showx = activeCell.Interior.colorIndexIf x = xlColorIndexAutomatic Then x = xlColorIndexNoneactiveCell.Interior.colorIndex = xEnd Sub - Remplacer le menu contextuel par un inputbox qui permet de choisir entre 3 couleurs, pour colorier la cellule active
Private Sub Worksheet_beforeRightClick(byVal Target As Range, Cancel As Boolean)Dim Reponse As VariantCancel = TrueReponse = Application.inputBox("Saisissez une valeur entre 1 et 3" & vbLf & vbLf & _"1 = Rouge" & vbLf & "2 = Vert" & vbLf & "3 = Bleu", "Colorier la cellule active", 1)If Not isNumeric(Reponse) And Len(Reponse) <> 1 Then Exit SubIf Reponse > 0 And Reponse < 4 Then activeCell.Interior.colorIndex = Reponse + 2End Sub
- Afficher la version d'excel
Sub versionExcel()msgBox Application.VersionEnd Sub - Fermer l'application Excel
Sub Ferme()application.QuitEnd Sub - Liste des raccourcis clavier d'Excel
- Modifier le nom de l'utilisateur Excel
Menu OutilsOptionsOnglet GénéralNom d'utilisateur - Moifier le nom de l'utilisateur Excel par macro
Application.userName = "Mon Nom" - Les spécifications et limites d'Excel (Excel2002)
65536 lignes256 colonnesNombre maximal de couleurs par classeur : 564 000 styles de cellules1024 caractères dans une cellule32767 caractères dans la barre de formule7 niveaux de fonctions imbriquées2048 plages sélectionnées1024 caractères pour la longueur du contenu des formulesPrécision numérique : 15 chiffresPlus grand chiffre autorisé à taper dans une cellule : 9,99999999999999E+307Plus grand chiffre positif autorisé : 1,79769313486231E+308Plus petit chiffre négatif autorisé : -2,2251E-308Plus petit chiffre positif autorisé : 2,229E-308Plus grand chiffre négatif autorisé : -1E-307Longueur du contenu des formules : 1 024 caractèresItérations : 32 767Arguments dans une fonction : 30Date la plus ancienne autorisée pour les calculs : 1er janvier 1900 (1er janvier 1904 en cas d'utilisation du système de date basé sur 1904)Date la plus récente autorisée pour les calculs : 31 décembre 9999Durée maximale pouvant être entrée = 9999:59:59Ouverture des classeurs Limité par la quantité de mémoire disponibleLargeur des colonnes : 255 caractèresHauteur des lignes : 409 pointsSauts de page : 1 000 horizontaux et verticauxLongueur du contenu des cellules (texte) : 32 767 caractères. Affichage de 1 024 uniquement dans une cellule et 32 767 dans la barre de formule.Nombre maximal de feuilles par classeur Limité par la quantité de mémoire disponibleNombre maximal de couleurs par classeur : 56Formats de nombre personnalisés Entre 200 et 250, selon la version linguistique d'Excel que vous avez installée.Noms dans un classeur Limité par la quantité de mémoire disponibleVolets dans une fenêtre : 4Feuilles liées Limité par la quantité de mémoire disponibleScénarios Limité par la quantité de mémoire disponible .251 scénarios seulement sont affichés dans un rapport de synthèseChangement de cellules dans un scénario : 32Cellules variables dans le Solveur : 200Fonctions personnalisées Limité par la quantité de mémoire disponiblePlage de zoom De 10 pour cent à 400 pour centRéférences de tri 3 pour un tri simple, illimité lors de l'utilisation de tris séquentielsNiveaux d'annulation 16Barres d'outils personnalisées dans un classeur Limité par la quantité de mémoire disponibleBoutons de barres d'outils personnalisées Limité par la quantité de mémoire disponibleD'autres informations completes sur les spécifications et limites d'ExcelLe lien sur Internet - Modifier le parametre d'annulation des dernieres actions dans le classeur( valeur = 16 par défaut dans Excel )
- Ouvrir le premier fichier de la liste des classeurs récemments utilisés
Application.recentFiles(1).Open - Stopper une macro qui ne veut plus s'arreter
Ctrl + Pause - Débuter : Comment créer une macro dans un classeur
Lien supprimé - La fonction intégrée de récupération automatique ( à partir d'Excel 2002 ).
La fonction de récupération automatique enregistre une copie de tous les fichiers Excel ouverts à intervalle régulier défini par l'utilisateur. Il est ainsi possible de récupérer les fichiers si Excel se ferme inopinément, au cours d'une coupure de courant, par exemple.Cette fonction est disponible dans le menu Options , puis l'onglet "Enregistrer" - La suppression des métadonnées d'Office 2003/XP
Lors de la diffusion de documents électroniques Office, ces derniers peuvent contenir des informations que vous ne souhaitez pas partager publiquement, telles que des informations considérées “cachées” ou des informations qui vous permettent de collaborer lors de la rédaction ou de la modification de documents à plusieurs.Microsoft propose un outil pour supprimer ces métadonnées.
- Verifier si la cellule active est ecrite en format gras
Private Sub worksheet_selectionChange(byVal Target As Excel.Range)If Target.Font.Bold = True ThenmsgBox "oui"Else: msgBox "non"End IfEnd Sub - Compter le nombre de cellules vides dans la plage A1:F1
msgBox Application.countBlank(Sheets("Feuil1").Range("A1:F1")) - Afficher le numéro de ligne de la cellule active
msgBox activeCell.Row - Afficher le numéro de colonne de la cellule active
msgBox activeCell.Column - Creer une liste deroulante dans une cellule
Sub creerListeDeroulante()Dim Valeur As StringValeur = activeCell.AddressWith Range(Valeur).Validation.Add Type:=xlValidateList, Formula1:="choix1,choix2"End WithEnd SubUn autre exempleSub listeDeroulante()Dim Plage As ObjectDim Valeur As StringDim Cible As StringValeur = activeCell.AddressSet Plage = Application. _inputBox("Sélectionnez une plage pour definir la liste de choix : ", Type:=8)If Plage Is Nothing Then Exit SubCible = Plage.AddressWith Range(Valeur).Validation.Add Type:=xlValidateList, Formula1:="=" & CibleEnd WithEnd Sub - Afficher un message si la cellule active se trouve dans une plage cible
Private Sub worksheet_selectionChange(byVal Target As Excel.Range)If Not Intersect(Target, Range("A1:F10")) Is Nothing Then msgBox "le forum XLD"End Sub - Changer le nom d'une cellule avec boucle
Sub changeNomsconditionnel()Dim Nom As ObjectDim Cible As StringDim i As Integer, j As IntegerSet Nom = activeWorkbook.NamesFor i = activeWorkbook.Names.Count To 1 Step -1If Nom(i).nameLocal = "test" ThenCible = Nom(i).refersToLocalNom(i).DeleteactiveWorkbook.Names.Add Name:="essai", refersTo:=CibleEnd IfNext iEnd Subou en plus direct , sans boucleSub changeNomsconditionnel2()Dim Nom As ObjectDim Cible As StringSet Nom = activeWorkbook.NamesCible = Nom("extraction").refersToLocalNom("extraction").DeleteactiveWorkbook.Names.Add Name:="extraction", refersTo:=CibleEnd Sub - faire clignoter des cellules de façon conditionnelle
Une autre solution , fournie par Didier , myDearFriend - Position auto des cellules nommées en haut à gauche de l'écran quand elles sont sélectionnées
Lien supprimé - Lister les noms du classeur dans la cellule A1
Range("A1").listNames - Afficher le nom de la cellule A1
msgBox Range("A1").Name.NameRemarque : la macro renvoie une erreur si la cellule n'est pas nommée - Lister les cellules et les plages nommées dans l'ordre d'index des feuilles et créer une table des matières avec liens hypertextes
- Lister les cellules et les plages nommées dans un Userform , puis cliquez dans la liste pour atteindre la cellule
Lien supprimé - Modifier la largeur de la colonne A
Sub largeurColonne()Columns(1).columnWidth = 23End Sub - Enregistrer une plage de cellules en image au format Jpg
- Supprimer les retours à la ligne vides dans une cellule
- Visualiser toutes les cellules fusionnées
Sub visualiserCellulesFusionnees()Dim cell As RangeFor Each cell In Feuil1.usedRange.CellsIf cell.mergeCells = True Then cell.mergeArea.Interior.colorIndex = 6Next cellEnd Sub - Visualiser toutes les cellules contenant des formules , dans la Feuil1
Sub emplacementFormules()Dim Cell As RangeFor Each Cell In Feuil1.usedRange.CellsIf Cell.hasFormula Then Cell.Interior.colorIndex = 4Next CellEnd Sub - Nommer des cellules non adjacentes , issues d'un filtre automatique
Sub nommerZoneFiltree()activeWorkbook.Names.Add Name:="Zone1", _refersTo:="=Feuil1!" & Feuil1.autoFilter.Range.specialCells(xlCellTypeVisible).AddressEnd Sub - Lister uniquement les noms de la Feuil1
- Ajouter une option personnalisée dans le menu contextuel , lors du clic droit dans une cellule
un exemple proposé par Hervé - Supprimer tous les noms dans le classeur actif
Dim Nom As NameFor Each Nom In activeWorkbook.NamesNom.DeleteNext Nom - Empecher la sélection des cellules contenant des formules
'procédure évenementielle , à placer au niveau de la feuillePrivate Sub Worksheet_selectionChange(byVal Target As Range)Dim Cell As RangeFor Each Cell In SelectionIf Cell.hasFormula Then Selection.Cells(1, 1).Offset(, 1).SelectNextEnd Sub - La propriété currentRegion : exemple pour boucler sur les cellules contigues à la cellule A1
Dim Plage As Range, Cell As RangeSet Plage = Range("A1").currentRegionFor Each Cell In PlageDebug.Print CellNext Cell - Masquer ou Afficher les lignes 5 à 10
Rows("5:10").entireRow.Hidden = True ' masquerRows("5:10").entireRow.Hidden = False ' afficher - Insérer une formule dans la cellule B1 , par macro
Remarque : la formule doit etre écrite en anglais dans la macroRange("B1").Formula = "=LINEST(G11:G14,F11:F14,FALSE,TRUE)"Si vous écrivez la formule en français dans la macro ,utilisez "formulaLocal" :Range("B1").formulaLocal = "=DROITEREG(G11:G14;F11:F14;FAUX;VRAI)" - Protéger une plage de cellules dans la feuille
Sélectionnes toutes les cellules de la feuilleClic droitSelectionnes "format celllules" dans le menu contextuel %% Il faut décocher l'option "verouillé" dans l'onglet protection %% Cliques sur OK pour validerEnsuite tu sélectionnes uniquement la plage de cellules que tu souhaites protégerClic droitSelectionnes "format celllules" dans le menu contextuelTu coches l'option "verouillé" dans l'onglet protectionCliques sur OK pour validerEnsuiteMenu OutilsProtection feuilleProtéger feuilleAssures toi que l'option "proteger la feuille et le contenu des cellules verouillées" est cochéeSaisie ton mot de passe ( en option )Revalides le mot de passe une 2eme foisCliques sur OK - Protéger les cellules qui contiennent des formules dans la feuille Feuil1
Sub protegerCellulesContenantFormules()On Error Resume NextWith Feuil1.unProtect "XLD" 'le mot de passe est facultatif.Cells.Locked = False.Cells.specialCells(xlCellTypeFormulas).Locked = True.enableSelection = xlUnlockedCells.Protect "XLD" 'le mot de passe est facultatifEnd WithEnd Sub - Comment aller à la ligne dans une cellule
Combines les touches du clavier : Alt + Entréeouactives le renvoi automatique dans la celluleClic droit dans la celluleFormat de cellulesélectionnes l'onglet "Alignement"coches l'option "renvoyer à la ligne automatiquement"cliques sur OK pour validerAppliquer un renvoi à la ligne automatique dans la cellule A1 , par MacroRange("A1").wrapText = True - Effectuer un décalage par rapport à une cellule : la propriété Offset
La propriété Offset permet d'appliquer un décalage par rapport à une cellule de référenceLa synthaxe est Range("B2").Offset("numero de ligne", "numero de colonne")par exemple :Range("B2").Offset(-1, 2) = "test"le mot "test" va s'afficher 1 ligne plus haut et 2 colonnes sur la droite par rapport à la cellule B2 , soit en cellule D1 - Supprimer toutes les formules dans le classeur actif
Sub supprimeFormulesClasseur()Dim i As ByteOn Error Resume NextFor i = 1 To Sheets.CountactiveWorkbook.Sheets(i).Cells.specialCells(xlCellTypeFormulas).DeleteNext iEnd Sub - Vérifier si la cellule active est sur un numéro de ligne pair
If activeCell.Row Mod 2 = 0 Then msgBox "oui" - Effacer le contenu des cellules dans la Feuil1, sans modifier les formats
Sheets("Feuil1").Cells.clearContents - Accéder à la valeur d'une cellule nommée, d'un autre classeur ouvert.
msgBox Workbooks("classeur.xls").Names("nom").refersToRange.Value - Controler la présence d'une validation (Menu Donnees / Validation) dans la cellule A1
Sub controlePresenceValidation()Dim Vl As RangeOn Error Resume NextSet Vl = Cells.specialCells(xlCellTypeAllValidation)On Error goTo FinIf Not Intersect(Vl, Range("A1")) Is Nothing ThenmsgBox "Il y a une Validation dans la cellule"ElsemsgBox "Il n'y a pas de validation dans la cellule"End IfExit SubFin:msgBox "Il n'y a pas de validation dans la feuille"End Sub - Empecher la sélection des cellules dans la Feuil1 (Alain Vallon)
With Sheets("Feuil1").enableSelection = xlUnlockedCells.ProtectEnd With - Verrouiller ou déverouiller la cellule A1 en fonction de la valeur d'une Checkbox
Private Sub checkBox1_Click()If Feuil1.checkBox1.Value = True ThenWith Feuil1.Unprotect.Cells.Locked = False.Range("A1").Interior.colorIndex = 6.Range("A1").Locked = True.enableSelection = xlUnlockedCells.ProtectEnd WithElseWith Feuil1.Unprotect.Range("A1").Locked = False.Range("A1").Interior.colorIndex = 3End WithEnd IfEnd Sub - Afficher la formule contenue dans la cellule A1
Sub afficherFormlule()Range("A1") = "'" & Range("A1").formulaLocalEnd SubPuis réutiliser la formule pour afficher le résultatSub afficherResultat()Range("A1").formulaLocal = Mid(Range("A1"), 1)End Sub - Identifier les cellules qui contiennent la fonction SOUSTOTAL
Dim Cell As RangeFor Each Cell In Range("C1:C20")If Cell.hasFormula And inStr(1, Cell.formulaLocal, "SOUS.TOTAL", vbTextCompare) > 0 Then Cell.Interior.colorIndex = 4Next
- Copier une feuille dans une nouveau classeur
Workbooks("Classeur1.xls").Sheets("maFeuille").Copy - Copier la selection dans la cellule A1 de la feuille2
Sub copierVersFeuille2()Selection.Copy Sheets("feuil2").Range("A1")End Sub - Copier une plage de cellules dans un nouveau classeur et le sauvegarder
- Vider le contenu du presse papier
Sub viderPressePapier()'nécéssite d'activer la référence Microsoft Form 2.0 Object LibraryDim Cible As dataObjectSet Cible = New dataObjectCible.setText ""Cible.putInClipboardSet Cible = NothingEnd Sub - Récupérer le contenu du presse papier dans une variable
Sub recupererDonneePressePapier()'nécéssite d'activer la référence Microsoft Form 2.0 Object LibraryDim Resultat As StringWith New dataObject.getFromClipboardResultat = .getText(1)End WithmsgBox ResultatEnd Sub - Ouvrir un classeur pour copier une de ses feuilles dans un autre document existant puis refermer le classeur
- Récupérer une image contenue dans le presse papier pour l'enregistrer sur le disque
- Réaliser une capture d'écran par macro
Private Declare Sub keybd_event Lib "user32" ( _byVal bVk As Byte, byVal bScan As Byte, byVal dwFlags As Long, _byVal dwExtraInfo As Long)Private Sub commandButton1_Click()keybd_event vbKeySnapshot, 1, 0&, 0&doEventsRange("A1").SelectactiveSheet.PasteEnd Sub - Coller des données de la "Feuil1" dans une feuille "data" qui est protégée
Worksheets("data").UnprotectWorksheets("Feuil1").Rows("3:3").CopyWorksheets("data").ActivateWorksheets("data").Paste _Destination:=Worksheets("data").Range("A1").End(xlDown).Offset(1, 0)Worksheets("data").Protect - Empecher l'utilisation du Copier / Coller dans un classeur
Procédures à placer au niveau de ThisworkbookPrivate Sub Workbook_sheetActivate(byVal Sh As Object)Application.cutCopyMode = FalseEnd SubPrivate Sub Workbook_sheetSelectionChange(byVal Sh As Object, byVal Target As Range)Application.cutCopyMode = FalseEnd Sub - Bug possible lors de l'utilisation de l'argument xlPasteColumnWidths avec Excel 200 et 2002:
Si vous avez un message d'erreur en utilisant cette synthaxe dans une macro :activeSheet.Range("A1").pasteSpecial Paste:=xlPasteColumnWidths, _Operation:=xlPasteSpecialOperationNone, skipBlanks:=False, Transpose:=FalseVous pouvez remplaçer xlPasteColumnWidths par la valeur 8 . Par exemple :activeSheet.Range("A1").pasteSpecial Paste:=8, _Operation:=xlPasteSpecialOperationNone, skipBlanks:=False, Transpose:=False
Les dates et les calendriers
- Un message à la fermeture du classeur si la date du jour est Vendredi
Private Sub Workbook_beforeClose(Cancel As Boolean)If weekDay(Date, vbSunday) = 6 Then msgBox "Nous sommes Vendredi"End Sub'Date renvoie la date du jour'en indiquant vbSunday ,cela precise que le dimanche est le premier'jour de la semaine'Weekday renvoie donc le numero du jour dans la semaine ,par rapport au dimanche'le vendredi est donc le 6eme jour de la semaine - Supprimer la ligne si la date est dépassée
Si les dates saisies dans la colonne A sont dépassées de 5 jours par rapport à la date du jour , les lignes sont suppriméesSub suppressionSelonDate()Dim Cible As Integer, j As IntegerCible = Range("A65536").End(xlUp).RowApplication.screenUpdating = FalseFor j = Cible To 1 Step -1If Cells(j, 1) < Date - 5 Then Rows(j).DeleteNextApplication.screenUpdating = TrueEnd Sub - Afficher la date du jour
msgBox Date - Afficher la date du jour avec un format personnalisé
msgBox Format(Date, "dddd dd mmmm yyyy") - Fonctions pour obtenir le jour , le mois ou l'annee d'une date cible
msgBox Day("26 mai 1965")msgBox Month("26 mai 1965")msgBox Year("26/05/1965") - Verifier si un format de date est valide
If isDate("26/05/1965") = True ThenmsgBox "Ok"ElsemsgBox "Le donnée n'est pas valide ."End If - Gestion des interventions d'un parc d'ambulances
Lien supprimé - Vérifier le nombre de jours ouvrés entre les dates d'expedition et de livraison , avec une option de statistiques sur le nombre de dépassements
Lien supprimé - Naviguer dans les feuilles en choisissant une date dans l'objet Calendar
Lien supprimé - Un calendrier d'aide à la saisie des dates dans Excel , par myDearFriend
Lien suppriméLe fichier texte qui est joint explique comment installer la macro complémentaire .XLA et décrit toutes les options de cet outil indispensable - Afficher le premier jour du mois , pour une Date saisie dans la cellule A1
Sub premierJourDuMois()Dim Annee As Date, Mois As DateAnnee = Year(Range("A1"))Mois = Month(Range("A1"))msgBox Format(dateSerial(Annee, Mois, 1), "dddd dd mmmm yyyy")End SubPour afficher le dernier jour du mois précédentmsgBox Format(dateSerial(Annee, Mois, 1) - 1, "dddd dd mmmm yyyy") - Trouver le dernier jour de chaque mois , dans une liste de dates
Lien supprimé - Utilisation des formats d'heure dans une macro
exemple qui supprime les lignes si l'heure dans la colonne F est comprise entre 08h00 et 18h00(format des cellules hh:mm:ss )Dim x As IntegerDim Cible As DateFor x = Range("F65536").End(xlUp).Row To 1 Step -1Cible = Cells(x, 6)If Cible >= #8:00:00 AM# And Cible <= #6:00:00 PM# Then Rows(x).DeleteNext x - La fonction monthName : afficher le nom d'un mois à partir de son index
'1=Janvier , 2=Février , 3=Mars …etc…msgBox monthName(2)'L'argument True permet d'afficher le mois en abrégémsgBox monthName(11, True) - Rechercher dans la plage A1:A10 la date la plus proche du 17/10/2005
Sub rechercheDateProche()Dim Cell As RangeDim Cible As Double, valeurProche As Double, Ecart As DoubleCible = 9999999999For Each Cell In Range("A1:A10")Ecart = Abs(CLng(CDate("17/10/2005")) - CLng(Cell))If Ecart < Cible Or Ecart = 0 ThenCible = EcartvaleurProche = CellEnd IfNextmsgBox CDate(valeurProche)End Sub - Afficher l'heure universelle ( méridien de Greenwich ) , un exemple proposé par Michel_m
Sub donner_heureGmt()'Lien suppriméDim datetime As ObjectSet datetime = createObject("Wbemscripting.swbemdatetime")datetime.setvardate (formatDateTime(Time))msgBox "heure GMT:" & datetime.getvardate(False)End Sub - Calendriers Et Plannings 2005 , par Monique et Celeda
Pour que votre plaisir de comptabiliser votre temps ou celui des autres, commence bien avant votre réalisation, Calendriers et Plannings - CEP - vous offre toute une panoplie de classeurs contenant toutes les formules possibles et inimaginables indispensables, à garder sous les yeux pour élaborer vos propres calendriers simples ou compliqués, rapides ou volutifs, avec ou sans couleursAlors qu'ils s'appellent, Agendas, Calendriers, Semainiers, Gestion du Temps, Feuilles de route, Cycle de Travail, Grille horaire, planifiés, temporels, arrêtez de courir, respirez, soufflez et téléchargez CEP - Retrouver le mois à partir du numéro de semaine et l'index du jour.
'adapté de Daniel Maher, mpfeDim Annee As Integer, Semaine As Integer, Jour As IntegerDim Cible As DateSemaine = 9Annee = 2006Jour = 1 'Lundi= 0 , Mardi=1 , Mercredi=2 ...et…Cible = dateSerial(Annee, 1, 3) - Weekday(dateSerial(Annee, 1, 3)) - 5 + (7 * Semaine) + JourmsgBox Format(Cible, "mmmm")'une autre possibilitémsgBox monthName(Month(Cible)) - Vérifier le paramètre de format Date sur le poste de travail
Sub testParametresDate()msgBox Application.International(xlDateOrder)'Ordre des éléments de la date:'0 = mois-jour-année'1 = jour-mois-année'2 = année-mois-jourEnd Sub
- De nombreuses informations interessantes sur la Wiki Page de Jean-Marie : MacVba
Lien supprimé
Vous trouverez dans le fichier zippé un lien vers le site très bien documenté d'Eric Schrafstetter
Une alternative à Microsoft Office : Open Office
- Exemples d'actions sur un document power Point dans Open Office
- Afficher toutes les images d'un répertoire , dans le style planche contact
- Sauvegarder chaque feuille d'un classeur OOo Calc , dans un fichier texte différent
- Activer une feuille et incrémenter d'une unité la valeur de la cellule A1
- Comment créer une boite de dialogue ( équivalent de Userform )
- Récupérer la position d'un textFrame dans un document Writer, puis modifier l'emplacement
- Alimenter par macro une Listbox dans une feuille
Le lien sur Internet - Quelques exemples d'actions sur les onglets d'un classeur OOo Calc
Ce lien n'existe plus - Trier les onglets d'un classeur Calc
Ce lien n'existe plus - Quelques exemples de sauvegarde OOo par macro
Ce lien n'existe plus - Definir l'alignement du texte pour une cellule dans un tableau Writer
Exemple pour une cellule spécifiqueLe lien sur InternetExemple pour toutes les cellules du tableauLe lien sur Internet - La gestion des répertoires avec OOo
Ce lien n'existe plus - Les formes automatiques dans Open Office
Ce lien n'existe plus - Les notes dans Open Office ( l'équivalent des commentaires dans Excel)
Ce lien n'existe plus - Créer un modèle dans Calc et personnaliser le styliste
Ce lien n'existe plus - La gestion des impressions par macro
Ce lien n'existe plus - Remplir les cellules d'une feuille depuis une boite dialogue ( exemple d'un bon de commande )
Ce lien n'existe plusCe lien n'existe plus - Copier une feuille dans le meme classeur et effacer le contenu d'une plage de cellules
Ce lien n'existe plus - Ajouter une feuille dans le classeur , la renommer et la positionner à la fin
- Masquer démasquer les onglets du classeur
Ce lien n'existe plus - Transformer une plage de cellules en majuscule
Ce lien n'existe plus - Afficher une barre de progression dans la barre de statut
Ce lien n'existe plus - Sortir de la procédure si cellule A1 est vide
Ce lien n'existe plus - Gerer l'evenement "selection de cellules" dans une feuille
Ce lien n'existe plus - Comment utiliser une Checkbox dans la feuille
Ce lien n'existe plus - Créer un tableau dans Writer et reformater la premiere ligne
Ce lien n'existe plus - Quelques exemples d'utilisation des fonctions dans Calc
- Adapter l'affichage d'une boite de dialogue en plein écran, en fonction de la taille de l'écran
- Lister dans une boite de dialogue tous les noms de fichiers d'un répertoire, puis ouvrir le fichier sélectionné
Ce lien n'existe plusCe lien n'existe plus - Boucler sur tous les paragraphes d'un document Writer , puis effectuer une suppression conditionnelle
Ce lien n'existe plus - Remplacer la chaine de caractères sélectionnée dans un textField .
- Regrouper des éléments par numéro d'équipe , sans espaces dans les colonnes de résultat.
Un autre exemple qui utilise Index Equiv entre 2 feuilles - Une palette de couleurs : afficher les équivalences RGB , Hex et Long d'un code couleur .
- Consultez la FAQ Open Office.
Le lien sur Internet
Toutes vos idees sont les bienvenues .

Dernière modification par un modérateur: