Excel Downloads
Forum

Précédent   Excel Downloads Forums > Excel > Questions les plus fréquentes (FAQ) et didacticiels > [REF] Wiki Page 1 de MichelXld
Vous inscrire
S'inscrire FAQ Membres Calendrier Recherche Messages du jour Marquer les forums comme lus


Réponse
 
LinkBack Outils de la discussion
Vieux 08/03/2008, 17h07   #1 (permalink)
MichelXld
XLDnaute Barbatruc
 
Date d'inscription: février 2005
Messages: 3 648
Post [REF] Wiki Page 1 de MichelXld

Les sujets abordés dans cette page :
  • Les feuilles , Les graphiques , Les images , Les propriétés des classeurs , Les sauvegardes , Les formes automatiques , Aleatoire , Les barres d'outils et les barres de menus , Les boites de dialogues intégrées , Les classeurs .
Lien vers la wiki page 1 :Les feuilles , Les graphiques , Les images , Les propriétés des classeurs , Les sauvegardes , Les formes automatiques , Aleatoire , Les barres d'outils et les barres de menus , Les boites de dialogues intégrées , Les classeurs .
Lien vers la wiki page 2 : Les userforms : Les Checkbox , Les Labels , Les combobox , Les Commandbutton , Les Listbox ,Les Multipages , Les Frames , Les Textbox , Les imagesList , Les Treeview , Les Listview , Les Images , Les Webbrowser , Les calendriers , Les progressbar , Les Spreadsheet , Les Chartspaces , Les commonDialog , Les MSFlexGrid.
Lien vers la wiki page 3 :Piloter d'autres applications depuis Excel , Piloter ( Word , Outlook , Power Point ) , Les fichiers texte
Lien vers la wiki page 4 : 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
Lien vers la wiki page 5 : Les formules Excel , Les audits de formules , Les répertoires et les fichiers .
Lien vers la wiki page 6 : Les doublons , Les tris et les filtres , Les variables , Piloter les fichiers fermés (Excel , Access ,les fichiers DBF) .
Lien vers la wiki page 7 : Les commentaires , La gestion des erreurs , L'aide en ligne Excel , Les recherches dans un classeur, Les tableaux , Les pages html et internet , Windows Media Player , Le PC et le systême d'exploitation ,Piloter Flash , les types de boucles.
Lien vers la wiki page 8 : Piloter MSN Messenger et Windows Messenger , Les objets dans le feuille , Les liens hypertextes , Les formats , Visual basic editor , Les chaines de caractères , Les modules de classe.
Lien vers la wiki page 9 : Les mises en forme conditionnelles , Les Tableaux et graphiques Croisés Dynamiques , Gérer les fichiers XML depuis Excel , Piloter Open Office depuis Excel.
Lien vers la wiki page 10 : Le Publipostage Word / Excel.
Lien vers la wiki page 11 : Utiliser la librairie Windows Image Acquisition Automation Library v2.0 depuis Excel.
Les feuilles Excel
  • Quelques exemples d'actions VBA sur les feuilles
    Ajouter une feuille
    Renommer la feuille active
    Supprimer une feuille
    Trier les onglets par ordre alphabetique
    Protéger er déproteger une feuillle par macro
    Le lien sur le forum XLD
    Le fichier zippé
  • Les différences entre Sheets et Worksheets
    Worksheets ne prend en compte que les feuilles (xlWorksheet)
    Sheets prend en compte tous les types d'onglets :
    xlWorksheet
    xlChart
    xlExcel4MacroSheet
    xlExcel4IntlMacroSheet
    Un exemple qui liste les feuilles du classeur et indique leur type
    Sub listerTypesFeuillesClasseur()
    Dim i As Integer, j As Integer
    Dim typeFeuilles As String
    Dim Ch As Chart
    Dim Cible As Boolean
    For i = 1 To Sheets.Count
    j = Sheets(i).Type
    typeFeuilles = typeFeuilles & Sheets(i).Name & " : "
    Cible = False
    For Each Ch In Charts
    If Ch.Name = Sheets(i).Name Then Cible = True
    Next Ch
    If Cible = True Then
    typeFeuilles = typeFeuilles & " Feuille graphique"
    Else
    Select Case j
    Case xlWorksheet
    typeFeuilles = typeFeuilles & " xlWorksheet"
    Case xlChart
    typeFeuilles = typeFeuilles & " xlChart"
    Case xlExcel4MacroSheet
    typeFeuilles = typeFeuilles & " xlExcel4MacroSheet"
    Case xlExcel4IntlMacroSheet
    typeFeuilles = typeFeuilles & " xlExcel4IntlMacroSheet"
    End Select
    End If
    typeFeuilles = typeFeuilles & vbLf
    Next i
    msgBox typeFeuilles
    End Sub
  • Sélectionner la dernière page du classeur
    Worksheets(Worksheets.Count).Select
  • Supprimer la premiere feuille du classeur
    Worksheets(1).Delete
    Un autre exemple qui permet de choisir la ou les feuilles à supprimer depuis une Listbox
    Le lien sur le forum XLD
  • Masquer les onglets
    activewindow.displayworkbookTabs = False
  • Afficher les onglets
    activewindow.displayworkbookTabs = True
  • Ajouter une nouvelle feuille , la positionner à la fin du classeur et la renommer
    Sub nouvellefeuille()
    Worksheets.Add After:=Sheets(Sheets.Count)
    activesheet.Name = ("XLD")
    End Sub
  • Copier une feuille nommée "Feuil1", la positionner à la fin du classeur et la renommer
    Sub copierFeuilleDansClasseur()
    Sheets("Feuil1").Copy After:=Worksheets(Sheets.Count)
    activeSheet.Name = "Nouvelle Feuille"
    End Sub
  • Correspondance entre le numéro de colonne et la lettre de l'entete de colonne
    Sub lettresnumeroColonne()
    Dim boucle As Integer, valeur As Integer, Z As Integer
    boucle = activeCell.Column
    If boucle <= 26 Then
    msgbox Chr(Boucle + 64)
    Else
    Valeur = application.rounddown(Boucle / 26, 0)
    If Valeur = Boucle / 26 Then Valeur = Valeur - 1
    Z = (Boucle - (26 * Valeur)) + 64
    msgbox Chr(Valeur + 64) & Chr(Z)
    End If
    End Sub
  • Lister les feuilles du classeur et créer un lien vers chacune d'entre elles
    Sub creerLiensAutresFeuilles()
    Dim I As Byte, J As Byte
    Dim Valeur As String
    For I = 1 To Sheets.Count
    If Not activeSheet.Name = Sheets(I).Name Then
    Valeur = "'" & Sheets(I).Name & "'!A1"
    J = J + 1
    Worksheets(1).Hyperlinks.Add Anchor:=Cells(J, 1), Address:="", subAddress:=Valeur
    End If
    Next I
    End Sub
  • Un exemple de boucle sur toutes les feuilles du classeur actif
    Sub boucleSurLesFeuilles()
    Dim Ws As Worksheet
    For Each Ws In activeWorkbook.Sheets
    msgBox Ws.Name
    Next Ws
    End Sub
  • Insérer des informations en pied de page
    Le lien sur le forum XLD
    Un autre exemple : insérer le chemin complet du classeur en pied de page
    Le lien sur le forum XLD
    A partir d'Excel2002 , il est possible d'insérer cette information dans les entetes et pied de page sans macro
    Pour personnaliser le format du pied de page (police , gras , taille 20 et souligné) :
    Feuil1.pageSetup.leftFooter = "&""Arial,Gras""&20&U" & "Le forum XLD"
  • Insérer une image dans l'entête de page , de la feuille active
    Le lien sur le forum XLD
  • Insérer des sous totaux à chaque saut de page
    Le lien sur le forum XLD
  • Retrouver un mot de passe oublié : Déprotection de la feuille active
    Le lien sur le forum XLD
    Deux autres solutions proposées par myDearFriend et michel_M
    Le lien sur le forum XLD
  • Limiter la possibilité de déplacement à la plage A1:E50 , dans la feuille active
    Sub deplacementDansCellules()
    activeSheet.scrollArea = "A1:E50"
    End Sub
    et pour supprimer la limitation de déplacement
    Sub annulerLimitationDeplacement()
    activeSheet.scrollArea = ""
    End Sub
  • Compter le nombre d'onglets sélectionnés dans le classeur actif
    msgBox thisWorkbook.Windows(1).selectedSheets.Count
  • Récuperer la valeur du zoom de la fenetre active
    Sub valeurZoom()
    msgBox activeWindow.Zoom
    End Sub
  • Zoomer rapidement dans la feuille.
    1. Sélectionnez une cellule
    2. Maintenez enfoncée la touche Ctrl et utilisez la molette de la souris
  • Supprimer toutes les feuilles vides du classeur
    Sub supprimerFeuillesVides()
    Dim Ws As Worksheet
    For Each Ws In thisWorkbook.Sheets
    If Ws.usedRange.Cells.Address = "$A$1" And _
    isEmpty(Ws.Range("A1")) And Ws.Shapes.Count = 0 Then
    Application.displayAlerts = False
    Ws.Delete
    Application.displayAlerts = True
    End If
    Next Ws
    End Sub
  • Protéger ou déprotéger toutes les feuilles du classeur
    Le lien sur le forum XLD
  • Insérer une colonne à l'emplacement de la colonne B
    Columns("B:B").Insert
  • Insérer un saut de page avant la 25eme ligne de la feuille active
    activeSheet.HPageBreaks.Add Before:=Cells(25, 1)
  • Créer des sauts de page toutes les 10 lignes , jusqu'à la ligne 50
    Sub sautDePageAutomatique()
    Dim i As Integer
    For i = 11 To 51 Step 10
    Feuil1.HPageBreaks.Add Before:=Cells(i, 1)
    Next i
    End Sub
  • Activer l'aperçu des sauts de page
    activeWindow.View = xlPageBreakPreview
  • Desactiver l'aperçu des sauts de page
    activeWindow.View = xlNormalView
  • Appliquer une Couleur jaune à l'onglet de la Feuil1 (fonctionne uniquement à partir d'Excel2002)
    Sheets("Feuil1").Tab.colorIndex = 6
  • Regrouper les données de toutes les feuilles dans un onglet unique
    Sub compilationFeuilles()
    Dim Wb As Workbook
    Dim Ws As Worksheet
    Dim i As Byte
    Dim Ligne As Integer
    Set Wb = Workbooks.Add(1) 'creation d'un nouveau classeur
    On Error Resume Next
    For i = 1 To thisWorkbook.Sheets.Count 'boucler sur les feuilles du classeur
    Set Ws = thisWorkbook.Sheets(i)
    Ws.usedRange.Cells.Copy
    Ligne = _
    Wb.Sheets("Feuil1").Cells.Find("*", Wb.Sheets("Feuil1").Range("A1"), _
    searchDirection:=xlPrevious).Row + 1
    If Ligne = 0 Then Ligne = 1
    Wb.Sheets("Feuil1").Cells(Ligne, 1).Select
    Wb.Sheets("Feuil1").Paste
    Next i
    End Sub
  • Créer une animation dans la feuille ( une demo tres interessante de Didier pour son 200eme post )
    Le lien sur le forum XLD
    Le fichier zippé
  • Supprimer la ligne complete si les cellules sont vides dans la colonne F
    Sub supprimerLignesV02()
    Dim i As Integer, j As Integer
    'derniere cellule non vide dans la colonne F
    j = Range("F65536").End(xlUp).Row
    Application.screenUpdating = False
    For i = j To 1 Step -1
    If Cells(i, 6) = "" Then Rows(i).Delete
    Next i
    Application.screenUpdating = True
    End Sub
  • Copier quelques feuilles dans un nouveau classeur
    Sheets(Array("Feuil1", "Feuil3")).Copy
  • Supprimer les lignes , si les cellules de la colonne A contiennent une erreur type #N/A
    Sub suppressionLigne_siErreur_NA()
    Dim C As Integer
    For C = 5000 To 1 Step -1
    If worksheetFunction.isErr(Range("A" & C)) = True Then
    If CVErr(xlErrNA) = Range("A" & C) Then Rows(C).entireRow.Delete
    End If
    Next C
    End Sub
  • Controler l'existence de la feuille "nameSheet" dans le classeur
    Sub controlePresenceFeuille()
    Dim Ws As Worksheet
    On Error Resume Next
    Set Ws = thisWorkbook.Sheets("nameSheet")
    If Ws Is Nothing Then msgBox "La feuille n'existe pas"
    End Sub
  • Créer une liste de recopie personnalisée par macro
    L'équivalent de :
    Menu Outils
    Options
    Onglet "Listes pers."
    Application.addCustomList Array("Blanc", "Vert", "Rouge", "Bleu", "Noir")
    Si les données sont dans une plage de cellules , utilisez :
    Application.addCustomList Range("A1:A10")
    Désormais , lorsque vous saisissez une de ces données dans une cellule et utilisez la poignée de recopie , la liste est automatiquement créée dans la feuille .
    Informations complémentaires issues de l'aide en ligne Excel :
    Le dernier Argument byRow (facultatif) )est utilisé uniquement si la valeur de l'argument listArray est un objet Range. Affectez-lui la valeur True pour créer une liste personnalisée à partir de chacune des lignes contenues dans la plage. Affectez-lui la valeur False pour créer une liste personnalisée à partir de chacune des colonnes située dans la plage. Si vous ne spécifiez pas cet argument et que le nombre de lignes est supérieur ou égal au nombre de colonnes de la plage, Microsoft Excel crée une liste personnalisée à partir de chacune des colonnes de la plage. En revanche, si vous ne spécifiez pas cet argument et que le nombre de colonnes est supérieur au nombre de lignes, Microsoft Excel crée une liste personnalisée à partir de chacune des lignes de la plage.

Les graphiques
  • Changer les etiquettes dans un graphique en nuage de points
    Le lien sur le forum XLD
    Le fichier zippé
    Un autre exemple
    Le lien sur le forum XLD
    Le fichier zippé
  • Changer la position et la taille des graphiques dans une feuille
    Le lien sur le forum XLD
    Le fichier zippé
  • Selectionner les cellules par Application.inputbox puis Inserer une nouvelle courbe
    Le lien sur le forum XLD
    Le fichier zippé
  • Adapter la position d'un graphique par rapports aux sauts de page
    Le lien sur le forum XLD
    Le fichier zippé
  • Graphique dans userform
    Le lien sur le forum XLD
    Le fichier zippé
  • Gerer plusieurs séries
    Le lien sur le forum XLD
    Le fichier zippé
  • Afficher la plage de données en abscisses , d'un graphique
    Sub plageDonneesAbscisses()
    Dim Cible As String, Debut As String
    activeSheet.chartObjects("graphique 1").Activate'adapter selon nom graphique
    Cible = activeChart.seriesCollection(1).Formula
    Debut = Right(Cible, Len(Cible) - inStr(1, Cible, ","))
    msgBox "La plage en Abscisses est : " & Left(Debut, inStr(1, Debut, ",") - 1)
    End Sub
  • Extraire les plages de données (Ordonnées et Abscisses) de la premiere série d'un graphique
    Sub extrairePlageDonnesGraphique()
    'cet exemple ne fonctionne pas si la plage d'abscisses n'est pas précisée dans le graphique
    Dim Cible As String, Abscisse As String, Ordonnee As String
    Cible = activeSheet.chartObjects(1).Chart.seriesCollection (1).Formula
    Abscisse = Right(Cible, Len(Cible) - inStr(1, Cible, ","))
    Abscisse = Left(Abscisse, inStr(1, Abscisse, ",") - 1)
    Abscisse = Right(Abscisse, Len(Abscisse) - inStr(1, Abscisse, "!") - 1)
    msgBox "Plage abscisses : " & Abscisse
    Ordonnee = Right(Cible, Len(Cible) - (inStr(1, Cible, Abscisse) + Len(Abscisse)))
    Ordonnee = Left(Ordonnee, inStr(1, Ordonnee, ",") - 1)
    Ordonnee = Right(Ordonnee, Len(Ordonnee) - inStr(1, Ordonnee, "!") - 1)
    msgBox "Plage ordonnées : " & Ordonnee
    End Sub
  • Récupérer la valeur du 2eme point , dans la 1ere serie d'un graphique nommé "Graphique 1"
    Sub pointsGraph()
    Dim Valeur As Single
    With Sheets("Feuil1").chartObjects("Graphique 1").Chart.seriesCollection(1).Points(2)
    .hasDataLabel = True 'affiche la valeur du point dans le graphique
    Valeur = .dataLabel.Characters.Text 'recupere la valeur du point dans une variable
    .hasDataLabel = False 'ne plus afficher la valeur du point
    End With
    msgBox Valeur
    End Sub
  • Se déplacer dans la feuille et avoir le graphique toujours apparent
    Le lien sur le forum XLD
    Le fichier zippé
  • Supprimer un graphique
    Sub supprimeGraphique()
    Dim graph As Object
    Set graph = activeSheet.chartObjects(1)
    graph.Delete
    Set graph = Nothing End Sub
  • Supprimer tous les graphiques de la feuille active
    activeSheet.chartObjects.Delete
  • Adapter la position d'un graphique sur une plage de Cellules A20:G40
    Sub positionGraph()
    With activeSheet.chartObjects(1)
    .Left = Range("A20:G40").Left
    .Top = Range("A20:G40").Top
    .Width = Range("A20:G40").Width
    .Height = Range("A20:G40").Height
    End With
    End Sub
  • Choisir la courbe à afficher depuis un combobox
    Le lien sur le forum XLD
    Le fichier zippé
  • Choisir dans une Listbox parmi plusieurs courbes, avec une option pour préciser la période d'affichage des données
    Le fichier zippé
  • Compter le nombre de graphiques dans la feuille active
    msgBox activeSheet.chartObjects.Count
  • Créer un graphique et le renommer
    Le lien sur le forum XLD
  • Utiliser un tableau Array pour définir les abscisses de la 1ere série du graphique actif
    Activechart.seriesCollection(1).XValues = Array(5, 7,9,11,13,15)
  • Création d'un graphique à partir de tableaux Array
    Sub creationGraphiqueTableauxArray()
    Charts.Add
    activeChart.Location Where:=xlLocationAsObject, Name:="Feuil1"
    With activeChart
    .seriesCollection.newSeries
    .seriesCollection(1).XValues = Array("A", "B", "C", "D")
    .seriesCollection(1).Values = Array(100, 250, 200, 270)
    .seriesCollection(1).Name = "nomGraphique"
    .chartType = xlColumnClustered
    .hasLegend = False
    .chartTitle.Text = "Le titre"
    .Deselect
    End With
    End Sub
  • Création d'un graphique à partir de tableaux dynamiques
    Sub creationGraphiqueParTableau()
    Dim i As Byte
    Dim Tableau(10) As Integer, Tableau2(10) As Integer
    For i = 1 To 10 'tableau abscsisses
    Tableau(i) = i * 2
    Next i
    For i = 1 To 10 'tableau ordonnées
    Tableau2(i) = Int((50 * Rnd) + 1)
    Next i
    Charts.Add
    activeChart.Location _
    Where:=xlLocationAsObject, Name:="Feuil1"
    With activeChart
    .seriesCollection.newSeries
    .seriesCollection(1).XValues = Tableau()
    .seriesCollection(1).Values = Tableau2()
    .chartType = xlLine
    End With
    End Sub
  • Redéfinir l'abscisse d'un graphique a partir un tableau dynamique
    Option Base 1
    Sub abscissesParTableau()
    Dim i As Byte
    Dim Tableau(10)
    For i = 1 To 10 'tableau pour les abscsisses
    Tableau(i) = i * 2
    Next i
    activeChart.seriesCollection(1).XValues = Tableau()
    End Sub
  • Construire un graphique avec des series a la fois en courbe et en colonnes
    si vous avez par exemple plusieurs series de données au format courbe dans un graph , vous pouvez effectuer un clic droit sur une de ces series , dans le menu déroulant choisir l'option type de graphique , et vous pouvez alors sélectionner le format souhaité : colonne
    Exemple pour affecter par macro un format particulier( Line) à la 2eme serie d'un graphique :
    activeChart.seriesCollection(2).chartType = xlLine
  • Modifier les couleurs d'un graphique en secteur , en fonction des étiquettes
    Le lien sur le forum XLD
  • Exporter les graphiques au format Gif et les donnees de chaque série dans des fichiers texte
    cette procédure permet d'enregistrer dans le meme repertoire que le classeur :
    chaque graphique au format .gif et chaque serie de donnees dans un fichier texte
    (dans cet exemple chaque graphique ne contient qu'une serie de données )
    Sub extractionGraphiquesEtDonnees()
    'http://www.excel-downloads.com/component/option,com_simpleboard/Itemid,40/func,view/catid,2/id,3094/#3094
    Dim Cible As chartObject
    Dim i As Byte
    Dim valeur As Double
    For Each Cible In Feuil1.chartObjects
    Cible.Chart.Export Filename:=thisWorkbook.Path & "\" & Cible.Name _
    & ".gif", filtername:="GIF" 'export au format gif
    Open thisWorkbook.Path & "\" & Cible.Name & ".txt" For Append As #1
    For i = 1 To Cible.Chart.seriesCollection(1).Points.Count
    With Cible.Chart.seriesCollection(1).Points(i)
    .hasDataLabel = True 'affiche la valeur du point dans le graphique
    valeur = .dataLabel.Characters.Text 'recupere la valeur du point dans une variable
    .hasDataLabel = False 'ne plus afficher la valeur du point
    End With
    Print #1, valeur 'enregistrement dans fichier texte
    Next i
    Close #1
    Next
    End Sub
  • Copier un graphique dans une autre feuille et lui attribuer le meme nom
    Le lien sur le forum XLD
  • Animer un graphique
    Le lien sur le forum XLD
    La démo de Didier myDearFriend
    La démo de Jean Marie
  • Lister tous les graphiques d'un classeur
    Le lien sur le forum XLD
    Le fichier zippé
  • Savoir si un Graphique est issu d'un TCD ( renvoie Vrai ou Faux )
    msgBox Sheets("Graph1").hasPivotFields
  • Ne pas imprimer un graphique
    Faites un clic droit sur le graphique
    Sélectionnez "format de la zone graphique"
    Sélectionnez l'onglet "propriétés"
    Décochez "imprimer l'objet"
    Cliquez sur OK pour valider
    par macro
    Feuil1.drawingObjects("Graphique 1").printObject = False
  • Imprimer le 2eme graphique contenu dans le Feuil1
    Feuil1.chartObjects(2).Chart.printOut
  • Définir la plage des abscisses dans le graphique actif
    Dim Plage As Range
    Set Plage = Feuil1.Range("A1:A10")
    activeChart.seriesCollection(1).XValues = Plage
  • Ajouter un titre dans le graphique
    With Sheets(1).chartObjects(1).Chart
    .hasTitle = True
    .chartTitle.Characters.Text = "XLD"
    End With
  • Récupérer le titre du graphique
    msgBox Sheets(1).chartObjects(1).Chart.chartTitle.Charact ers.Text
  • Ajouter une droite verticale dans un graphique en barre
    Le fichier zippé
  • Modifier le nombre d'abscisses entre les étiquettes de graduation
    Double clic sur l'axe des abscisses du graphique
    Sélectionnes l'onglet Echelle
    Modifies la valeur dans le champ "nombre d'abscisses entre les étiquettes de graduation"
    Cliques que OK pour valider
  • Créer un second axe d'ordonnées dans un graphique
    Sélectionnes dans le graphique la courbe qui va servir à appliquer l'axe secondaire
    Clic droit
    Choisis l'option "format de la série de données"
    Onglet "Sélection de l'axe"
    Choisis l'option "Axe secondaire"
    Cliques sur OK pour valider
  • Afficher l'écart entre deux valeurs dans un graphique
    Thanks Andy and Celeda
    Le lien sur le forum XLD
    Le fichier zippé
  • Des bulles et des nuages de points dans un meme graphique
    Le lien sur le forum XLD
    Le fichier zippé
  • Afficher une droite d'équation dans un graphique à bulles (une démo de Myta)
    Le lien sur le forum XLD
    Le fichier zippé
  • Afficher en étiquette uniquement le premier et le dernier point d'une serie
    Clic droit sur le premier point de la courbe ( les autres points ne doivent pas etre sélectionnés )
    Format de données
    onglet "Etiquette de données"
    coches l'option "Valeur"
    Cliques sur OK pour valider
    ensuite tu fais le meme chose pour le dernier point de la serie
  • Récupérer l'équation d'une courbe de tendance
    Sub equationsCourbeDeTendance()
    Dim Equation As String
    With Feuil1.chartObjects(1).Chart.seriesCollection(1).T rendlines(1)
    .displayRSquared = False
    .displayEquation = True
    Equation = .dataLabel.Text
    End With
    msgBox Equation
    End Sub
  • Récupérer la couleur d'arrière-plan de la premiere serie d'un graphique en nuage de points
    msgBox activeChart.seriesCollection(1).markerBackgroundCo lorIndex
  • Récupérer la couleur d'arrière-plan du 2eme point dans la premiere serie d'un graphique en nuage de points
    msgBox activeChart.seriesCollection(1).Points(2).markerBa ckgroundColorIndex
  • Modifier la couleur d'arrière-plan du 2eme point dans la premiere serie d'un graphique en nuage de points
    activeChart.seriesCollection(1).Points(2).markerBa ckgroundColorIndex = 4 'Vert
  • Transformer une feuille graphique "Graph1" en objet dans la feuille "Feuil1"
    Charts("Graph1").Location Where:=xlLocationAsObject, Name:="Feuil1"
  • Les spécifications et limites relatives aux graphiques (Excel2002)
    Feuilles de calcul auxquelles il est fait référence dans un graphique : 255
    Nombre maximal de séries de données par graphique : 255
    Nombre de caracteres dans la barre de formules : 255
    Nombre maximal de points de données par série dans les graphiques 2D : 32 000
    Points de données par série de données pour les graphiques 3D : 4 000
    Points de données pour toutes les séries de données d'un graphique : 256 000
    Styles de lignes : 8
    Epaisseurs de ligne : 4
    Motifs en aires (affichage écran) : 18
    Total de combinaisons de motifs et de couleurs (affichage couleur) : 56 448
    Combinaisons de motifs et de couleurs (impression couleur) : 56 448
    (le nombre réel dépend de votre imprimante et de son logiciel)
    Nombre maximal de champs de page (dans un rapport de tableau ou de graphique croisé dynamique.) : 256
    (limitation possible en fonction de la quantité de mémoire disponible)
    Nombre maximal de champs de données par rapport de tableau croisé dynamique : 256
    Formules d'élément calculées dans un rapport de graphique croisé dynamique : Limité par la quantité de mémoire disponible
  • Faire clignoter une série dans un graphique : une démo de Jean Marie
    Le lien sur le forum XLD
    Le fichier zippé
  • Appliquer des couleurs différentes pour les valeurs négatives ou positives , dans un graphique en barre
    Sélectionnes la série dans le graphique
    Clic droit
    Format de la série de données
    Coches l'option "inversée si négative"
    cliques sur OK pour valider
  • Masquer les étiquettes de données à 0 au dessus des histogrammes : une solution de Jean Marie
    Le lien sur le forum XLD
  • Enlever la couleur dans la zone de traçage
    activeChart.plotArea.Interior.colorIndex = xlNone
  • Gérer les cellules vides dans la plage de données d'un graphique
    Sélectionnes le graphique
    Menu Outils
    Options
    Onglet "Graphique"
    Choisis une des options : non tracées, valeur zéro , interpolées
    Cliques sur OK pour valider
  • Afficher les étiquettes d'un graphique et préciser leur position
    Sub differentesPositionsLabelDansGraphique()
    'exemple avec graphique type Histogramme
    With Feuil1.chartObjects(1).Chart.seriesCollection(1)
    .hasDataLabels = True
    '.dataLabels.Position = xlLabelPositionInsideBase 'Affichage dans la barre(en bas)
    '.dataLabels.Position = xlLabelPositionOutsideEnd 'Affichage au dessus de chaque barre
    '.dataLabels.Position = xlLabelPositionInsideEnd 'Affichage dans la barre(en haut)
    .dataLabels.Position = xlLabelPositionCenter 'Affichage dans la barre(centrée)
    End With
    End Sub
    Les constantes utilisables :
    xlLabelPositionAbove
    xlLabelPositionBestFit
    xlLabelPositionCustom
    xlLabelPositionInsideEnd
    xlLabelPositionMixed
    xlLabelPositionRight
    xlLabelPositionBelow
    xlLabelPositionCenter
    xlLabelPositionInsideBase
    xlLabelPositionLeft
    xlLabelPositionOutsideEnd
    Remarque : Certaines constantes sont inopérantes selon le type de graphique utilisé
  • Effacer les données du graphique mais laisser la mise en forme intacte
    Feuil1.chartObjects(1).Chart.chartArea.clearConten ts
  • Les evenements dans la feuille graphique
    L'activation du graphique
    Private Sub Chart_Activate()
    Le double clic dans le graphique
    Private Sub Chart_beforeDoubleClick(byVal ElementID As Long, byVal Arg1 As Long, byVal Arg2 As Long, Cancel As Boolean)
    Un exemple pour empecher l'affichage de la boite de dialogue "Format de zone de traçage" lors d'un double clic
    Private Sub Chart_beforeDoubleClick(byVal ElementID As Long, byVal Arg1 As Long, byVal Arg2 As Long, Cancel As Boolean)
    Cancel = True
    End Sub
    L'argument ElementID correspond à l'objet sur lequel tu cliques. Les Arguments Args1 et Args dépendent de l'objet cliqué
    Consultez l'aide MSDN pour plus d'informations
    Le clic droit dans un graphique
    Private Sub Chart_beforeRightClick(Cancel As Boolean)
    Pour ne pas afficher le menu contextuel lors d'un clic droit
    Private Sub Chart_beforeRightClick(Cancel As Boolean)
    Cancel = True
    End Sub
    La mise à jour du graphique
    Private Sub Chart_Calculate()
    Comme les mises en forme personnalisées des graphiques croisés dynamiques ne sont pas conservées lors des réactualisations de données , cet evenement peut etre interessant pour forcer une mise en forme
    Un exemple pour que la 1ere série du graphique soit toujours de couleur rouge
    Private Sub Chart_Calculate()
    activeChart.seriesCollection(1).Border.colorIndex = 3
    End Sub
    La désactivation du graphique
    Private Sub Chart_Deactivate()
    Les mouvements de la souris dans un graphique
    Private Sub Chart_mouseDown(byVal Button As Long, byVal Shift As Long, byVal x As Long, byVal y As Long)
    Private Sub Chart_mouseMove(byVal Button As Long, byVal Shift As Long, byVal x As Long, byVal y As Long)
    Private Sub Chart_mouseUp(byVal Button As Long, byVal Shift As Long, byVal x As Long, byVal y As Long)
    La selection d'un objet dans le graphique
    Private Sub Chart_Select(byVal ElementID As Long, byVal Arg1 As Long, byVal Arg2 As Long)
    L'argument ElementID correspond à l'objet sur lequel tu cliques , les Arguments Args1 et Args dépendent de l'objet cliqué
    La modification des valeurs dans les séries
    Private Sub Chart_seriesChange(byVal seriesIndex As Long, byVal pointIndex As Long)
    Remarque :
    Pour gérer les evenements d'un graphique incorporé dans la feuile de calcul , il faut utiliser des modules de classe .
    D'autres informations complémentaires
    Le lien sur Internet
  • Vérifier si un graphique nommé "Graphique 1" existe dans la Feuil2
    Dim Grph As chartObject
    On Error Resume Next
    Set Grph = Sheets("Feuil2").chartObjects("Graphique 1")
    If Not Grph Is Nothing Then msgBox "Graphique trouvé"
  • Créer un graphique en utilisant l'utilitaire d'analyse VBA
    'Source :http://support.microsoft.com/default.aspx?scid=kb;en-us;270844&Product=vbb#top
    'Les données numériques sont dans la Feuil1 en A1:A10 et B1:B4
    Dim Ws As Worksheet
    Set Ws = thisWorkbook.Worksheets("Feuil1")
    'L'utilitaire d'analyse-VBA doit etre prélablement activé
    'Menu Outils
    'Macros complémentaires
    'Cochez la ligne "Utilitaire d'analyse-VBA"
    'Cliquez sur OK pour valider
    Application.Run "ATPVBAEN.XLA!Histogram", Ws.Range("$A$1:$A$10"), _
    "", Ws.Range("$B$1:$B$4"), False, False, True, False
  • Empecher le copier/coller d'une feuille graphique
    Celle procedure evenementielle doit etre placée au niveau du classeur (thisWorkbook)
    Private Sub Workbook_sheetDeactivate(byVal Sh As Object)
    Dim Ch As Chart
    For Each Ch In Charts
    If Ch.Name = Sh.Name Then Application.cutCopyMode = False
    Next Ch
    End Sub
    Une autre solution en utilisant l'evenement Deactivate de la feuille graphique
    Private Sub Chart_Deactivate()
    Application.cutCopyMode = False%%%% End Sub
  • Déterminer la valeur d'abscisse au croisement entre 2 courbes d'un graphique
    =(ORDONNEE.ORIGINE(A1:A2;C1:C2)-ORDONNEE.ORIGINE(B1:B2;C1:C2))/(PENTE(B1:B2;C1:C2)-PENTE(A1:A2;C1:C2))
    Les ordonnées Y sont dans les colonnes A et B
    Les abscisses X sont dans la colonne C
  • Créer un graphique et afficher les points de la série progressivement
    Sub afficherPointsGraphiqueProgressivement()
    Dim j As Integer
    Dim Plage As Range
    Dim t As Long
    Charts.Add
    activeChart.chartType = xlXYScatter
    'les données sont dans la plage B2:B20
    activeChart.seriesCollection.Add Worksheets("Feuil1").Range("B2:B20")
    activeChart.seriesCollection(1).markerBackgroundCo lorIndex = _
    activeChart.plotArea.Interior.colorIndex
    activeChart.seriesCollection(1).markerForegroundCo lorIndex = _
    activeChart.plotArea.Interior.colorIndex
    For j = 2 To 20
    t = Timer + 1: Do Until Timer > t: doEvents: Loop ' 1 seconde
    activeChart.seriesCollection(1).Points(j - 1).markerBackgroundColorIndex = 3
    doEvents
    Next j
    End Sub
  • Utiliser un timer pour faire défiler des valeurs dans un graphique .
    Le lien sur le forum XLD
    Le fichier zippé
  • Créer un graphique en utilisant une plage de données dynamique .
    Cet exemple permet de redimensionner automatiquement les plages de données sources dans le graphique , lorsque vous ajoutez ou supprimez des valeurs dans le tableau .
    Le fichier zippé
    Un autre exemple qui prend en compte uniquement les 8 dernieres valeurs de la base de données et qui s'actualise automatiquement lors de l'ajout ou la suppression d'enregistrements
    Le fichier zippé
  • Afficher dans les labels l'évolution des valeurs d'une série en fonction du point précédent .
    Sub afficherEvolutionPourcentage_enFonctionDuPointPrec edent()
    'remarque : les labels ne seront pas mis à jour automatiquement
    'si les données sont modifiées dans le tableau
    Dim j As Integer
    Dim X As Single, Y As Single
    Dim Resultat As String
    On Error Resume Next
    'suppression des Labels existants
    Feuil1.chartObjects(1).Chart.seriesCollection(1).d ataLabels.Delete
    On Error goTo 0
    'affichage des Labels (Ordonnées) pour en extraire les valeurs
    Feuil1.chartObjects(1).Chart.seriesCollection(1).a pplyDataLabels Type:=xlDataLabelsShowValue
    'boucler sur les point de la 1ere serie ( en dehors du premier point )
    For j = 2 To Feuil1.chartObjects(1).Chart.seriesCollection(1).P oints.Count
    X = Feuil1.chartObjects(1).Chart.seriesCollection(1).P oints(j).dataLabel.Characters.Text 'valeur du point
    Y = Feuil1.chartObjects(1).Chart.seriesCollection(1).P oints(j - 1).dataLabel.Characters.Text 'valeur du point precedent
    'insere le pourcentage pour chaque point de la serie
    'cette ligne est placée avant la ligne "Resultat = Format((X / Y) - 1, "0.00%")" et permet ainsi
    'de ne rien afficher pour le 1er point
    Feuil1.chartObjects(1).Chart.seriesCollection(1).P oints(j - 1).dataLabel.Characters.Text = Resultat
    'calcul le pourcentage entre le point et le point de la semaine precedente
    Resultat = Format((X / Y) - 1, "0.00%")
    Next j
    'affiche le pourcentage pour le dernier point de la serie
    Feuil1.chartObjects(1).Chart.seriesCollection(1).P oints(j - 1).dataLabel.Characters.Text = Resultat
    End Sub
  • Changer la taille des caracteres dans un graphique
    activeSheet.chartObjects("Graphique 1").Chart.chartArea.Font.Size = 8
  • Créer et Afficher une graphique dans une fenetre popup Internet Explorer
    Dim nomImage As String
    Dim IE As Object
    Dim Hauteur As Single, Largeur As Single
    nomImage = "C:\imageTemp.gif"
    If Dir(nomImage) <> "" Then Kill nomImage 'supprime l'image si elle existe déjà
    Application.screenUpdating = False
    Charts.Add
    With activeChart
    .chartType = xlLineMarkers
    .setSourceData Source:=Sheets("Feuil1").Range("A1:B5"), plotBy:=xlColumns
    .Location Where:=xlLocationAsObject, Name:="Feuil1"
    End With
    With activeChart
    .hasTitle = True
    .chartTitle.Characters.Text = "le graphique"
    .hasLegend = True
    .Legend.Position = xlLegendPositionRight
    End With
    activeChart.Export nomImage, "GIF" 'export du graphique au format image
    Hauteur = Feuil1.chartObjects(Feuil1.chartObjects.Count).Hei ght * 1.8
    Largeur = Feuil1.chartObjects(Feuil1.chartObjects.Count).Wid th * 1.6
    Sheets("Feuil1").chartObjects(Sheets("Feuil1").cha rtObjects.Count).Delete
    Application.screenUpdating = True
    'creation d'une fenetre internet explorer pour visualiser l'image du graphique
    Set IE = createObject("internetExplorer.application")
    IE.navigate "about:blank"
    IE.document.Title = "mon graphique"
    IE.addressbar = False
    IE.menuBar = False
    IE.statusBar = False
    IE.Toolbar = False
    IE.Width = Largeur
    IE.Height = Hauteur
    IE.Left = 120
    IE.document.body.innerHTML = "<html><IMG SRC='" & nomImage & "'</html>"
    IE.Visible = True
  • Créer une ligne de repère dans une graphique dynamique (une solution donnée par Chris)
    De façon générale sur les graphiques, il suffit d'ajouter une série de données en type courbe et de donner la même valeur aux données (celle correspondant à la position sur l'axe). Il faut autant de données dans cette série que dans les autres séries du graphiques.
    Cela crée un graphique combiné : Excel ne combine que les types 2D.
  • Supprimer des séries par macro, dont certaines sont vides
    Dim W As Worksheet
    Dim NBSeries As Integer, I As Integer
    Set W = Worksheets(1)
    W.chartObjects(1).Activate
    NBSeries = activeChart.seriesCollection.Count
    activeChart.displayBlanksAs = xlZero
    'équivalent de:Menu Options /onglet Graphique/sélection de l'option "valeur zero"
    For I = NBSeries To 1 Step -1
    activeChart.seriesCollection(I).Delete
    Next I
    'adaptez la réinitialisation en fonction de la valeur par defaut dans le menu d'Options
    activeChart.displayBlanksAs = xlNotPlotted
    En résumé pour que cela fonctionne :
    dans le menu Options
    Onglet Graphique
    L'option "Valeurs zero" doit etre sélectionnée dans la zone "traitement des cellules vides" (activeChart.displayBlanksAs = xlZero, par macro)
  • Afficher le type du graphique actif
    Visualiser la macro

Les imagesUne autre solution beaucoup plus simple (sans enregistrement sur le disque)
Sub insereImage()
activeSheet.Pictures. _
Insert("http://www.excel-downloads.com/images/titres/logoED.gif").Select
End Sub
  • Extraire toutes les images d'une feuille
    Sub extraireImagesFeuille()
    Dim Pict As Picture
    Dim nb As Byte
    Application.screenUpdating = False
    For Each Pict In worksheets("Feuil1").Pictures
    Pict.copyPicture ' copier image
    With activeSheet.chartObjects.Add(0, 0, Pict.Width, Pict.Height).Chart
    .Paste 'coller l'image dans graphique
    .Export thisWorkbook.Path & "\" & Pict.Name & ".gif", "GIF"
    End With
    nb = activeSheet.chartObjects.Count
    activeSheet.chartObjects(nb).Delete
    Next Pict
    Application.screenUpdating = True
    End Sub
  • Créer l'image d'une plage de cellule et nommer l'objet
    Sub imagePlageCellules()
    Range("A1:B5").copyPicture ' La plage de cellules A1:B5 est copiée dans le Presse-papiers en tant qu'image
    activeSheet.Paste ' L'image est collée dans la feuille
    Selection.Name = "Mon image" ' renomme l'objet
    End Sub
  • Exporter une feuille complete en image , au format JPG
    Sub exporter_Feuille_imageJPG()
    'http://www.excel-downloads.com/component/option,com_simpleboard/Itemid,40/func,view/catid,2/id,10009/#10009
    Dim Ligne As Integer, Colonne As Integer
    Application.screenUpdating = False
    Feuil1.usedRange.copyPicture
    Feuil1.Paste
    Ligne = Feuil1.Cells.Find("*", Feuil1.Range("A1"), searchDirection:=xlPrevious).Row + 1
    Colonne = Feuil1.Cells.Find("*", Feuil1.Range("A1"), searchDirection:=xlPrevious).Column + 1
    With Feuil1.chartObjects.Add(0, 0, Cells(Ligne, Colonne).Left, Cells(Ligne, Colonne).Top).Chart
    .Paste
    .Export thisWorkbook.Path & "\monImage.jpg", "JPG"
    End With
    With Feuil1
    .chartObjects(Feuil1.chartObjects.Count).Delete
    .Shapes(Feuil1.Shapes.Count).Delete
    End With
    Application.screenUpdating = True
    End Sub
  • Supprimer toutes les images de la feuille active
    Sub suppressionImagesFeuille()
    activeSheet.Pictures.Delete
    End Sub
  • Une autre solution
    Sub supprimerImagesFeuille()
    Dim Sh As Shape
    For Each Sh In Worksheets("Feuil1").Shapes
    If Sh.Type = msoPicture Then Sh.Delete
    Next
    End Sub
  • Gérer une base de données d'images et les fiches d'informations associées
    L'exemple permet de visualiser en une fois toutes les images du répertoire
    Le lien sur le forum XLD
    Le fichier zippé
  • Choisir une image dans un répertoire et afficher ses dimensions
    Sub dimensionsImage()
    'testé avec Excel2002 & WinXP
    'necessite d'activer reference Microsoft Shell Controls and Automation
    Dim objShell As Shell
    Dim objFolder As Folder
    Dim strFileName As folderItem
    Dim Fichier As String, Cible As String
    Dim Rep As Integer
    Fichier = Application.getOpenFilename
    Rep = 1
    Do Until Rep = 0
    Cible = Rep: Rep = inStr(Rep + 1, Fichier, "\")
    Loop
    Set objShell = createObject("Shell.Application")
    Set objFolder = objShell.nameSpace(Left(Fichier, Cible - 1))
    Set strFileName = objFolder.Items.Item(Right(Fichier, Len(Fichier) - Cible))
    msgBox objFolder.getDetailsOf(strFileName, 26)
    msgBox objFolder.getDetailsOf(strFileName, 27)
    msgBox objFolder.getDetailsOf(strFileName, 28)
    End Sub
    Une autre solution pour récupérer les dimensions d'une image
    Dim oPict As IPictureDisp
    Set oPict = loadPicture("C:\Documents and Settings\michel\DSC00076.JPG")
    msgBox Application.Round((oPict.Height / 26.46), 0) & " x " & Application.Round((oPict.Width / 26.46), 0)
  • Avoir une image de fond dans la feuille , lors de l'impression
    Le lien sur le forum XLD
    Le fichier zippé
  • Sauvegarder et visualiser des images GIF animées , dans le classeur
    Le lien sur le forum XLD
    Le fichier zippé
    Un autre exemple qui permet d'afficher une image animée dans la feuille :
    L'image GIF est "codée" dans l'onglet "Image 1"
    Lors de l'ouverture du classeur , l'image est créée sur le disque dur "C:\imageTemp.gif" et s'affiche dans la "Feuil1" (utilsation d'un Webbrowser)
    Lors de la fermeture du classeur l'image "C:\imageTemp.gif" est supprimée
    Le fichier zippé
  • Utiliser la librairie Windows Image Acquisition Automation Library v2.0 depuis Excel
    Cette DLL permet de lire les propriétés d'une image et de la modifier .
    Lien vers la wiki page 11
  • Vérifier si un fichier est une image
    (Attention: Tous les formats d'image ne sont pas pris en compte)
    Dim Fichier As String
    Dim oPict As IPictureDisp
    Fichier = "C:\Documents and Settings\michel\dossier\nomFichier.jpg"
    'Fichier = "C:\Documents and Settings\michel\dossier\nomFichier.xls"
    On Error Resume Next
    Set oPict = loadPicture(Fichier)
    If Err.Number = 0 Then
    msgBox "Il s'agit d'une image"
    Else
    msgBox "Il ne s'agit pas d'une image"
    End If
    On Error goTo 0

Les Propriétés du classeur
  • Les propriétés d'un classeur par la fonction getFile
    Sub proprietesclasseur()
    Dim Cible As Object, Valeur As Object
    Dim Resultat As String, Fichier As String
    Fichier = "C:\Classeur2.xls" 'adpater le chemin
    Set Cible = createObject("Scripting.fileSystemObject")
    Set Valeur = Cible.getFile(Fichier)
    Resultat = "Chemin : " & Valeur.parentFolder & Chr(10) & Chr(10) & _
    "Nom et chemin fichier : " & Fichier & Chr(10) & Chr(10) & _
    "Date creation : " & Valeur.dateCreated & Chr(10) & Chr(10) & _
    "Derniere modification : " & Valeur.dateLastModified & Chr(10) & Chr(10) & _
    "Taille classeur : " & Valeur.Size & " octets"
    Msgbox Resultat
    End Sub
  • Lire Ies proprietes d'un classeur en utilisant builtinDocumentProperties
    Sub infosClasseurBuiltinDocumentProperties()
    Dim Valeur As documentProperty
    Dim R As Byte
    On Error Resume Next
    R = 1
    For Each Valeur In activeWorkbook.builtinDocumentProperties
    Cells(R, 1) = Valeur.Name
    Cells(R, 2) = Valeur.Value
    R = R + 1
    Next
    End Sub
  • Modifier le nom de l'auteur dans les propriétés du classeur , en utilisant builtinDocumentProperties
    thisWorkbook.builtinDocumentProperties("Author").V alue = "xld"
  • Ajouter une propriété personnalisée dans le classeur actif
    Sub ajouterProprietePersonnalisee()
    activeWorkbook.customDocumentProperties.Add Name:="infoX", _
    Type:=msoPropertyTypeNumber, linkToContent:=False, Value:=1965
    'Les types de données possibles :
    'msoPropertyTypeNumber:Valeurs entieres(si vous insérez 196.4 , c'est 196 qui sera enregistré )
    'msoPropertyTypeFloat:Valeurs numériques
    'msoPropertyTypeBoolean: Vrai ou Faux
    'msoPropertyTypeDate: Dates et heures
    'msoPropertyTypeString :Texte
    End Sub
  • Boucler sur toutes les propriétés personnalisées du classeur actif
    Sub bouclerSurToutesLesProprietesPersonnalisees()
    Dim Cp As documentProperty
    If activeWorkbook.customDocumentProperties.Count = 0 Then Exit Sub
    For Each Cp In activeWorkbook.customDocumentProperties
    msgBox Cp.Name & vbLf & Cp.Value
    Next Cp
    End Sub
  • Lire une propriété personnalisée spécifique
    msgBox activeWorkbook.customDocumentProperties("infoX").V alue
  • Modfifier une propriété personnalisee
    activeWorkbook.customDocumentProperties("infoX").V alue = 1997
  • Supprimer une propriété personnalisée
    activeWorkbook.customDocumentProperties("infoX").D elete
  • Afficher les propriétés de tous les fichiers d'un répertoire, sans les ouvrir
    Sub propriétésFichiers()
    'http://www.microsoft.com/resources/documentation/windows/2000/server/scriptguide/en-us/sas_fil_lunl.mspx
    'Necessite d'activer la reference Microsoft Shell Controls and Automation
    Dim objShell As Object, strFileName As Object
    Dim objFolder As Folder
    Dim Resultat As String
    Dim i As Byte
    Set objShell = createObject("Shell.Application")
    Set objFolder = objShell.nameSpace("C:\Documents and Settings\michel\dossier\excel") 'repertoire cible
    For Each strFileName In objFolder.Items 'boucle sur tous les elements du repertoire
    If strFileName.isFolder = False Then 'pour que les sous dosssiers ne soient pas pris en comptes
    Resultat = ""
    For i = 0 To 34
    Resultat = Resultat & objFolder.getDetailsOf(strFileName, i) & vbLf
    Next
    msgBox Resultat
    End If
    Next
    End Sub
    Un autre exemple
    Le fichier zippé
  • Afficher les propriétés d'un classeur sans l'ouvrir
    La procédure utilise la librairie DSO oleDocument Properties Reader 2.0
    Si elle n'est pas installée sur ton poste , tu peux la télécharger sur le site Microsoft :
    http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
    Remarque :
    Cette librairie fonctionne pour tous les documents Office ( Word , Powerpoint …)
    Sub lireProprietesClasseur()
    'necessite d'activer la reference DSO oleDocument Properties Reader 2.0
    'http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
    Dim DSO As DSOFile.oleDocumentProperties
    Set DSO = New DSOFile.oleDocumentProperties
    'le fichier doit etre fermé !
    DSO.Open sfilename:="C:\Documents and Settings\michel\dossier\general\excel\leClasseur.x ls"
    msgBox DSO.summaryProperties.Author & vbLf & DSO.summaryProperties.Comments
    'Les autres propriétés:
    'applicationName 'Author 'byteCount 'Category 'characterCount 'characterCountWithSpaces
    'Comments 'Company 'dateCreated 'dateLastPrinted 'dateLastSaved 'hiddenSlideCount
    'Keywords 'lastSavedBy 'lineCount 'Manager 'multimediaClipCount 'noteCount 'pageCount
    'paragraphCount 'presentationFormat 'revisionNumber 'sharedDocument 'slideCount
    'Subject 'Template 'Title 'totalEditTime 'Version 'wordCount
    DSO.Close
    End Sub
  • Modifier les propriétés d'un classeur sans l'ouvrir
    'exemple pour modifier le champ "commentaire" d'un fichier
    Sub modifierProprietesClasseur()
    'necessite d'activer la reference DSO oleDocument Properties Reader 2.0
    Dim DSO As DSOFile.oleDocumentProperties
    Set DSO = New DSOFile.oleDocumentProperties
    'le fichier doit etre fermé !
    DSO.Open sfilename:="C:\Documents and Settings\michel\monFichier.xls"
    DSO.summaryProperties.Comments = "mon nouveau commentaire"
    DSO.Save
    DSO.Close
    End Sub
  • Ajouter une propriété personnalisée au classeur sans l'ouvrir
    La procédure utilise aussi la librairie DSO oleDocument Properties Reader 2.0 et fonctionne pour les autres types de documents Office
    Sub ajouterProprietesPersonnalisees()
    Dim DSO As DSOFile.oleDocumentProperties
    Set DSO = New DSOFile.oleDocumentProperties
    'le fichier doit etre fermé !
    DSO.Open sfilename:="C:\Documents and Settings\michel\monfichier.xls"
    DSO.customProperties.Add "maPropriete", "le forum XLD"
    DSO.Save
    DSO.Close
    End Sub
  • Lire une propriété personnalisée sans ouvrir le classeur
    Sub lireProprietesPersonnalisees()
    'necessite d'activer la reference DSO oleDocument Properties Reader 2.0
    'http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q224351
    Dim DSO As DSOFile.oleDocumentProperties
    Set DSO = New DSOFile.oleDocumentProperties
    'le fichier doit etre fermé !
    DSO.Open sfilename:="C:\Documents and Settings\michel\dossier\monClasseur.xls"
    msgBox DSO.customProperties.Item("leNomDeMaProprietePerso nnalisee").Value
    'ou ( l'index de la 1ere propriete personnalisée est 0 )
    'msgBox DSO.customProperties.Item(0).Value
    DSO.Close
    End Sub
  • Passer un classeur en lecture seule , sans l'ouvrir
    Sub passerClasseur_lectureSeule()
    'necessite d'activer la reference Microsoft Scriping Runtime
    Dim Fs As fileSystemObject
    Dim F As File
    Set Fs = createObject("Scripting.fileSystemObject")
    Set F = Fs.getFile("C:\classeur1.xls")
    F.Attributes = F.Attributes + readOnly
    End Sub
  • La fonction fileDateTime
    renvoie la date et l'heure de création ou de dernière modification d'un fichier
    msgBox fileDateTime("C:\monClasseur.xls")
  • D'autres informations sur les propriétés des classeurs
    Le lien sur Internet
Les sauvegardes
  • Quelques exemples de sauvegarde par VBA
    Le lien sur le forum XLD
    Le fichier zippé
  • Sauvegarder un classeur automatiquement toutes les XX minutes
    Le lien sur le forum XLD
  • Sauvegarder uniquement la feuille active
    Sub enregistrerFeuilleActive()
    activeSheet.Copy
    activeWorkbook.saveAs Filename:="C:\Sauvegarde\test.xls"
    End Sub
  • Deux méthodes pour afficher la boite de dialogue Enregistrer Sous
    Sub fenetreEnrgistrerSous1()
    commandBars.findControl(ID:=748).Execute
    End Sub
    Sub FenetreEnrgistrerSous2()
    Application.Dialogs(xlDialogSaveAs).Show
    End Sub
  • Enregistrer une feuille au format htm , puis l'envoyer par mail
    Le lien sur le forum XLD
  • Incrémentation d'une unité dans le nom des classeurs sauvegardés
    Le lien sur le forum XLD
  • Bloquer l'utilisation du bouton "enregistrer sous"
    Procédure evenementielle à placer au niveau de thisWorkbook .
    Private Sub Workbook_beforeSave(byVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI = True Then Cancel = True
    End Sub

Les shapes / Les formes automatiques
  • Afficher le contenu d'une cellule dans une forme automatique .
    Sélectionnez la forme automatique .
    Ensuite saisissez la référence à la cellule dans la barre de formules :
    =A1
    De la même manière il est possible de faire référence à une cellule d'une autre feuille :
    =Feuil2!A1
  • Utiliser une forme automatique comme une case à cocher
    Le lien sur le forum XLD
    Le fichier zippé
  • Plusieurs shapes qui suivent le curseur de la souris
    Le fichier zippé
  • Oter toutes les affectations de macros , pour les formes automatiques( et graphiques ) de la Feuil1
    Sub enleveOnAction_Macros()
    Dim Obj As Shape
    For Each Obj In Feuil1.Shapes
    Obj.onAction = ""
    Next
    End Sub
  • Boucler sur 3 formes automatiques dans la feuille active et leur affecter une macro .
    Sub boucleFormesAutomatiques_attributionMacro()
    Dim Tableau() As Variant
    Dim i As Byte
    Tableau = Array("Macro1", "Macro2", "Macro3")
    For i = 1 To 3
    If activeSheet.Shapes(i).Type = 1 Then activeSheet.Shapes(i).onAction = Tableau(i - 1)
    i = i + 1
    Next i
    End Sub
  • Associer un lien hypertexte au 1er shape de la feuille active
    activeSheet.Hyperlinks.Add Anchor:=activeSheet.Shapes(1), Address:="C:\monClasseur.xls"
  • Supprimer toutes les formes automatiques de la feuille active
    Dim Obj As Shape
    For Each Obj In activeSheet.Shapes
    If Obj.Type = 1 Then Obj.Delete
    Next Obj
  • Ne pas déplacer ou redimensionner la forme automatique avec les cellules
    Feuil1.Shapes("Rectangle 1").Placement = xlFreeFloating
    cette meme opération sans macro:
    Clic droit sur l'objet
    Format de la forme automatique
    onglet "propriétés"
    selectionnes l'option "ne pas deplacer ou redimensionner avec les cellules"
    cliques sur OK pour valider
  • Récupérer l'adresse des cellules placées sous la 1ere forme automatique de la Feuil1
    msgBox Feuil1.Shapes(1).topLeftCell.Address & ":" & Feuil1.Shapes(1).bottomRightCell.Address
  • Cliquer sur une forme automatique dont on ne connait pas le nom afin d'en changer la couleur. Une solution proposée par Hervé.
    Affectez cette macro à chaque forme automatique de la feuille active.
    Sub Coloriage_V02()
    Dim leNom As String
    leNom = Application.Caller
    '10 rouge
    '1 blanc
    With activeSheet.Shapes(leNom).Fill.foreColor
    .schemeColor = IIf(.schemeColor = 10, 1, 10)
    End With
    End Sub

Aleatoire
  • Informations générales issues de l'aide en ligne Excel
    La fonction Rnd renvoie une valeur inférieure à 1 mais supérieure ou égale à zéro.
    Quelle que soit la valeur initiale indiquée, la même série de nombres aléatoires est générée à chaque appel de la fonction Rnd, car cette dernière réutilise le nombre aléatoire précédent comme valeur initiale pour le calcul du nombre suivant.
    Avant d'appeler Rnd, utilisez l'instruction Randomize sans argument pour initialiser le générateur de nombres aléatoires à partir d'une valeur initiale tirée de l'horloge système.
  • Permuter les valeurs d'une colonne et de façon aléatoire
    Le lien sur le forum XLD
    Le fichier zippé
  • Afficher un nombre aleatoire entre 1 et 6
    Sub nombreAleatoireEntre1et6()
    Randomize 'Initialisation générateur de nombres aléatoires
    msgBox Int((6 * Rnd) + 1)
    End Sub
  • Afficher une lettre aléatoire entre A et Z
    Sub lettreAleatoire()
    Dim Cible As Byte
    Randomize 'Initialisation générateur de nombres aléatoires
    Cible = Int((26 * Rnd) + 1)
    msgBox Chr(Cible + 64)
    End Sub
  • Insérer une liste de nombres , de 0 à 199 , de façon aléatoire et sans doublons
    Des solutions de Robert , Hervé et Phibou
    Le lien sur le forum XLD
  • Afficher un nombre aléatoire dans une plage de valeurs (entre 10 et 15 dans l'exemple )
    Sub nombreAleatoireDansPlageValeurs()
    Dim Mini As Integer, Maxi As Integer
    Mini = 10
    Maxi = 15
    Randomize
    msgBox Int((Maxi - Mini + 1) * Rnd + Mini)
    End Sub

Les barres d'outils et les barres de menus
  • Changer un faceID dans une barre menu integree excel
    Exemple remplacement ID "Jumelles" par "Oeil" dans Menu Edition Rechercher
    Sub changeIDMenuRechercher()
    Application.commandBars("Worksheet Menu Bar").Controls("Edition"). _
    Controls("&Rechercher...").faceId = 2174 'oeil
    End Sub
    Sub reinitialiserIDMenuRechercher()
    Application.commandBars("Worksheet Menu Bar").Controls("Edition"). _
    Controls("&Rechercher...").faceId = 1849 'jumelles
    End Sub
  • Choisir entre differentes positions pour une barre d'outils personnalisée
    Le fichier zippé
  • Afficher le menu contextuel par macro ( le menu qui apparait lors du clic droit dans une cellule)
    Sub afficherMenuContextuel()
    Application.commandBars("Cell").showPopup
    End Sub
  • Afficher la barre de statut et y insérer une information
    Application.displayStatusBar = True
    Application.statusBar = "le forum XLD"
  • Réinitialiser le menu contextuel
    Sub reinitialiserMenuContextuelDisparu()
    Application.commandBars("cell").Reset
    End Sub
  • Lister les controles contenus dans le menu contextuel
    Sub listerControlesMenucontextuel()
    Dim i As Integer
    For i = 1 To Application.commandBars("cell").Controls.Count
    Cells(i, 1) = Application.commandBars("cell").Controls(i).Captio n
    Next i
    End Sub
  • Masquer la barre de statut
    Application.displayStatusBar = False
  • Associer un menu personnalisé à un classeur
    le nouveau menu est créé lors de l'ouverture du classeur et supprimé lors de la fermeture du classeur
    Le lien sur le forum XLD
    Le fichier zippé
  • Réafficher une barre d'outils disparue
    (exemple de la barre Web )
    Sub recupererBarreOutilsDisparue()
    Application.commandBars("Web").Enabled = True
    Application.commandBars("Web").Visible = True
    End Sub
    Un utilitaire complet pour restaurer les barres d'outils disparues, créé par @+Thierry
    Le lien sur le forum XLD
  • attacher une image à un bouton , dans une barre d'outils personnalisée
    Sub imageDansBouton_barreOutilsPersonnalisee()
    Dim monBouton As commandBarControl
    Dim Pict As IPictureDisp
    Application.commandBars.Add(Name:="maBarreOutils") .Visible = True
    Application.commandBars("maBarreOutils").Controls. Add _
    (Type:=msoControlButton).Caption = "testBouton"
    Set Pict = stdole.stdFunctions.loadPicture("C:\monImage.bmp")
    Set monBouton = Application.commandBars("maBarreOutils").Controls( "testBouton")
    With monBouton
    .Picture = Pict
    .tooltipText = "essai"
    .onAction = "maMacro"
    .Style = msoButtonIconAndCaption
    End With
    End Sub
  • D'autres exemples pour personnaliser des menus et une barre de menus dans Excel
    Le lien vers l'aide en ligne Microsoft
  • Créer un commandBarButton contenant un Icone et du Texte
    Le lien sur le forum XLD
Les boites de dialogue integrees Excel
  • Un mini tutorial basique sur les Msgbox , Inputbox et l'assistant animation
    Le lien sur le forum XLD
    Le fichier zippé
  • Inputbox : Intercepter l'utilisation du bouton Annuler
    Sub Test()
    Dim Reponse As Variant
    Reponse = Application.inputBox("Saisissez vos données ", "Message", "le forum XLD")
    If Reponse = False Then msgBox "Action Annulée"
    End Sub
  • Afficher les boites de dialogues integrees
    par exemple afficher la fenetre Enregistrer Sous
    Sub Lance()
    Application.Dialogs(xlDialogSaveAs).Show
    End sub
  • Afficher un dossier par défaut lors de l'ouverture de la boite de dialogue "ouvrir fichier"
    Sub boiteDialogueOuvrir()
    chDir ("C:\Documents and Settings\mon répertoire")
    Application.Dialogs(xlDialogOpen).Show
    End Sub
    une autre méthode
    Sub boiteDialogueOuvrir()
    Application.Dialogs(xlDialogOpen).Show "C:\Documents and Settings\mon répertoire"
    End Sub
  • Parametrer par macro les arguments de la boite de dialogue xlDialogCopyPicture
    'appearance_num, size_num, type_num
    '1= 1ere option de chaque argument
    '2= 2eme option de chaque argument
    Application.Dialogs.Item(xlDialogCopyPicture).Show 1, 1, 2
  • Afficher un Msgbox temporaire , exemple de 3 secondes
    Sub messageProvisoire()
    createObject("Wscript.shell").Popup "Mon Texte", 3, "Le Titre"
    End Sub
  • Afficher la boite de dialogue "Rechercher" (équivalent de Ctrl + F )
    'Range("A1").Select 'Si lancé depuis un Commandbutton
    commandBars("Edit").Controls(14).Execute
  • Utiliser le bouton d'aide dans un msgBox (vbMsgBoxHelpButton)
    Le lien sur le forum XLD
  • Lister le nom des fichiers en multisélection dans la boite de dialogue "Ouvrir"
    Dim Fichiers As Variant
    Dim i As Integer
    Fichiers = Application.getOpenFilename(, , , , True)
    If isArray(Fichiers) Then
    For i = 1 To UBound(Fichiers)
    msgBox Fichiers(i)
    Next
    End If

Les classeurs
  • Ouvrir un classeur
    Sub ouvrirClasseur()
    Workbooks.Open "C:\Mes documents\test.xls"
    End Sub
  • Fermer le classeur actif
    Sub fermerClasseur()
    activeWorkBook.Close 'saveChanges:=False 'ou True pour gerer les modifications
    End Sub
  • Creer un nouveau classeur
    Sub creerClasseur()
    Workbooks.Add
    End Sub
  • Afficher le chemin complet et le nom du classeur actif
    Sub cheminClasseur()
    msgBox activeWorkbook.fullName
    End Sub
  • Empecher la fermeture du classeur par la croix
    Private Sub workbook_beforeClose(Cancel As Boolean)
    if cancel=false then _
    msgbox"Veuillez utilser le bouton prévu à cet effet" : cancel=true
    End Sub
  • Lister tous les classeurs ouverts
    Sub listeClasseursOuverts()
    Dim Wb As Workbook
    For Each Wb In Workbooks
    msgBox Wb.Name
    Next Wb
    End Sub
  • Vérifier si un classeur nommé "Classeur1" est ouvert
    Sub verifClasseurOuvert()
    Dim Wb As Workbook
    For Each Wb In Workbooks
    If Wb.Name = "Classeur1" Then
    msgBox "Le Classeur est ouvert ."
    Exit Sub
    End If
    Next Wb
    msgBox "Le classeur n'est pas ouvert . "
    End Sub
  • Autoriser les modifications dans un classeur uniquement par macro
    Private Sub Workbook_Open()
    Dim Sht As Worksheet
    For Each Sht In Worksheets
    Sht.Protect userInterfaceOnly:=True
    Next Sht
    End Sub
  • Ajouter un élément dans la liste des classeurs récemment utilisés
    Application.recentFiles.Add Name:="monClasseur.xls"
  • Suivre l'utilisation d'un classeur partagé en réseau
    renvoyer le nom de l'utilisateur chez qui le fichier est ouvert , en tenant compte des ouvertures en lecture seule
    Le lien sur le forum XLD
  • Mettre à jour les liaisons, sans afficher la boite de dialogue , lors de l'ouverture d'un classeur
    Set Wb = Workbooks.Open("C:\monClasseur.xls" , 3 )
    Remplacer le 3 par un 0 pour ne pas mettre à jour les liaisons
  • Lister les utilisateurs d'un classeur partagé
    Sub listerUtilsateursClasseur()
    'http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbaxl11/html/xlproUserStatus1_HV05205754.asp
    Dim Users()
    Dim i As Byte
    Users = activeWorkbook.userStatus
    With Workbooks.Add.Sheets(1)
    For i = 1 To UBound(Users, 1)
    .Cells(i, 1) = Users(i, 1)
    .Cells(i, 2) = Users(i, 2)
    Select Case Users(i, 3)
    Case 1
    .Cells(i, 3).Value = "Exclusive"
    Case 2
    .Cells(i, 3).Value = "Shared"
    End Select
    Next
    End With
    End Sub
  • Choisir un classeur dans une boite de dialogue et le renommer
    Sub renommerClasseur()
    Dim Classeur As String, Chemin As String
    Dim Fso As Object
    Classeur = Application.getOpenFilename("Fichiers Excel (*.xls), *.xls")
    If Classeur = "Faux" Then Exit Sub
    Set Fso = createObject("Scripting.fileSystemObject")
    Chemin = Fso.getFile(Classeur).parentFolder
    Name Classeur As Chemin & "\nouveauNom.xls"
    End Sub
  • Lister les classeurs récents
    Représente les classeurs dans la liste des derniers fichiers utilisés (menu Fichier).
    Dim Rf As recentFile
    For Each Rf In Application.recentFiles
    msgBox Rf.Path & vbCrLf & Dir(Rf.Path)
    Next


Si vous constatez des erreurs dans la page n'hesitez pas à m'en faire part .
Toutes vos idees sont les bienvenues .
Michel , Mise à jour le 25 Novembre 2006

Dernière modification par MichelXld 08/03/2008 à 22h36.
MichelXld est déconnecté   Réponse avec citation
ANNONCES
Réponse



Outils de la discussion

Règles de messages
Vous pouvez ouvrir de nouvelles discussions : nonoui
Vous pouvez envoyer des réponses : nonoui
Vous pouvez insérer des pièces jointes : nonoui
Vous pouvez modifier vos messages : nonoui

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non