90
Les Boucles et Compteurs Installe un compteur en A3 Sub Compteur1() For compteur = 1 To 200 Range("A3").Formula = compteur Next End Sub Ajoute une valeur Ajoute 100 aux valeurs de la colonne A dans la colonne B et ceci pour les 10 premières cellules Sub AjoutVAl() Dim MaValeur, nbcell For nbcell = 1 To 10 Range("A" & nbcell).Select MaValeur = ActiveCell.Value Range("B" & nbcell).Select ActiveCell.Value = MaValeur + 100 Next End Sub Incrémente un compteur 'Le mot clé Step permet d'incrémenter ou de décrémenter Sub Total() For i = 2 To 10 Step 2 Next i MsgBox "Le total est de " & i End Sub Compte les valeurs identiques Sub ValeursIdentiques() Spinner = 0 Set plageCherche = Application.InputBox(Prompt:="Sélectionner la plage de recherche", Type:=8)

anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Embed Size (px)

Citation preview

Page 1: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Les Boucles et Compteurs

Installe un compteur en A3Sub Compteur1()

For compteur = 1 To 200Range("A3").Formula = compteur

NextEnd Sub

Ajoute une valeur

Ajoute 100 aux valeurs de la colonne A dans la colonne Bet ceci pour les 10 premières cellules

Sub AjoutVAl()Dim MaValeur, nbcellFor nbcell = 1 To 10

Range("A" & nbcell).SelectMaValeur = ActiveCell.ValueRange("B" & nbcell).SelectActiveCell.Value = MaValeur + 100

NextEnd Sub

Incrémente un compteur

'Le mot clé Step permet d'incrémenter ou de décrémenter

Sub Total()For i = 2 To 10 Step 2Next iMsgBox "Le total est de " & i

End Sub

Compte les valeurs identiques

Sub ValeursIdentiques()Spinner = 0Set plageCherche = Application.InputBox(Prompt:="Sélectionner la plage de recherche", Type:=8)ValCherchée = Application.InputBox(Prompt:="Quelle valeur cherchez-vous?", Type:=1)For Each Item In plageCherche

If Item.Value = ValCherchée Then Spinner = Spinner + 1Next Item

Page 2: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

MsgBox "Il y a " & CStr(Spinner) & " valeurs identiques"End Sub

Compte le nombre de cellules vides de la sélection.

Sub CountCellvide()numBlanks = 0For Each c In Selection

If c.Value = "" ThennumBlanks = numBlanks + 1

End IfNext cMsgBox "Il y a " & numBlanks & " cellules vides dans cette plage."

End Sub

Boucle pour parcourir une plage de cellules

'Utilise une boucle For Each...Next pour parcourir toutes les cellules d'une plage.'Arrondi à zéro tout nombre dont la valeur absolue est inférieure à 0,05.

Sub Zero()For Each Cellule In Range("A1:B10")

If Abs(Cellule.Value) < 0.05 ThenCellule.Value = 0

End IfNext

End Sub

Affecte une largeur de 5 points à une colonne sur deux de la sélection sur la Feuil1.

Sub LargeurColonne()For Each col In Selection.Columns

If col.Column Mod 2 = 0 Thencol.ColumnWidth = 5

End IfNext col

End Sub

Et pour une ligne (Toutes les 6 lignes):

Sub Ligne()Range("D1:D20").Select     'Exemple de sélection possibleFor Each col In Selection.Rows

If col.Row Mod 6 = 0 Thencol.RowHeight = 5

End If

Page 3: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Next colEnd Sub

Cherche une valeur non numérique

Sub Test()

'Dès qu'une valeur non numérique est trouvée, un message s'affiche et sort de la boucle.

For Each Cellule In Range("A1:B5")If IsNumeric(Cellule.Value) = False Then

MsgBox "La plage contient une valeur non numérique."Exit For

End IfNext

End Sub

Modifie la valeur des cellules d'une plage nommée "MaPlage"

Sub Modifie()Dim MaCellule As ObjectFor Each MaCellule In Range("MaPlage")

If MaCellule > 50 ThenMaCellule.Value = 1000

End IfNext MaCellule

End Sub

Et pour finir un compte à rebours qui déclenche l'exécution d'une macro

Sub CompteARebours()compteur = 5

'pour décrementer le compteur

For compteur = 5 To 0 Step -1 Range("b3").Formula = compteur

'Pour exécuter la macro dans 5 secondes!!!

nouvHeure = Hour(Now())nouvMinute = Minute(Now())nouvSeconde = Second(Now()) + 1Reprise = TimeSerial(nouvHeure, nouvMinute, nouvSeconde)Application.Wait Reprise

NextIf Range("b3").Value = 0 Then

Page 4: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

'Exécution de la macro ici

Call Macro1End If

End Sub

Les Cellules

Déplace la cellule active d'une ligne vers le bas et deux colonnes vers la droite

Sub DéplaceCellActive()Dim LigVar, ColVarLigVar = 1ColVar = 2Selection.Offset(LigVar, ColVar).Select

End Sub

Sélectionne la cellule F1 et "scroll" l'écran

Sub SelectCell()Application.GoTo Reference:=ActiveSheet.Range("F1"), Scroll:=True

End Sub

Ajuste la colonne

Sub ajuste_colonne()Selection.Columns.AutoFit

End Sub

Redéfini la sélection à partir d'une plage nommée MySelect

Sub Redefini_Selection()Range("MySelect").Resize(rowsize:=1, columnsize:=5).Select

End Sub

Sélectionne toute la ligne à partir d'une plage nommée MySelect

Sub SelectionLigne()Range("MySelect").EntireRow.Select

End Sub

Page 5: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Sélectionne la zone courante et 1 colonne de plus - 2 méthodes

Sub SelectionZone_1ere()With Range("A1").CurrentRegion

Union(.Cells, .Offset(0, 1)).SelectEnd With

End Sub

Sub SelectionZone_2eme()With Range("A1").CurrentRegion

.Resize(, .Columns.Count + 1).SelectEnd With

End Sub

Supprime les lignes vides d'un tableau

Sub DétruireLigne()derniereLigne = ActiveSheet.UsedRange.Rows.CountApplication.ScreenUpdating = FalseFor r = derniereLigne To 1 Step -1

If Application.CountA(Rows(r)) = 0 Then Rows(r).DeleteNext r

End Sub

Supprime les lignes vides d'un tableau si la colonne C est vide

Sub DétruireLignesiC()derniereLigne = ActiveSheet.UsedRange.Rows.CountApplication.ScreenUpdating = FalseFor r = derniereLigne To 1 Step -1

If IsEmpty(Range("C" & r)) Then Rows(r).DeleteNext r

End Sub

Sub DeletesiCvide2()   'plus rapideWith Range("C1",Range("A65000").End(xlUp)).SpecialCells(xlCellTypeBlanks).EntireRow.DeleteEnd WithEnd Sub

Efface la ligne de la cellule active de valeur 0 d'une plage de cellule

Sub EffaceLigneVide()Range("D2").Select

'Sélection de la cellule de départ avec décalage sur les lignes(Offset(1,0))

Do Until ActiveCell = ""If ActiveCell = 0 Then

Selection.EntireRow.Clear

Page 6: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

End IfActiveCell.Offset(1,0).Range("A1").Select

LoopRange("A1").Select

End Sub

Recherche une valeur, sélectionne la ligne de la valeur trouvée et supprime cette ligne avec message de confirmation

Sub SupLigValeur()Dim VarDim NumLgOn Error Resume NextVar = InputBox(Prompt:="Taper la valeur recherchée. ")Cells.Find(What:=(Var), After:=ActiveCell,LookIn:=xlFormulas, LookAt:=xlWhole,

SearchOrder :=xlByRows, SearchDirection:=xlNext, MatchCase:=False).ActivateWith Application.ActiveCell

NumLg = .RowEnd WithActiveCell.EntireRow.SelectStyle = vbYesNo + vbDefaultButton1Msg = "Suppression de la ligne N°: " & NumLgTitle = "Attention suppression de la ligne."Réponse = MsgBox(Msg, Style, Title)If Réponse = vbYes Then

Selection.Delete Shift:=xlUpElse

Exit SubEnd If

End Sub

Recherche un mot, sélectionne la ligne de la valeur trouvée et supprime cette ligne avec message de confirmation

Sub RechercheMot()Dim Var As StringOn Error Resume NextVar = InputBox("Mot à rechercher ?", , "zzzz")'pour ne rien supprimer en cas d' ECHAP ou D'ANNULERIf Var = "" Then Exit SubSet MotTrouvé = Cells.Find(What:=Var)If Not MotTrouvé Is Nothing Then

MotTrouvé.Select'confirmation de suppressionStyle = vbYesNo + vbDefaultButton1Msg = "Suppression de la ligne"Title = "Attention suppression de la ligne."Réponse = MsgBox(Msg, Style, Title)

If Réponse = vbYes ThenActiveCell.EntireRow.Select

Page 7: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Selection.Delete Shift:=xlUpEnd If

ElseMsgBox "Rien trouvé"Exit Sub

End If[A1].Select

End Sub

Teste si les cellules de la plage sont vides ou non vides et entre la formule indiquée dans la première cellule vide testée.

Sub Parcourir()Range("A1:A20").ActivateEn_Colonne = ActiveCell.ColumnEn_Ligne = ActiveCell.Row + 1While Not IsEmpty(ActiveCell.Value)

Cells(En_Ligne, En_Colonne).ActivateEn_Ligne = En_Ligne + 1

WendWith ActiveCell

ActiveCell.FormulaR1C1 = "Premiere cellule vide"Range("A11").Select

End WithEnd Sub

Compare les valeurs de 2 plages de cellules(Votant et Resultat)

Sub TestRésultat()Dim CellPtrDim XDim ZWorksheets("Résultats").SelectSet X = Range("Votant")Set Z = Range("Résultat")Z.SelectSelection.Interior.ColorIndex = xlNoneFor CellPtr = 1 To X.Count

If X(CellPtr) = Z(CellPtr) ThenZ(CellPtr).SelectWith Selection.Interior

.ColorIndex = 15

.Pattern = xlSolidEnd With

End IfNext CellPtrZ.SelectIf Selection.Interior.ColorIndex = 15 Then

MsgBox Prompt:="La plage Votant et la plage Résultat sont identiques. Il n'y a pas d'erreur."

Range("A1").Select

Page 8: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

ElseMsg = " Vous devez corriger l'erreur ! "Style = vbCriticalTitle = " <<< Erreur trouvée >>>"Réponse = MsgBox(Msg, Style, Title, Help, Context)If Réponse = vbYes Then

Z.SelectEnd If

End IfEnd Sub

Colore en gris toutes les cellules dont les valeurs sont <30 de la plage E2:E65

Sub StockInf50()For Each Cell In Range("E2:E65")

If Cell.Value < 30 ThenCell.SelectWith Selection.Interior

.ColorIndex = 15

.Pattern = xlSolidEnd With

End IfNext

End Sub

Mets en majuscule la première lettre de la phrase de la sélection

Sub 1ereLettremajuscule()phrase = Selection.Valuephrase = UCase(Left(phrase, 1)) + Right(phrase, Len(phrase) - 1)Selection.Value = phrase

End Sub

Mets en majuscule toute la phrase de la sélection

Sub MinusculeMajuscule()Dim MotsCellule As StringMotsCellule = Selection.ValueMotsCellule = UCase(MotsCellule)Selection.Value = MotsCellule

End Sub

Mets en minuscule toute la phrase de la sélection

Sub MajusculeMinuscule()Selection = Evaluate("transpose(lower(transpose(" & Selection.Address & ")))")

End Sub

Page 9: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Fait la somme des chiffres écrits en rouge de la sélection

Sub sommeCouleurRougeText()Dim Cellule As RangeDim total  As VariantFor Each Cellule In Selection

If Cellule.Font.ColorIndex = 3 Then

'3 rouge et 1 pour le noir

'If Cellule.Interior.ColorIndex = 3 Then (pour la couleur de fond)

If IsNumeric(Cellule) Then total = total + Cellule.ValueEnd If

NextMsgBox totalRange("G12") = total

End Sub

Compte le nombre de cellules colorées en rouge de la sélection

Sub NombredeCellRouge()Dim Cellule As RangeDim total  As VariantFor Each Cellule In Selection

If Cellule.Interior.ColorIndex = 3 Then 'rougetotal = total + Cellule.Count

End IfNextMsgBox "Il y a " & total & " Cellules rouges"Range("A1") = total

End Sub

Personnalise les couleurs de la sélection suivant les valeurs RGB

Sub CouleurRGB()Range("a1").Interior.Color = RGB(0, 0, 0)Range("a2").Interior.Color = RGB(255, 0, 0)

End Sub

Cherche si la sélection contient une formule

Sub ChercheFormule()

'Dès qu'une formule est trouvée,'un message s'affiche et sort de la boucle.

For Each Cellule In Range("A1:B5")If Left(Cellule.Formula, 1) = "=" Then

Page 10: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

MsgBox "La plage contient une formule."Exit For

End IfNext

End Sub

Trie les lignes et supprime les doublons.

Sub tridoublon()Worksheets("Feuil1").Range("A1").Sort key1:=Worksheets("Feuil1").Range("A2"),

_Order1:=xlAscending, Header:=xlGuess

Set MaCell = Worksheets("Feuil1").Range("A1")

Do While Not IsEmpty(MaCell)Set MaCellSuite = MaCell.Offset(1, 0)If MaCellSuite.Value = MaCell.Value Then

MaCell.EntireRow.DeleteEnd IfSet MaCell = MaCellSuite

LoopEnd Sub

Insére un commentaire dans une cellule.

Sub InsertionComment()Dim MyCmt As StringDim LaCell As Range

Set LaCell = Application.InputBox("Cliquez sur une cellule", Default:=ActiveCell.Address, Type:=8)MyCmt = InputBox("Inscrivez votre commentaire")On Error Resume Next

With LaCell.AddCommentWith .Comment.Visible = True.Text Text:=MyCmtEnd WithEnd WithEnd Sub

Formatage de tous les commentaires.

Sub FormatCommentaire()Dim wks As Worksheet, MyCmt As Comment

For Each wks In WorksheetsFor Each MyCmt In wks.Comments

Page 11: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

MyCmt.Shape.OLEFormat.Object.AutoSize = True

With MyCmt.Shape.OLEFormat.Object.Font.Name = "Verdana".Size = 10.ColorIndex = 9.Bold = TrueEnd With

MyCmt.Shape.OLEFormat.Object.ShapeRange.Fill.ForeColor.SchemeColor = 35Next MyCmtNext wksEnd Sub

Masque (affiche) tous les commentaires.

Sub MSQCommentaire()Dim wks As Worksheet, MyCmt As Comment

For Each wks In WorksheetsFor Each MyCmt In wks.Comments    MyCmt.Visible = False   ' Masque le commentaire    MyCmt.Visible = True   ' Affiche le commentaireNext MyCmtNext wksEnd Sub

Masque (affiche) tous les commentaires. XP

Sub MsqXP()Application.DisplayCommentIndicator = xlCommentIndicatorOnlyEnd Sub

Sub AffXP()Application.DisplayCommentIndicator = xlCommentAndIndicatorEnd Sub

Supprime le nom utilisateur des commentaires

Sub SupNomAuthor()Dim NomAuthor As StringDim TxtComment As StringDim Commentaire As Comment

'Recupere le nom utilisateur

NomAuthor = ActiveWorkbook.BuiltinDocumentProperties(3)

For Each Commentaire In ActiveSheet.Comments

Page 12: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

TxtComment = Commentaire.TextIf Left(TxtComment, Len(NomAuthor)) = NomAuthor Then

'+2 pour virer les 2 points ":"

TxtComment = Mid(TxtComment, Len(NomAuthor) + 2)

'Chr(10) pour virer la ligne vide

If Left(TxtComment, 1) = Chr(10) ThenTxtComment = Mid(TxtComment, 3)End IfEnd IfCommentaire.Text Text:=TxtCommentNext CommentaireEnd Sub

Ecrit les jours de la semaine (Sélectionner une cellule)

Sub JourSemaine()Dim semaine(1 To 7) As Stringsemaine(1) = "Lundi"semaine(2) = "Mardi"semaine(3) = "Mercredi"semaine(4) = "Jeudi"semaine(5) = "Vendredi"semaine(6) = "Samedi"semaine(7) = "Dimanche"For i = 1 To 7Selection.Offset(i - 1, 0).Formula = semaine(i)Next iEnd Sub

Crée un tableau Année - Trimestre (Sélectionner une cellule)

Sub TableauAnTrimestre()For An = 1 To 5Cells(1, An + 1).Value = 2000 + AnNext AnFor Trimestre = 1 To 4Cells(Trimestre + 1, 1).Value = "Trim" & TrimestreNext TrimestreEnd Sub

Ajoute la chaîne de caractères "Terminé" à la fin du texte de la cellule

Sub InserTermineDansCellule()Cells(1, 1).SelectWith Selection

Page 13: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

.Characters(.Characters.Count + 1).Insert (" terminé")End WithEnd Sub

Associe 2 plages en un seul objet avec la méthode UNION

Sub UniondePlage()Dim plg1, plg2, ToutePlage As Range

Set plg1 = Sheets("Feuil1").Range("A1:A10")Set plg2 = Sheets("Feuil1").Range("B10:B20")Set ToutePlage = Union(plg1, plg2)

ToutePlage.Interior.ColorIndex = 5End Sub

Rempli l'union de deux plages avec la valeur 100

Sub RempliUnion()Worksheets("Feuil1").ActivateSet MaPlage = Application.Union(Range("A1:D10"), Range("F1:H12"))MaPlage.Value = 100End Sub

Sélectionne la cellule A154 de la Feuil1 et "Scroll" l'écran

Sub AllerA()Application.Goto Reference:=Worksheets("Feuil1").Range("A154"), Scroll:=TrueEnd Sub

Donne le numéro de ligne de la valeur cherchée

Sub NumeroDeLigne()NumeroLigne = Cells.Find("100").RowMsgBox NumeroLigneEnd Sub

Donne le nombre de lignes de la sélection

Sub NombreDeLigne()With SelectionMsgBox Selection.Rows.CountEnd WithEnd Sub

Page 14: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Macro pour modifier une formule (ici le nom de référence du classeur)

Sub ModifFormule()Application.SendKeys "{f2}"

'Envoie la touche F2

For I = 1 To 10

'Boucle pour mettre le curseur à gauche

Application.SendKeys "{gauche}"Next IApplication.SendKeys "{droite}"

'Pour écrire à droite du signe =

Application.SendKeys "{P}{r}{i}{x}{.}{x}{l}{s}{!}"Application.SendKeys "{ENTREE}"

'Valide la formule

End Sub

Cette macro affiche la formule écrite en A1 en A2

Il faut savoir que:Pour afficher une formule il faut entrer un espace ou une apostrophe (') devant la formule.Cette macro affiche la formule A1 en A2

Sub AfficheFormule()Range("A1").SelectSelection.CopyRange("A2").SelectSelection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone,SkipBlanks:= False, Transpose:=False

Application.SendKeys "{f2}"

For I = 1 To 10 Application.SendKeys "{gauche}"Next I

Application.SendKeys "{droite}"

'inscrit un espace devant la formule

Application.SendKeys "{BS}"Application.SendKeys "{ENTREE}"End Sub

Page 15: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Affiche et sélectionne la référence d'une sélection

Sub BoiteSelectionZone()Dim Var As ObjectOn Error Resume NextSet Var = Application.InputBox(Prompt:="Sélectionner votre zone: (Ex. A1:B10) ", _Title:="Sélection de zone ", Default:="$A$1", Type:=8)On Error GoTo 0If Not (TypeName(Var) = "Rien") ThenMsgBox Var.AddressVar.SelectEnd IfSet Var = NothingEnd Sub

Donne le numéro de ligne aussi que la lettre de la colonne de la cellule active

Sub ColLigne()Colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)Ligne = ActiveCell.RowMsgBox Colonne & LigneMsgBox ColonneMsgBox LigneEnd Sub

Formate la plage A1:A10 avec une procédure événementielle. (1 er - 2, 3, 4 etc...ème )

Mode d'emploi:Dans l'éditeur VB double-cliquez sur la feuille désiréeet coller tout le code suivant dans la partie droite.Modifiez la plage si besoin ici ----Intersect(Target, Range("A1:A10"))----A chaque modification des cellules de la plage (A1:A10) le format est mis automatiquement.

Private Sub Worksheet_Change(ByVal Target As Range)Dim Plage As RangeSet Plage = Intersect(Target, Range("A1:A10"))If Plage Is Nothing Then Exit SubFor Each cellule In PlageIf cellule.Value = 1 Thencellule.NumberFormat = "General"" er"""Else: cellule.NumberFormat = "General"" ème"""End IfNextEnd Sub

Page 16: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

D'autres procédures événementielles.

Pour la feuil1

Private Sub Worksheet_Activate()MsgBox "La Feuil1 est activée"End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)MsgBox "DoubleClick effectué"End Sub

Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)MsgBox "Click droit effectué"End Sub

Private Sub Worksheet_Change(ByVal Target As Range)MsgBox "La valeur a changée"End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)MsgBox "La sélection a changé"End Sub

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)MsgBox "DoubleClick interdit!"Cancel = TrueEnd Sub

Cherche un mot.

Sub SearchText()Dim SearchString, SearchChar, MyPosSearchChar = "salut"For Each cell In Range("A1:A11")SearchString = cell.TextMyPos = InStr(SearchString, SearchChar)

If MyPos > 0 ThenMsgBox ("Mot trouvé")MsgBox "Mot trouvé à cette adresse: " & cell.Addresscell(1, 2).Value = "(salut) est sur cette ligne"End IfNextEnd Sub

Page 17: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Comment récupérer la valeur d'une cellule,y faire une opération et renvoyer le résultat dans une autre ?

Sub RecupValeur()Dim Val1'Dim Resultat As Integer (pour un résultat en entier)Val1 = Sheets("Feuil1").[a1].ValueResultat = Val1 * 10Sheets("Feuil1").[a2].Value = (Resultat)MsgBox "Opération effectuée." & Chr(13) & Chr(13) _& "Résultat :" & CStr(Resultat)End Sub

Comment récupérer les valeurs d'une plage,y faire une opération et renvoyer le résultat dans une autre ?

Copie la plage A1:A15, ajoute 1 et colle dans la plage C1:C15

Sub CopiUnePlagedeValeur()Dim MaValeur, compteurFor compteur = 1 To 15Range("A" & compteur).SelectMaValeur = ActiveCell.ValueRange("C" & compteur).SelectActiveCell.Value = MaValeur + 1NextEnd Sub

Comment exécuter une macro si une cellule de la colonne A est sélectionnée?

Sub test_A()Colonne = Left$(ActiveCell.Address(0, 0), (ActiveCell.Column < 27) + 2)If Colonne = "A" ThenMsgBox "Je lance la macro ici"ElseMsgBox ColonneEnd IfEnd Sub

Comment faire la somme des valeurs positives d'une plage contenant des valeurs négatives?

Somme des valeurs positives.

'avec somme.si:'=SOMME.SI(A1:A10;">0")

Page 18: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

'Avec une fonction matricielle: (CTRL MAJ ENTREE)'{=SOMME(A1:A10*(A1:A10>0))}

Sub SommePositive()For Each Cell In Range("A1:A10")If Cell.Value > 0 Thentotal = total + CellEnd IfNextMsgBox "Total des valeurs positives " & totalRange("A11") = totalEnd Sub

Somme des valeurs négatives.

'avec somme.si:'=SOMME.SI(A1:A10;"<0")

'Avec une fonction matricielle: (CTRL MAJ ENTREE)' {=SOMME(A1:A10*(A1:A10<0))}

Sub SommeNégative()For Each Cell In Range("A1:A10")If Cell.Value < 0 Thentotal = total + CellEnd IfNextMsgBox "Total des valeurs négatives " & totalRange("A11") = totalEnd Sub

Comment envoyer la valeur de la cellule A1 dans un fichier texte ?

Sub a1txt()Var = [A1]FichierTXT = "C:\ajeter\aentxt.txt" 'à modifierIf Len(Dir(FichierTXT)) > 1 Then Kill FichierTXTOpen FichierTXT For Output As 1Print #1, VarCloseEnd Sub

Comment appliquer un pourcentage aux valeurs d'une plage?

Sub pourcentage()Dim mycell, myvaleur, pourcentpourcent = InputBox("Quel pourcentage appliquer?")If IsNumeric(pourcent) ThenFor Each mycell In Application.Selection.Cellsmyvaleur = mycell.Value

Page 19: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

If IsNumeric(myvaleur) Then'teste si la cellule n'est pas vide ou contient une formuleIf Not (IsEmpty(myvaleur) Or mycell.HasFormula) Thenmycell.Value = myvaleur * (pourcent / 100 + 1)End IfEnd IfNext mycellEnd IfEnd Sub

Comment rendre impossible le défilement en dehors d'une zone définie ?

Sub Nodefil()Feuil1.ScrollArea = "B4:H23"End Sub

Sub Okdefil() ' pour libérer le défilementFeuil1.ScrollArea = "" End Sub

Compte les cellules vides d'une sélection

Sub CompteLesVides() Vide = 0For Each Cellule In Selection.CellsIf IsEmpty(Cellule) Then Vide = Vide + 1NextMsgBox "Il y a " & Vide & " cellules vides dans la sélection"End Sub

Et comment compter les non vides ? Il suffit d’ajouter l’opérateur Not de négation devant IsEmpty.

Sub CompteLesNonVides()NonVide = 0For Each Cellule In Selection.CellsIf Not IsEmpty(Cellule) Then NonVide = NonVide + 1NextMsgBox "Il y a " & NonVide & " cellules non vides dans la sélection"End Sub

Les Divers

Page 20: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Lance l'Explorateur sous Windows 95-98

Sub LanceProgramme()ValRetour = Shell("C:\WINDOWS\EXPLORER.EXE", 1)Application.Wait Now + TimeValue("00:00:04")SendKeys "%{F4}", True ' Envoie Alt+F4 pour fermer l'application EXPLORER.End Sub

Ouvre Word et le fichier test.doc

Sub OuvreWord() MyAppID = Shell("Winword.EXE C:\ajeter\test.doc", 1)AppActivate MyAppIDEnd Sub

'Fonctionne lorqu'il y a un espace dans le nom du repertoire avec ajout de ""

MyAppID = Shell("Winword.EXE ""C:\Mes documents\test.doc""", 1)

Ouvre un fichier TXT (test.txt)

Sub OuvreTXT()Workbooks.OpenText Filename:="C:\ajeter\TEST.TXT", _Origin:=xlWindows, StartRow:=1, _DataType:=xlDelimited, _TextQualifier:=xlDoubleQuote, _ConsecutiveDelimiter:=False, Tab:=False, _Semicolon:=True, Comma:=False, Space:=False, _Other:=False, FieldInfo:=Array(Array(1, 1), _Array(2, 1), Array(3, 1))End Sub

Pour exécuter une macro d'un autre classeur ouvert

Sub Essai()Run ("SiAlors.xls!Module2.ExMessage")End Sub

Pour exécuter une MacroXL4

Sub AppelDeMacroXL4()Application.Run Macro:=Range("nomDuFichier.XLS!NomDeLaMacro")End Sub

Page 21: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Teste la version d'Excel en cours

Sub testVersion()Dim myvers As Stringmyvers = Application.VersionMsgBox ("Microsoft Excel" & " " & myvers)End Sub

Quelle est la résolution d'écran ?

Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, _ByVal nIndex As Long) As LongDeclare Function GetDC Lib "user32" (ByVal hWnd As Long) As LongDeclare Function ReleaseDC Lib "user32" (ByVal hWnd As Long, _ByVal hdc As Long) As Long

Sub RésolutionEcran()Dim Pix As LongPix = GetDC(0)MsgBox "La résolution est : " & GetDeviceCaps(Pix, 8) _& " * " & GetDeviceCaps(Pix, 10) & " pixels"ReleaseDC 0, PixEnd Sub

Inscrit la liste de tous les noms dans le classeur (Macros y compris)

Sub nom()Selection.ListNamesEnd Sub

Supprime tous les noms dans le classeur

Sub Supnom()Dim n As NameFor Each n In Namesn.DeleteNext nEnd Sub

Exporte un graphique au format JPG

Sub GraphJPG()Dim MyChart As ChartSet MyChart = ActiveSheet.ChartObjects(1).ChartMyChart.Export FileName:="C:\ajeter\graph1.jpg", filtername:="JPG"End Sub

Page 22: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Comment exécuter une macro Auto-Open en ouvrant un classeur par macro ?

Lorque l'on ouvre un fichier par macro les macros Auto_Open ne s'exécutent pas!!!En effet si l'on veut, par macro à la fois ouvrir un fichier et exécuter sa macro Auto_Openil faut utiliser une commande spéciale: "RunAutoMacros"

Sub OuvreLanceAutoOpen()Workbooks.Open "test.XLS"ActiveWorkbook.RunAutoMacros xlAutoOpenEnd Sub

Easter Eggs du Laboratoire des Technologies Microsoft

Un easter egg est un programme ou une fonction cachée dans vos logiciels préférés.Ceux-ci se déclenchent uniquement aprés une série d'actions bien précise.Ils ont été créés par les programmeurs, qui signent ainsi leur logiciel. MS

Un petit simulateur de vol dans Excel 97

1. Lancez Excel 97.2. Appuyez sur F5. 3. Dans la zone référence, mettez X97:L97, cliquez sur OK. 4. Appuyez sur la touche "Tabulation", normalement, on se retrouve en M97. 5. Gardez appuyées les touches "CTRL" et "SHIFT" puis cliquez sur l'icône assistant graphes(c'est une icône avec un graphique en barres).Le petit simulateur fonctionne avec la souris et les boutons gauche/droite pour marche avant/arrière.

Les développeurs d' Excel 2000

1. Tout d'abord, ouvrez Microsoft Excel. 2. Ensuite tapez F5 et écrivez X2000:L2000, puis appuyer sur entrée. 3. Appuyer sur la touche tabulation une seule fois. 4. Maintenez enfoncées les touches CTRL et SHIFT.5. Appuyez enfin sur l'icône de l'assistant graphique, il ressemble à un graphique en barres, en haut de l'écran.Notez que cet easter ne fonctionne que sous Excel 2000.

Un Jeu de Course en 3D caché dans Excel 2000

1. Démarrez Excel 2000.2. Dans le menu Fichier, faites 'Sauver en tant que page Web'. 3. Choisissez 'Publier' et 'Ajouter interactivité'.4. Sauvez votre page en .htm sur votre disque.5. Ouvrez le .htm avec votre IE. Vous avez à présent Excel au milieu de votre page. 6. Allez à la ligne 2000, sélectionnez toute la ligne. 7. Puis, à l'aide de la touche Tabulation, déplacez vous jusqu'à la colonne WC. 8. Utilisez les touches SHIFT+CTRL+ALT et cliquez sur le logo Office en haut à gauche.

Page 23: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

9. Utilisez les flèches pour conduire, espace pour tirer, O pour lâcher de l'huile, et H pour les lumières.

Les Erreurs

Gestion simple de l'erreur

Sub Simple()On Error Resume Next Worksheets("Rapportw").Select

ne trouve pas la feuille "Rapportw" mais ne provoque pas d'erreur

End Sub

Exemple de traitement d'une erreur à l'ouverture d'une feuille

Sub Auto_Open()On Error GoTo Auto_Open_ErrWorksheets("Rapportw").Select

ne trouve pas la feuille "Rapportw" et affiche un message

Auto_Open_Err:Dim monMsgLet monMsg = "Une erreur " & Err & " s'est produite. "Let monMsg = monMsg & Error()MsgBox Prompt:=monMsgEnd Sub

Sort de la procédure s'il n'y a rien à coller

Sub ColleFormule()On Error GoTo Sort:Selection.PasteSpecial Paste:=xlFormulas, Operation:=xlNone, SkipBlanks:= False, Transpose:=FalseExit SubSort:

Le traitement de l'erreur permet d'éviter un plantage si le presse-papier est vide.

End Sub

Page 24: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Evaluation d'une entrée

Sub EvalueValeur()On Error GoTo ValErreur

GetInput:MaValeur = InputBox("Tapez votre valeur (Entre 0 et 100)", "Valeur")If MaValeur = "" Then Exit Sub ' Sort si aucune valeur ou AnnulerIf MaValeur > 100 Then Error 5000 ' Erreur d'exécutionRange("A1").Value = MaValeurExit Sub

ValErreur:MsgBox "La valeur est incorrecte.Tapez une valeur comprise entre 0 et 100"Resume GetInputEnd Sub

Les Fichiers et Répertoires

Pour enregistrer le classeur actif avec comme nom le mois et l'année courant

Sub Saved()Dim M As String * 3

'ne prends en compte que les 3 premiers caractères

Dim An As StringM = Range("Mois")

'Définir le nom d'une plage sous Mois (idem An)

An = Right(Range("an"), 2)

'ne prends que les 2 derniers chiffres de l'an

ChDrive "c"ChDir "c:\corbeil"

'Changer le nom du répertoire s'il y a lieu!

ActiveWorkbook.SaveAs FileName:=(M) & (An)End Sub

Page 25: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Attention !supprime le fichier du disque dur

Sub SupprimFichier()Kill "C:\ajeter\money.txt"End Sub

Attention !supprime les fichiers du répertoire ainsi que le répertoire

Sub SupprimRépertoire()Kill "C:\aaa\*.*"

'si le répertoire n'est pas vide supprime tous les fichiers

RmDir "c:\aaa"

' Supprime le répertoire aaa.

End Sub

Attention! Crée un répertoire c:\aaa

Sub CreRépertoire()MkDir "c:\aaa"End Sub

Recherche de fichiers dont les noms commencent par "Fac"

Sub ChercheFichier()Set fs = Application.FileSearchWith fs.LookIn = "D:\Epuiset" .FileName = "Fac*"If .Execute > 0 ThenMsgBox .FoundFiles.Count & " Fichier(s) ont été trouvés."For I = 1 To .FoundFiles.CountMsgBox .FoundFiles(I)Next IElseMsgBox "Aucun fichier n'a été trouvé."End IfEnd WithEnd Sub

Ferme le classeur actif sans l'enregistrer

Sub FichierFermer()ActiveWorkbook.Saved = True

Page 26: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

ActiveWorkbook.CloseEnd Sub

Ou encore...

Sub FermeSansMessage()Application.DisplayAlerts = FalseActiveWorkbook.CloseEnd Sub

Ou encore... plus condensé

Sub FermeSansMessage()ActiveWorkBook.Close SaveChanges:=False End Sub

Récupere les noms de fichiers d'un répertoire dans un tableau.

Option ExplicitDim chemin As StringSub RecupNomFichier(ByVal Chemin As String, ByRef Tableau As Variant)Dim Fichier As StringDim Compteur As IntegerDim LigneCompteur As IntegerChemin = Application.InputBox(Prompt:="Quel répertoire voulez-vous imprimer?")Chemin = Chemin + "\*.*"'Range("B1") = CheminCompteur = 1Fichier = Dir(Chemin)Do While (Len(Fichier) > 0)ReDim Preserve Tableau(Compteur)Tableau(Compteur - 1) = FichierLigneCompteur = Compteur + 1ActiveSheet.Range("B" & LigneCompteur).Value = Tableau(Compteur - 1)Compteur = Compteur + 1Fichier = Dir()LoopEnd Sub

'...Affecter cette macro à un bouton

Sub RecupFichierTableau()Dim Tableau() As StringCall RecupNomFichier(Chemin, Tableau)End Sub

Page 27: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Recherche un fichier dans un répertoire.

Sub ChercheFichier()Set fs = Application.FileSearchWith fs.LookIn = "D:\Epuiset".FileName = "Fac*"If .Execute > 0 ThenMsgBox .FoundFiles.Count & " Fichier(s) ont été trouvés."For I = 1 To .FoundFiles.CountMsgBox .FoundFiles(I)Next IElseMsgBox "Aucun fichier n'a été trouvé."End IfEnd WithEnd Sub

Donne le nom de tous les fichiers ouverts.

Sub NbFich()Dim Wkb As WorkbookFor Each Wkb In WorkbooksMsgBox Wkb.NameNext WkbEnd Sub

Donne le chemin complet du fichier ouvert.

Sub CheminFichier()Range("b1").Value = ActiveWorkbook.FullNameEnd Sub

Ouvre un fichier texte nommé test.txt situé dans C:\ajeter

Sub OuvreTxt()Workbooks.OpenText Filename:="C:\ajeter\test.txt", _Origin:=xlWindows, StartRow:=1,DataType:=xlDelimited, _TextQualifier:=xlDoubleQuote,ConsecutiveDelimiter:=False, Tab:=False, _Semicolon:=True, Comma:=False, Space:=False,Other:=False, FieldInfo:=Array(Array(1, 1),Array(2, 1), Array(3, 1))End Sub

Cherche et ouvre tous les fichiers situés dans le répertoire C:\ajeter

Sub ChercheetOuvreFichier()Set fichcherche = Application.FileSearchWith fichcherche

Page 28: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

' .LookIn = GetDirectory  'Utilise la fonction GetDirectory voir page Exemple d'application

.LookIn = "C:\ajeter"  'Changer le chemin

.FileName = "*.xls" 'ou "*.txt"If .Execute > 0 ThenMsgBox .FoundFiles.Count & " Fichier(s) a (ont) été trouvé(s)."For I = 1 To .FoundFiles.CountWorkbooks.Open FileName:=.FoundFiles(I)On Error Resume NextNext IElseMsgBox "Aucun fichier n'a été trouvé."End IfEnd WithEnd Sub

Lance la boîte de dialogue "Ouvrir"pour sélectionner un fichier et en conserver le nom dans une variable

Sub Nomdufichier()Dim NomFichierNomFichier = Application.GetOpenFilenameIf VarType(NomFichier) = vbBoolean Then MsgBox "Action annulée" _Else MsgBox "Fichier sélectionné : " & NomFichierEnd Sub

Ouvre le fichier Test.xls s'il n'est pas déjà ouvert

Sub OuvreSiPasOuvert()Dim Worbk As WorkbookOn Error Resume NextSet Worbk = Workbooks("Test.xls")On Error GoTo 0If Worbk Is Nothing Then Workbooks.Open "C:\ajeter\Test.xls" _Else Set Worbk = NothingEnd Sub

Copie le fichier Test.xls dans le répertoire Temp

Sub CopyFichier()Msg = "Etes-vous sûr de vouloir copier ce fichier?"Style = vbYesNo + vbCritical + vbDefaultButton1Title = "COPIE DU FICHIER TEST.XLS"Réponse = MsgBox(Msg, Style, Title, Help, Context)If Réponse = vbYes ThenGoTo continuElseExit SubEnd If

Page 29: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

continu:FileCopy "D:\FichXL97\Test.xls", "c:\temp\Test.xls"End Sub

Déplace le fichier Test.xls dans le répertoire aaa

Sub deplace()Name "c:\Test.xls" As "c:\aaa\Test.xls"End Sub

Enregistre le classeur sous la valeur de la cellule C1 dans le répertoire c:\ajeter

Sub NomClasseur()Dim Chr As String 'déclare la variableChr = Range("Essai!C1")'Feuille Essai et cellule C1ChDrive "C" 'si C n'est pas le disque par défautChDir "C:\ajeter\"ActiveWorkbook.SaveAs Filename:=(Chr)End Sub

Enregistre le classeur avec le mois (cellule C1) et l'année(cellule C2)

Sub NomClasseur1()Dim Month As String * 3 'seulement les 3 premières lettresDim Year As StringMonth = Range("Feuil1!C1")Year = Right(Range("Feuil1!C2"), 2) 'pour ne renvoyer que 01 de 2001ChDrive "C" ChDir "C:\ajeter\"ActiveWorkbook.SaveAs Filename:=(Month) & (Year)End Sub

Inscrire automatiquement la date de modification du classeur à sa fermeture

En utilisant l’événement BeforeClose la macro suivante inscrit automatiquementla date de la dernière modification dans la cellule A1 de la première feuille de votre classeur.

Private Sub Workbook_BeforeClose(Cancel As Boolean)Sheets(1).[A1] = "Dernière modification le " & Format(Date, "dd/mm/yyyy")End Sub

Page 30: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Demande sous quel nom enregistrer le classeur

Sub Enregistre_Sous()Réponse = MsgBox("Voulez-vous enregistrer ce classeur ?", vbYesNo)If Réponse = vbYes ThenNom = InputBox("Donnez un nom de fichier !" & Chr(13) & "Exemple: Rapport")If Nom = "" ThenExit SubElseGoTo continuEnd Ifcontinu:ChDrive "c"ChDir "c:\ajeter" 'Indiquez le répertoireActiveWorkbook.SaveAs FileName:=(Nom)

'Application.Dialogs(xlDialogSaveAs).Show'pour afficher la boîte Enregistrer sous

End IfEnd Sub

Autre méthode en testant l'entrée du nom

Sub Enregistre_Sous2()Réponse = MsgBox("Voulez-vous enregistrer ce classeur ?", vbYesNo)If Réponse = vbYes Then

Dim nom As StringDo While nom = ""

'Répète l'instruction tant qu'aucun nom est donné

nom = InputBox("Donnez un nom de fichier !" & Chr(13) & "Exemple: Rapport")Loop

ChDrive "c"ChDir "c:\ajeter" 'Indiquez le répertoireActiveWorkbook.SaveAs FileName:=(nom)'Application.Dialogs(xlDialogSaveAs).Show'pour afficher la boîte Enregistrer sousEnd IfEnd Sub

Enregistre la feuille active en nouveau classeur

Sub Enregistre_1_Feuille()ActiveSheet.CopyApplication.Dialogs(xlDialogSaveAs).Show'Active la boite de dialogue Enregistrer sous

Page 31: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

End Sub

Pour plusieurs feuilles:Sheets(Array("Feuil1", "Feuil2")).Copy

Copie tous les fichiers du répertoire "AA" dans le répertoire "BB".

Il faut activer la référence "Microsoft Scripting Runtine"Outils => Références...

Sub CopiRepert()Dim FSO As New FileSystemObjectFSO.CopyFolder "C:\AA", "C:\BB"End Sub

Quel est le dernier document que j'ai modifié hier ?

Changez le répertoire dans cette ligne:.LookIn = "C:\mes fichiers"

Sub LastModif()With Application.FileSearch.NewSearch.LookIn = "C:\mes fichiers".SearchSubFolders = True.LastModified = msoLastModifiedYesterday.MatchAllWordForms = True.FileType = msoFileTypeAllFiles

If .Execute() > 0 ThenMsgBox "Ce dossier contient " & .FoundFiles.Count & " fichier(s) modifié(s)."

For i = 1 To .FoundFiles.CountMsgBox .FoundFiles(i)Next i

ElseMsgBox "Aucun fichier modifié."End IfEnd WithEnd Sub

Quel est la taille du fichier ?

Renvoie la taille du fichier en octets

Sub Taillefile()Dim SizeFileSizeFile = FileLen("c:\ajeter\classeur1.xls")

Page 32: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

MsgBox "Taille du fichier " & SizeFile & " octets"

'du classeur actifMsgBox FileLen(ThisWorkbook.FullName) & " octets"End Sub

Comment récupérer le chemin complet d'un répertoire et l'enregistrer dans un fichier texte?

Ce qui évite d'avoir à taper tout le chemin à la main !surtout lorsqu'il s'agit de récuperer le chemin des dossiers d'Outlook Express

Public Type BROWSEINFOhOwner As LongpidlRoot As LongpszDisplayName As StringlpszTitle As StringulFlags As Longlpfn As LonglParam As LongiImage As LongEnd Type

'32-bit API declarations

Declare Function SHGetPathFromIDList Lib "shell32.dll" _Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As LongDeclare Function SHBrowseForFolder Lib "shell32.dll" _Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Function GetDirectory(Optional Msg) As StringDim bInfo As BROWSEINFODim path As StringDim r As Long, x As Long, pos As IntegerbInfo.pidlRoot = 0&If IsMissing(Msg) ThenbInfo.lpszTitle = "Select a folder."ElsebInfo.lpszTitle = MsgEnd IfbInfo.ulFlags = &H1x = SHBrowseForFolder(bInfo)path = Space$(512)r = SHGetPathFromIDList(ByVal x, ByVal path)If r Thenpos = InStr(path, Chr$(0))GetDirectory = Left(path, pos - 1)Range("A1") = GetDirectoryElseGetDirectory = ""End IfEnd Function

Page 33: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Sub appel()Range("A1").ClearContentsMsg = "Selection de la directory désirée"ChDir GetDirectory(Msg)Var = [A1]FichierTXT = "C:\ajeter\path.txt" 'à modifierIf Len(Dir(FichierTXT)) > 1 Then Kill FichierTXTOpen FichierTXT For Output As 1Print #1, VarCloseEnd Sub

Comment avoir la liste et les valeurs des propriétes du fichier ?

Sub lstProprieteFichier()lg = 1Worksheets.AddFor Each LstPro In ActiveWorkbook.BuiltinDocumentPropertiesCells(lg, 1).Value = LstPro.NameOn Error Resume NextCells(lg, 2).Value = ActiveWorkbook.BuiltinDocumentProperties.Item(LstPro.Name)lg = lg + 1NextColumns("A:A").EntireColumn.AutoFitRange("B10:B12").NumberFormat = "[$-F800]dddd, mmmm dd, yyyy"End Sub

Comment créer un dossier ?

Ajouter une référence à "Microsoft Scripting Runtime"depuis le menu Projet à Références de l'Editeur Visual Basic.

Sub CreationDossier()Dim fso ' As Scripting.FileSystemObjectDim fd ' As Scripting.FolderDim sFolderName ' As String

' Initialisation du nom du dossiersFolderName = "C:\NewDossier"

Set fso = CreateObject("Scripting.FileSystemObject")

' Vérifier que le dossier à créer n'existe pasIf Not fso.FolderExists(sFolderName) Then' Créer le dossier.Set fd = fso.CreateFolder(sFolderName)MsgBox "Le dossier " & sFolderName & " a été créé"ElseMsgBox "Le dossier " & sFolderName & " existe déjà!"

Page 34: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

End IfEnd Sub

Comment supprimer ce dossier ?

Sub SuppressioDossier()Dim fso ' As Scripting.FileSystemObjectDim fd ' As Scripting.FolderDim sFolderName ' As String

' Initialisation du nom du dossiersFolderName = "C:\NewDossier"

Set fso = CreateObject("Scripting.FileSystemObject")' Vérifier que le dossier à supprimer existe bienIf fso.FolderExists(sFolderName) ThenSet fd = fso.GetFolder(sFolderName)fd.DeleteMsgBox "Le dossier " & sFolderName & " a été supprimé"ElseMsgBox "Le dossier " & sFolderName & " n'existe pas"End IfEnd Sub

Comment renommer ce dossier ?

Sub RenommerDossier()Dim fso ' As Scripting.FileSystemObjectDim fd ' As Scripting.FolderDim s ' As StringDim sFolderName ' As StringDim sNewName ' As StringDim sTemp ' As String

' Initialisation des noms de dossierssFolderName = "C:\NewDossier"sNewName = "LeDossier"

Set fso = CreateObject("Scripting.FileSystemObject")' Vérifier que le dossier source existe bien.If fso.FolderExists(sFolderName) Then' Récupérer l'instance du dossier.Set fd = fso.GetFolder(sFolderName)sTemp = fd.Drive & "\" & sNewName' Vérifier que le dossier cible n'existe pas déjà.If fso.FolderExists(sTemp) ThenMsgBox "Ce nom de dossier existe déjà!"Elsefd.Name = sNewNameMsgBox "Le dossier " & sFolderName & " a été renommé!"End If

Page 35: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

ElseMsgBox "Dossier non trouvé!"End IfEnd Sub

Comment rechercher les fichiers XLB et en avoir la liste?

Valable pour toutes sortes de fichiers aussi !

Sub ChercheXLB()typeFile = InputBox("Quel type de fichier? " & Chr(13) & "Taper l'extension ! Ex: xlB")Worksheets.AddActiveSheet.Name = "Liste des fichiers" & " " & typeFile[A1].Value = "Liste des fichiers" & " " & typeFileSelection.Font.Bold = True

Dim LstFile As LongWith Application.FileSearch.Filename = "*." & typeFile.LookIn = "C:\".SearchSubFolders = TrueFor LstFile = 1 To .Execute(msoSortByFileName)ActiveSheet.Cells(LstFile + 1, 1).Value = .FoundFiles(LstFile)Next LstFileEnd WithEnd Sub

Comment ouvrir un fichier TXT,CSV, HTM ... avec le bloc-note (Notepad) ?

Sub OuvreTXT()lanceur = Shell ("C:\windows\notepad.exe c:\ajeter\lefichier.txt", 1)End Sub

'OPTION de FENETRE'vbHide  -   0 -   La fenêtre est masquée et activée.'vbNormalFocus -   1 -  La fenêtre est rétablie à sa taille et à sa position d'origine.'vbMinimizedFocus -  2 -   La fenêtre est affichée sous forme d'icône et activée.'vbMaximizedFocus -  3 -   La fenêtre est agrandie et activée.'vbNormalNoFocus -  4 -   La fenêtre est rétablie à sa taille et à sa position les plus récentes'vbMinimizedNoFocus -   6 -   La fenêtre est affichée sous forme d'icône.

Ce fichier existe-t'il ?

Sub Existe()If Dir$("c:\ajeter\test.xls") = "" ThenMsgBox " Pas trouvé ce fichier :O("ElseMsgBox " OK ! Trouvé :O)"

Page 36: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

End IfEnd Sub

Les Feuilles

Nomme la feuille active avec la valeur de la plage A2

Sub NomOnglet()Dim Name As StringName = Range("A2")Application.ScreenUpdating = FalseActiveSheet.Name = (Name)End Sub

Pour toutes les feuilles

For i = 1 To Sheets.CountWith Sheets(i).Select.Name = [A2]End WithNext i

Trie les onglets des feuilles d'un fichier excel par ordre alphabétique. Première!

Type performant de procédure    ;O) à Laurent...

Sub TrieFeuilles()Dim I As IntegerDim J As IntegerDim Min As IntegerDim ModeCalcul As IntegerModeCalcul = Application.CalculationApplication.Calculation = xlCalculationManualApplication.ScreenUpdating = FalseWith ActiveWorkbook.WorksheetsFor I = 1 To .Count - 1Min = IFor J = I + 1 To .CountIf .Item(J).Name < .Item(Min).Name Then Min = JNext JIf Min <> I Then .Item(Min).Move before:=Worksheets(I)Next IEnd WithApplication.Calculation = ModeCalculApplication.ScreenUpdating = TrueEnd Sub

Page 37: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Trie les onglets des feuilles d'un fichier excel par ordre alphabétique. Deuxième!

Sub TriChaqueFeuilles()Dim X As VariantDim I As VariantFor Each X In ActiveWorkbook.SheetsFor I = 2 To ActiveWorkbook.Sheets.CountIf Sheets(I - 1).Name > Sheets(I).Name ThenSheets(I - 1).Move After:=Sheets(I)End IfNextNextEnd Sub

Masque les onglets du classeur

Sub MasqueOnglet()With ActiveWindow.DisplayWorkbookTabs = Not .DisplayWorkbookTabsEnd WithEnd Sub

Affiche les onglets du classeur

Sub AfficheOnglet()ActiveWindow.DisplayWorkbookTabs = TrueEnd Sub

2 macros, l'une masque les colonnes et lignes l'autre les affiche.

Sub MasqueColonneLigne()On Error Resume NextApplication.ScreenUpdating = FalseNumligne = InputBox(Prompt:="Taper les numéros de lignes. ( Ex. 8:12 - Maxi = 65536)")NumColonne = InputBox(Prompt:="Taper les numéros de colonnes. ( Ex. J:D - Maxi = IV )")Rows(Numligne).SelectSelection.EntireRow.Hidden = TrueColumns(NumColonne).SelectSelection.EntireColumn.Hidden = TrueEnd Sub

Sub AfficheLigneColonne()[A:IV].SelectSelection.EntireRow.Hidden = FalseSelection.EntireColumn.Hidden = FalseCells(1, 1).SelectEnd Sub

Page 38: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

2 macros, l'une masque les en-têtes de ligne et colonne l'autre les affiche

Sub MsqEntetLigCol()'masque les en-têtes de ligne et colonneActiveWindow.DisplayHeadings = FalseEnd Sub

Sub EntetLigCol()'affiche les en-têtes de ligne et colonneActiveWindow.DisplayHeadings = TrueEnd Sub

Insere le chemin d'accés dans le pied de page.

Sub CustomFooter()'Inserts the file name and path into the page footer'for each sheet in the active workbookFor Each sht In ActiveWorkbook.Sheetssht.PageSetup.LeftFooter = ActiveWorkbook.FullNameNext shtEnd Sub

Donne le nom de chaque feuille du classeur.

Sub FeuilleMSG()Dim Lst() As StringDim I As IntegerReDim Lst(Sheets.Count - 1)For I = 0 To Sheets.Count - 1Lst(I) = Sheets(I + 1).NameMsgBox Lst(I)Next IEnd Sub

Insére 12 feuilles et les nomme suivant les 12 mois de l'année.

Sub NomFeuilMois()For I = 1 To 12ActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)ActiveSheet.Name = Format(30 * I, "mmmm")Next IEnd Sub

Page 39: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Supprime les feuilles vides du classeur

Sub DelFeuilleVide()Set LaCell = ActiveCellSet MaFeuille = ActiveWorkbook.ActiveSheetOn Error Resume NextFor Each x In ActiveWorkbook.Worksheetsx.ActivateSelection.SpecialCells(xlLastCell).SelectLeTestFeuil = FalseFor Each y In ActiveSheet.DrawingObjectsLeTestFeuil = TrueExit ForNextIf ActiveCell.Address = "$A$1" And IsEmpty(ActiveCell) And LeTestFeuil = False ThenApplication.DisplayAlerts = Falsex.DeleteApplication.DisplayAlerts = TrueEnd IfNext xMaFeuille.ActivateLaCell.SelectEnd Sub

Insère une feuille nommée Liste des feuilles et crée le sommaire du classeur.

Sub ListeFeuilles()Application.ScreenUpdating = FalseApplication.DisplayAlerts = FalseSet ArrFeuil = Sheets("Liste des feuilles")ArrFeuil.Cells(1, 1).Value = "Tableau des feuilles"For i = 2 To ActiveWorkbook.Sheets.CountArrFeuil.Cells(i, 1).Value = Sheets(i).NameNext iApplication.DisplayAlerts = TrueAlerte = TrueApplication.ScreenUpdating = TrueEnd Sub

Insère une feuille et liste les feuilles sour forme de liens hypertextes.

Sub LstSheetHyperlink()Set newfeuille = ActiveWorkbook.Sheets.Add(Type:=xlWorksheet)For i = 1 To Sheets.Countnewfeuille.Cells(i, 1).Value = Sheets(i).NameWith Worksheets(newfeuille.Name)ActiveSheet.Hyperlinks.Add Anchor:=.Cells(i, 1), Address:="", SubAddress:= _Chr(39) & Sheets(i).Name & Chr(39) & "!A1" End With

Page 40: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Next iEnd Sub

Change le nom de la feuille active avec le texte du Presse Papier

Sub NomFeuilClipboard()Dim FeuilObj As New DataObjectFeuilObj.GetFromClipboardActiveSheet.Name = FeuilObj.GetText(1)End Sub

Insère des feuilles et les nomme suivant une liste

Créez une liste de noms et sélectionnez la avant de lancer la macro

Sub FeuilViaLst() Dim Mycell As Range, Mysheet As Worksheet, MyName$For Each Mycell In Selection 'liste de nomsMyName = Mycell.ValueIf MyName <> "" ThenOn Error Resume NextSet Mysheet = Sheets(MyName)On Error GoTo 0If Mysheet Is Nothing Then Sheets.Add.Name = MyNameEnd IfNext MycellEnd Sub

et pour les supprimer

Sub DelFeuilViaLst()Dim Mycell As Range, Mysheet As Worksheet, MyName$Application.DisplayAlerts = FalseFor Each Mycell In Selection 'liste de nomsMyName = Mycell.ValueIf MyName <> "" ThenOn Error Resume NextSet Mysheet = Sheets(MyName)On Error GoTo 0If Not Mysheet Is Nothing Then Sheets(MyName).DeleteEnd IfNext MycellEnd Sub

Page 41: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Tout changement du contenu d'une cellule A1 dans une feuille du classeurmodifiera automatiquement le nom de la feuille.

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Excel.Range)If Target.Address = "$A$1" Then Sh.Name = TargetEnd Sub

Pour revenir à la feuille "Sommaire" lors d'un click sur l'onglet.

Programmer un événement Worksheet_Activate sur la feuille en question

Private Sub Worksheet_Activate()ThisWorkbook.Worksheets("Sommaire").ActivateEnd Sub

Protége toutes les feuilles du classeur.

Sub ProtectFeuil()Dim sht As WorksheetDim MotPassMotPass = InputBox("Taper un mot de passe", 2)

For Each sht In ActiveWorkbook.Worksheetssht.Protect Password:=(MotPass), Contents:=True, _DrawingObjects:=True, Scenarios:=TrueNext shtEnd Sub

Sub UnProtectFeuil()Dim sht As WorksheetFor Each sht In ActiveWorkbook.Worksheetssht.UnprotectNext shtEnd Sub

Ajout spécial XP: AllowFormattingCells:=True, AllowSorting:=True

Sub ProtectFeuilXP()Dim sht As WorksheetDim MotPassMotPass = InputBox("Taper un mot de passe", 2)

For Each sht In ActiveWorkbook.Worksheetssht.Protect Password:=(MotPass), Contents:=True, _DrawingObjects:=True, Scenarios:=True, _AllowFormattingCells:=True, AllowSorting:=TrueNext shtEnd Sub

Page 42: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Quel est le type d'objet sélectionné ?

Sélectionner un objet sur la feuille "Feuil1"

Sub TypeObjet()Worksheets("Feuil1").ActivateMsgBox "Type d'objet sélectionné " & TypeName(Selection)End Sub

Compte le nombre de page

Sub LstNbsautPage()'Sans saut de page verticalMsgBox ActiveSheet.HPageBreaks.Count + 1'+1 pour avoir le nb de pagesEnd Sub

'Ajoute un saut de page horizontal au-dessus de la cellule active.ActiveSheet.HPageBreaks.Add Before:=ActiveCell

'Ajoute un saut de page vertical à gauche de la cellule active.ActiveSheet.VPageBreaks.Add Before:=ActiveCell

Cherche une feuille et l'active

Sub cherche()Dim maFeuil As StringOn Error GoTo GestErreurmaFeuil = InputBox(Prompt:="Taper le nom de la feuille recherchée. ")Sheets(maFeuil).SelectRange("a1").SelectExit SubGestErreur:MsgBox "Cette feuille n'existe pas !"End Sub

Chaque jour de l'année = une feuille (soit 365 feuilles)

Sub Calendjourfeuille()Application.ScreenUpdating = Falseannée = Val(InputBox("Quelle année ?"))If année = 0 Then Exit Subx = DateSerial(année, 1, 1)Y = DateValue("31 décembre " & année)For I = 0 To Y - xActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)ActiveSheet.Name = Format(x + I, "dd-mmm-yyyy")NextEnd Sub

Page 43: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Chaque jour du mois = une feuille

Sub CalendParJourduMois()Application.ScreenUpdating = False

'Date de début du mois en coursvardate = DateSerial(Year(Now), Month(Now), 1)

'nombre de jour du mois en coursvarnb = Day(DateSerial(Year(Now), Month(Now) + 1, 0)) - 1

For I = 0 To varnbActiveWorkbook.Sheets.Add after:=Worksheets(Worksheets.Count)ActiveSheet.[A1] = vardate + IActiveSheet.Name = Format([A1], "dddd dd mmmm yy")Next IEnd Sub

En A1 le nom de la feuille

Sub A1nomfeuil()Application.ScreenUpdating = FalseFor Each x In ActiveWorkbook.Sheetsx.Activate[A1] = ActiveSheet.NameNextEnd Sub

Supprime toutes les feuilles sauf la feuille "Liste"

Sub SupFeuille()Application.DisplayAlerts = FalseFor I = Sheets.Count To 1 Step -1If Sheets(I).Name = "Liste" ThenElseSheets(I).DeleteEnd IfNextEnd Sub

ou bien

Sub SupFeuille2()Application.DisplayAlerts = FalseDim W As WorksheetFor Each W In ActiveWorkbook.WorksheetsIf W.Name = "liste" ThenElse: W.DeleteEnd If

Page 44: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Next WEnd Sub

Calcule la somme des cellules D2 de toutes les feuilles

Sub CalculSum()Application.ScreenUpdating = FalseFor Each feuille In ActiveWorkbook.Sheetsfeuille.Activatetot = [D2]result = result + totNext MsgBox resultEnd Sub

Masque les lignes vides de la feuille et imprime la zone en cours

Sub imprSansLigneVide()For Each Ligne In ActiveSheet.UsedRange.RowsIf Ligne.Cells(1, 1).Value = Empty Then'si la cellule de la colonne A est vide, la ligne est masquéeLigne.EntireRow.Hidden = TrueEnd IfNext'Recherche de la derniere celluleActiveCell.SpecialCells(xlLastCell).Selectdercell = ActiveCell.Address

'definition de la zone d'impressionzoneIMP = Range("A1", dercell).Address

ActiveSheet.PageSetup.PrintArea = zoneIMPActiveWindow.SelectedSheets.PrintOut Copies:=1End Sub

 

Liste les feuilles dans la colonne A

Sub lstFeuille()x = 0Worksheets(1).ActivateFor Each s In ActiveWorkbook.Sheetsx = x + 1Cells(x, 1) = s.NameNextEnd Sub

 

Page 45: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Les Impressions

Imprime chaque fiche (fiche =plage G1:K18) des feuilles(5 à 42) du classeur

Sub ImprimFiche()Msg = "Voulez-vous vraiment imprimer TOUTES les fiches ?"Style = vbYesNo + vbCritical + vbDefaultButton1Title = "IMPRESSION DES FICHES"Réponse = MsgBox(Msg, Style, Title)If Réponse = vbYes ThenGoTo continuElseExit SubEnd Ifcontinu:Dim mafeuille As ObjectApplication.ScreenUpdating = FalseSet monTab = Worksheets(Array(5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, _23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42))For Each mafeuille In monTabmafeuille.SelectActiveSheet.PageSetup.PrintArea = "$G$1:$K$18"ActiveWindow.SelectedSheets.PrintOut Copies:=1NextEnd Sub

Imprime un nombre définit de formulaires et incrémente le numéro du formulaire.

Sub ImprimFormulaire()Dim CellParaRange("A2") = Application.InputBox(prompt:="Taper le nombre de copies que vous désirez.", Type:=1)For CellPara = 1 To Range("A2")Range("E13").Value = Range("E13").Value + 1ActiveSheet.PageSetup.PrintArea = "$A$5:$I$24"ActiveWindow.SelectedSheets.PrintOut Copies:=1NextEnd Sub

Lance une impression à l'heure donnée.

Sub ProgrammeLaMacroTime()' lance MacroImpression à 10h25 heuresApplication.OnTime TimeValue("10:25:00"), "MacroImpression", , TrueEnd Sub

Page 46: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Sub MacroImpression()'cette macro imprime la feuille Feuil1ThisWorkbook.Sheets("Feuil1").PrintOutEnd Sub

Défini une zone d'impression et un titre.

Inscriver un titre dans la cellule A1et taper quelques valeurs dans la zone A10:G15

Sub ImpZoneEtTitle()With Worksheets("Feuil1").PageSetup.CenterHorizontally = True.PrintArea = "$A$10:$G$15".PrintTitleRows = ("$A$1:$A$2").Orientation = xlPortrait.FitToPagesWide = 1.FitToPagesTall = 1End WithWorksheets("Feuil1").PrintOutEnd Sub

Comment récupérer l'adresse de la zone d'impression?

Sub Recupzone()Set zoneIMP = Range(ActiveSheet.PageSetup.PrintArea)MsgBox zoneIMP.Address()End Sub

Comment interdire l'impression d'un classeur?

Private Sub Workbook_BeforePrint(Cancel As Boolean)Cancel = TrueMsgBox ("Vous n'avez pas l'autorisation d'imprimer ce classeur")End Sub

Comment connaître le nombre de pages à imprimer?

Sub Nbpages()NbdePages = Application.ExecuteExcel4Macro("GET.DOCUMENT(50)")End Sub

Ouvre un fichier et l'imprime automatiquement

Private Declare Function ShellExecute Lib "shell32.dll" Alias _"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal _

Page 47: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As _String, ByVal nShowCmd As Long) As Long

Private Const SW_SHOWNORMAL As Long = 1

Sub Imprim()Dim oFile As StringApplication.ScreenUpdating = False'imprime le fichier test.txtoFile = "C:\ajeter\test.txt"ShellExecute hwnd, "print", oFile, vbNullString, vbNullString, SW_SHOWNORMALEnd Sub

Les Médias

Joue un son Wav

Declare Function sndPlaySound32 Lib "winmm.dll" Alias "sndPlaySoundA" _(ByVal lpzSoundName As String, ByVal uFlags As Long) As Long

Sub Musique()If Application.CanPlaySounds ThenCall sndPlaySound32("D:\Sons\Vinyl\creedenc.wav", 0)

Changer le chemin...("D:\.....", 0)

End IfEnd Sub

Ouvre et ferme le lecteur de CD

Declare Sub mciSendStringA Lib "winmm.dll" (ByVal lpstrCommand As String, _ByVal lpstrReturnString As Any, ByVal uReturnLength As Long, _ByVal hwndCallback As Long)

Sub Ouvre()mciSendStringA "Set CDAudio Door Open", 0&, 0, 0End Sub

Sub Ferme()mciSendStringA "Set CDAudio Door Closed", 0&, 0, 0End Sub

Teste s'il existe un lecteur de CD

Private Declare Function GetDriveTypeA Lib "Kernel32" _(ByVal nDrive As String) As Long

Page 48: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Sub TestCD()Dim I As IntegerFor I = 65 To 91If GetDriveTypeA(Chr$(I) & ":\") = 5 Then Exit ForNext IIf I = 92 Then MsgBox "Aucun lecteur de CD-ROM détecté." _Else MsgBox "Lecteur détecté sur " & Chr$(I) & ":"End Sub

Sub ShowStars()Cells.SelectSelection.Interior.ColorIndex = 1Range("A1").SelectRandomizeStarWidth = 35StarHeight = 35For i = 1 To 10TopPos = Rnd() * (ActiveWindow.UsableHeight - StarHeight)LeftPos = Rnd() * (ActiveWindow.UsableWidth - StarWidth)Set NewStar = ActiveSheet.Shapes.AddShape _(msoShape4pointStar, LeftPos, TopPos, StarWidth, StarHeight)NewStar.Fill.ForeColor.SchemeColor = Int(Rnd() * 56)Application.Wait Now + TimeValue("00:00:01")DoEventsNext iApplication.Wait Now + TimeValue("00:00:02")Set myShapes = Worksheets(1).ShapesFor Each shp In myShapesIf Left(shp.Name, 9) = "AutoShape" Thenshp.DeleteApplication.Wait Now + TimeValue("00:00:01")End IfNextCells.SelectSelection.Interior.ColorIndex = 2Range("A1").SelectEnd Sub

Joue un son MP3.

Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _(ByVal lpstrCommand As String, ByVal lpstrReturnString As String, _ByValuReturnLength As Long, ByVal hwndCallback As Long) As Long

Public Declare Function GetShortPathName Lib "kernel32" Alias _"GetShortPathNameA" (ByVal lpszLongPath As String, ByVal lpszShortPath As _String, ByVal cchBuffer As Long) As Long

Sub LanceMP3()X = ThisWorkbook.PathjoueMP3 (X & "\monfichier.mp3")End Sub

Page 49: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Public Sub joueMP3(ByVal Mp3 As String) Dim Tmp As Long, Tmp2 As String'Screen.MousePointer = vbHourglass

Tmp2 = NomCourt(Mp3)Tmp = mciSendString("close MP3_Device", vbNullString, 0&, 0&)Tmp = mciSendString("open " & Tmp2 & " type MPEGVideo alias MP3_Device", _vbNullString, 0&, 0&)If Tmp = 0 ThenTmp = mciSendString("play Mp3_Device", vbNullString, 0&, 0&)

If Tmp <> 0 ThenScreen.MousePointer = 0MsgBox "Incapable de jouer ce Mp3"'Else' Tmp = mciSendString("close MP3_Device", vbNullString, 0&, 0&)End IfElse'Screen.MousePointer = 0MsgBox "Incapable de jouer ce Mp3"End If

'Screen.MousePointer = 0End Sub

Public Sub StopMP3()Dim Tmp As LongTmp = mciSendString("close MP3_Device", vbNullString, 0&, 0&)End Sub

Private Function NomCourt(ByVal Fichier As String) As StringDim Tmp As String * 255, Tmp2 As ByteTmp2 = GetShortPathName(Fichier, Tmp, Len(Tmp))

If Tmp2 > 0 ThenNomCourt = Left(Tmp, Tmp2)End IfEnd Function

Sélectionne un fichier image et l'insère dans la feuille active

Sub insertImg()Dim fichImgfichImg = Application.GetOpenFilename("Fichier image(*.gif;*.jpg;*.bmp),*.gif;*.jpg;*.bmp" _, , "Choix de l'image", , False) 'false selection simpleIf fichImg = False Then Exit SubActiveSheet.Pictures.Insert(fichImg).SelectEnd Sub

Page 50: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Un trombinoscope via les commentaires

Dans les cellules A1:A10 entrez une liste de noms correspondant à des portraits (par ex.) Cette liste de noms doit correspondre à une liste de fichiers "JPG" situés dans le même dossier que votre classeur.Sélectionnez la zone A1:A10 et executez la macro "imgComment".Au passage de la souris sur ces cellules les portraits s'afficheront dans les commentaires de cellules

Sub imgComment()Dim nom$On Error Resume NextFor Each C In Selectionnom = C.ValueWith C.AddComment.Comment.Shape.Fill.UserPicture ActiveWorkbook.Path & "\" & nom & ".jpg"End WithNextEnd Sub

Insère une image dans une cellule

Une image est insérée en C10Le nom de l'image est recuperée dans la cellule B10(nom = Selection.Offset(0, -1).Value) ex : photo1 sans l'extension.(fichimg = ActiveWorkbook.Path & "\" & nom & ".jpg")

L'image est dans le même dossier que le classeur (ActiveWorkbook.Path)

La largeur de l'image correspondra à la largeur de la cellule C10.(With ActiveWindow , y = .Selection.Width , End With)(Selection.ShapeRange.Width = y)

Sub InserImage()Dim nom$Dim fichimg$

[C10].Select

With ActiveWindowy = .Selection.WidthEnd With

On Error Resume Nextnom = Selection.Offset(0, -1).Valuefichimg = ActiveWorkbook.Path & "\" & nom & ".jpg"ActiveSheet.Pictures.Insert(fichimg).SelectSelection.ShapeRange.Width = yEnd Sub

Page 51: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Les Messages

Affiche un message avec un bouton OUI et un bouton NON

Sub Message()msg = "Voulez-vous continuer ?"

' Définit le message.

Style = vbYesNo + vbDefaultButton1

'Définit les boutons.

Title = "Bonjour !"

' Définit les titres.

Réponse = MsgBox(msg, Style, Title)If Réponse = vbYes Then

' Vous avez choisi le bouton « Oui ».

Set MaSélection = Application.ActiveCellMaSélection.Value = 100Else

'Vous avez choisi le bouton Non.

Range("A1:b2").Select ' Accomplit une autre chose.End IfEnd Sub

Inscrit un message dans la barre d'état pendant l'exécution d'une macro

Sub MsgBarreEtat()barreEtatEnregistrée = Application.DisplayStatusBarApplication.DisplayStatusBar = TrueApplication.StatusBar = "Création du tarif catalogue.....Veuillez patienter, SVP....."

'....exécution d'une macro (généralement long).....

Application.Wait Now + TimeValue("00:00:04")Application.StatusBar = FalseApplication.DisplayStatusBar = barreEtatEnregistréeEnd Sub

Page 52: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Donne l'heure

Sub MsgHeure()mheure = TimeMsgBox ("Il est: " & mheure)End Sub

Quelques trucs sur les boutons des messages

'Indique un message d'information

Sub msg1()MsgBox "Test MSG1", vbInformation, "Information fichier"End Sub

'Idem avec la valeur 64

Sub msg11()MsgBox "Test MSG11", 64, "Information fichier"End Sub

'Indique un message d'exclamation

Sub msg2()MsgBox "Test MSG2", vbExclamation, "Information fichier"End Sub

'Idem avec la valeur 48

Sub msg22()MsgBox "Test MSG22", 48, "Information fichier"End Sub

'En plus clair

Sub msg3()MsgBox prompt:="Il est l'heure de votre RDV", _Buttons:=vbExclamation, Title:="ATTENTION"End Sub

 

Tableau des valeurs renvoyées

Constante Valeur Bouton choisi

vbOKOnly 0 Bouton OK uniquement (valeur par défaut)

vbOKCancel 1 Boutons OK et Annuler

vbAbortRetryIgnore 2 Boutons Abandonner, Répéter et Ignorer

vbYesNoCancel 3 Boutons Oui, Non et Annuler

Page 53: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

vbYesNo 4 Boutons Oui et Non

vbRetryCancel 5 Boutons Répéter et Annuler

vbCritical 16 Message critique

vbQuestion 32 Requête d'avertissement

vbExclamation 48 Message d'avertissement

vbInformation 64 Message d'information

vbDefaultButton1 0Le premier bouton est le bouton par défaut (valeur par défaut)

vbDefaultButton2 256 Le deuxième bouton est le bouton par défaut

vbDefaultButton3 512 Le troisième bouton est le bouton par défaut

vbDefaultButton4 768 Le quatrième bouton est le bouton par défaut

vbMsgBoxHelpButton 16384 Ajoute le bouton Aide à la boîte de dialogue

 

Comment faire un saut de ligne ?

Sub msg3()MsgBox "Après ceci... " & Chr(13) & "un saut de ligne"

'ou bien avec la constante

MsgBox "Après ceci..." & vbCrLf & "un saut de ligne" End Sub

'Quelques constantes

vbCr     Chr(13)    Caractère de saut de paragraphevbLf     Chr(10)    Caractère de saut de lignevbTab   Chr(9)     Caractère de tabulationvbBack   Chr(8)    Caractère de retour arrière

 

Les Spéciales

Formate une disquette

Sub FormatageDSK()ValRetour = Shell("C:\WINDOWS\RUNDLL32.EXE shell32,SHFormatDrive", 1)End Sub

Change le label d'une disquette

Declare Function SetVolumeLabel Lib "kernel32" Alias "SetVolumeLabelA" _(ByVal lpRootPathName As String, ByVal lpVolumeName As String) As Long

Page 54: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Sub NommeDSK()retval = SetVolumeLabel("a:\", "MaDisquette")

'pour supprimer le label'retval = SetVolumeLabel("a:\", vbNullString)End Sub

Lance un test d'imprimante

Sub LanceTestImp()ValRetour = Shell("C:\WINDOWS\RUNDLL32.EXE msprint2.dll,RUNDLL_PrintTestPage", 1)End Sub

Liste les fichiers excel de c:\ dans le fichier dirxls.xls

'liste les fichiers excel de c:\ Par repertoire Nb de fichiers et taille totale'à la façon du dir de DOS

Sub Dirxls()Shell "command.com /c dir c:\*.xls /W/O/S >C:\ajeter\dirxls.xls", vbHideEnd Sub

'liste les fichiers excel de c:\ dans une simple liste

Sub Dirxls2()Shell "command.com /c dir c:\*.xls /s/b >C:\ajeter\dirxls.xls", vbHideEnd Sub

Imprime la liste de vos favoris en ex&eacutecutant un fichier BAT (commande DOS)

Sub ImpFichier()Shell "C:\outil\printfav.bat"End Sub

'listing de printfav.bat'à copier dans le bloc-note et à enregistrer sous le nom de "printfav.bat" dans le répertoire C:\outil

@ ECHO OFFECHO Programme d'impression de la liste des FavorisECHO.ECHO.@ECHO ********* QUE SOUHAITEZ-VOUS FAIRE ? ***********@ECHO. @ECHO A: Impression de la liste des favoris.@ECHO B: Quitter le programme.@ECHO.@ECHO.

Page 55: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

CHOICE /C:AB Choisir A (Impression), B (Annuler)ECHO.IF ERRORLEVEL 2 GOTO FINIF ERRORLEVEL 1 GOTO imp

: impdir "c:\windows\favoris" /s /b /l > c:\favori.wriwrite c:\favori.wri /p del c:\favori.wri /p GOTO FIN: FINECHO.@ECHO Terminer @ECHO.@ECHO "Cliquer sur la petite croix pour fermer."

Pour fermer la fenêtre DOS automatiquement

il faut ajouter COMMAND.COM /C à la commande SHELL

Sub Exemple()Shell ("command.com /C C:\outil\printfav.bat")End Sub

Lance Explorer en version minimale

Sub LanceExplore()ValRetour = Shell("C:\WINDOWS\RUNDLL32.EXE shell,shellexecute", 1)End Sub

Lance Explorer et ouvre un dossier

Sub ExplorerDossier()Shell "C:\WINDOWS\EXPLORER.EXE /n,/e,D:\FichXls", vbMaximizedFocusEnd Sub

Masque et affiche la barre de tâche windows(97 - XP)

Option Explicit

Dim handleW1 As Long

Private Declare Function FindWindowA Lib "user32" _(ByVal lpClassName As String, _ByVal lpWindowName As String) As Long

Private Declare Function SetWindowPos Lib "user32" _

Page 56: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

(ByVal handleW1 As Long, _ByVal handleW1InsertWhere As Long, ByVal w As Long, _ByVal x As Long, ByVal y As Long, ByVal z As Long, _ByVal wFlags As Long) As Long

Const TOGGLE_HIDEWINDOW = &H80Const TOGGLE_UNHIDEWINDOW = &H40

Sub masque()handleW1 = FindWindowA("Shell_traywnd", "")Call SetWindowPos(handleW1, 0, 0, 0, 0, 0, TOGGLE_HIDEWINDOW)End Sub

Sub affiche()Call SetWindowPos(handleW1, 0, 0, 0, 0, 0, TOGGLE_UNHIDEWINDOW)End Sub

Ferme windows

Sub WinExit() 'marche bien sous XPWith CreateObject("Shell.Application").ShutdownWindowsEnd WithEnd Sub

Sub ExitWindows9598() ValRetour = Shell("C:\WINDOWS\rundll32.exe user.exe,exitwindows")End Sub

Sub RedemarWindows98() ValRetour = Shell("C:\WINDOWS\Rundll32.exe shell32,SHExitWindowsEx")End Sub

Ouvre Internet Explorer

Sub LanceIE()Dim IE As ObjectSet IE = CreateObject("InternetExplorer.Application")IE.Navigate "http://dj.joss.free.fr"IE.AddressBar = TrueIE.MenuBar = TrueIE.Toolbar = TrueIE.Width = 800IE.Height = 600IE.Resizable = TrueIE.Visible = TrueSet IE = NothingEnd Sub

Page 57: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Comment lancer la calculette et l'avoir toujours à l'écran ?

Private Declare Function FindWindow Lib "user32" _Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPrivate Declare Function SetWindowPos Lib "user32" _(ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, _ByVal wFlags As Long) As LongPrivate Const HWND_TOPMOST = -1Private Const SWP_NOSIZE = &H1Private Const SWP_NOMOVE = &H2Private Const SWP_SHOWWINDOW = &H40

     

Les Tests

Pas plus de 10 caractères dans la cellule

Sub testNbCaractere()CellTest = Range("a1").ValueIf Len(CellTest) > 10 ThenMsgBox "Pas plus de 10 caractères", vbOKOnly, "Erreur de caractères"Exit SubEnd IfEnd Sub

Pas de caractères spéciaux dans la cellule

Sub testCaractereSpeciaux()CellTest = Range("B1").Value

Page 58: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

For x = 1 To Len(CellTest)Car = Mid(CellTest, x, 1)If Car = ":" Or Car = "!" Or Car = "-" Or Car = "/" Or Car = " " _Or Car = "." Or Car = ";" Or Car = "," Or Car = "\" ThenMsgBox "Pas de caractères spéciaux", vbOKOnly, "Erreur de caractères"Exit SubEnd IfNextEnd Sub

Selon la valeur du nombre

Sub SelonCas()Nombre = ActiveCell.ValueSelect Case Nombre

Case 1 To 5Range("A1").Value = 0

Case 6, 7, 8, 9, 10Range("A1").Value = 1

Case Else Range("A1").Value = 1000

End SelectEnd Sub

Teste la saisie dans une InputBox

Sub testSaisie()Dim saisie As StringDo While saisie = ""saisie = InputBox("Entrez une valeur")LoopEnd Sub

Teste si une touche a été tapée pendant l'éxecution d'une macro.

Lors de l'exécution d'une macro Excel ne teste pas l'utilisation du clavier(sauf Echap)

Declare Function GetAsyncKeyState Lib "User32" _(ByVal vKey As Integer) As Integer

'GetAsyncKeyState est asynchrone - La touche est mémorisée

Sub testToucheA()For y = 1 To 10000Application.StatusBar = y

Page 59: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Next

If (GetAsyncKeyState(65) <> 0) ThenMsgBox "Touche A frappée."End If End Sub

a ou A = 65b ou B = 66 ...etc jusqu'à z ou Z = 90Espace =32

Teste une valeur avec IsNumeric, IsDate et IsEmpty

Utilise la fonction IsNumeric pour tester si une valeur est numérique ou non.

Sub Valeurnum()Dim MaValeur, MaValeur2, MonTest, MonTest2

MaValeur = "4578"MonTest = IsNumeric(MaValeur) 'Retourne VraiMsgBox MonTest

MaValeur = "4578,456"MonTest = IsNumeric(MaValeur) 'Retourne VraiMsgBox MonTest

MaValeur2 = "daniel"MonTest2 = IsNumeric(MaValeur2) 'Retourne FauxMsgBox MonTest2End Sub

Utilise la fonction IsDate pour tester si une valeur est une date.

Sub ValeurDate()Dim MaDate, NonDate, TestDate, TestDate2

MaDate = "02 Mai 2002": NonDate = "Daniel"TestDate = IsDate(MaDate) 'Retourne VraiMsgBox TestDate

TestDate2 = IsDate(NonDate) 'Retourne FauxMsgBox TestDate2End Sub

Utilise la fonction IsEmpty pour tester si une valeur est vide ou non vide.

Sub TestValeurVide()Dim MaValeur, MonTest

Page 60: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

MaValeur = Empty 'il y a une valeurMonTest = IsEmpty(MaValeur) ' Test si ma valeur est videMsgBox MonTest 'Retourne Vrai

MaValeur = Null 'il n'y a pas de valeurMonTest = IsEmpty(MaValeur)' Test si ma valeur est vide (EstVide)MsgBox MonTest 'Retourne Faux

MaValeur = Null 'il n'y a pas de valeurMonTest = Not IsEmpty(MaValeur) ' Test si ma valeur n'est pas vide (Non EstVide)MsgBox MonTest 'Retourne VraiEnd Sub

Teste si une macro complémentaire est installée ou non

Ici l'utilitaire d'analyse

Sub testUtilitAnalyse()If AddIns("Utilitaire d'analyse").Installed = True ThenMsgBox "Utilitaire d'analyse installé"Else

MsgBox "Utilitaire d'analyse non installé"End IfEnd Sub

affiche la liste des compléments

Sub afficheComplement()For Each a In AddInsMsgBox a.FullNameNext aEnd Sub

Teste si une cellule est vide ou non vide

Teste et sélectionne les cellules vides de la zone A1:A10

Sub testCelluleVide()[A1:A10].SpecialCells(xlCellTypeBlanks).SelectEnd Sub

Teste et sélectionne les cellules contenant une formuleSub testCelluleformule()[A1:A10].SpecialCells(xlCellTypeFormulas).SelectEnd Sub

Page 61: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Teste et sélectionne les cellules contenant un nombreSub testCellule3()[A1:A10].SpecialCells(xlCellTypeConstants, 1).Select' 2 ème argument =1 (nombre)End Sub

Teste et sélectionne les cellules contenant du texteSub testCelluleText()[A1:A10].SpecialCells(xlCellTypeConstants, 2).Select' 2 ème argument =2 (texte)End Sub

Teste et sélectionne les cellules contenant soit du texte soit une valeurSub testCellule()[A1:A10].SpecialCells(xlCellTypeConstants, 3).Select' 2 ème argument =3 (texte+nombre)End Sub

Teste et sélectionne les cellules contenant un commentaireSub testCelluleText()[A1:A10].SpecialCells(xlCellTypeComments).SelectEnd Sub

Teste si l'option "Déplacement après validation est cochée"Outils>Options>Modifications : "Deplace la sélection après validation"

Sub testDeplacementValidation()If Application.MoveAfterReturn = True ThenMsgBox "Le déplacement après validation est activé"ElseMsgBox "Le déplacement après validation est désactivé"End IfEnd Sub

Sub testDeplacementValidationDroite()Application.MoveAfterReturn = TrueIf Application.MoveAfterReturnDirection = xlToRight ThenMsgBox "Déplacement à droite"End IfEnd Sub

xlToLeft= gauche, xlToRight= droit, xlUp= en haut, ou xlDown= en bas

Exemple d'utilisation:

Sub TestValeurCell()With ActiveCell

Teste si une chaine de caractere a été saisie dans la cellule active

Page 62: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

If Application.IsNumber(.Value) = False Then.Clear

teste si le déplacement après validation est cochéedans ce cas il faut remonter d'une cellule pour retourner sur la même celluleIf Application.MoveAfterReturn = True ThenActiveCell.Offset(-1).SelectEnd IfEnd IfEnd With'Retour au testActiveSheet.OnEntry = "TestValeurCell"End Sub

Teste la version d'excel et de l'OS

Sub TestVersionXL()

versionXL = Val(Application.Version)

Select Case versionXL

Case 8MsgBox "Excel (97) version " & Application.VersionMsgBox "Excel Version: " & Application.Version & " Build " & Application.Build _& vbCrLf & vbCrLf & Application.OperatingSystem

Case 9MsgBox "Excel (2000) version " & Application.VersionMsgBox "Excel Version: " & Application.Version & " Build " & Application.Build _& vbCrLf & vbCrLf & Application.OperatingSystem

Case 10MsgBox "Excel (2002) version " & Application.VersionMsgBox "Excel Version: " & Application.Version & " Build " & Application.Build _& vbCrLf & vbCrLf & Application.OperatingSystem

Case 11MsgBox "Excel (2003) version " & Application.VersionMsgBox "Excel Version: " & Application.Version & " Build " & Application.Build _& vbCrLf & vbCrLf & Application.OperatingSystem

Case 12 MsgBox "Excel (2007) version " & Application.VersionMsgBox "Excel Version: " & Application.Version & " Build " & Application.Build _& vbCrLf & vbCrLf & Application.OperatingSystem

Case ElseMsgBox "Autre version"End SelectEnd Sub

Page 63: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

 Excel et le WEB

Envoi un Mail: l'adresse est dans la cellule D1, le sujet dans la D2 et le texte dans la D3

'Tester avec Outlook Express 5.

Sub EnvoiUnMail()Dim MailAd As StringDim Msg As StringDim Subj As StringDim URLto As StringMailAd = Range("d1")Subj = Range("d2")Msg = Msg & Range("d3")URLto = "mailto:" & MailAd & "?subject=" & Subj & "&body=" & MsgActiveWorkbook.FollowHyperlink Address:=URLtoEnd Sub

Envoie la feuille 1 par Mail

Sub EnvoiFeuilMail()Dim Wbk As Workbook

ThisWorkbook.Sheets("Feuil1").CopySet Wbk = ActiveWorkbookSendKeys "{E}"Wbk.SendMail "[email protected]", "Feuille du contrat à signer", True'true pour un avis de reception

Wbk.Close savechanges:=FalseSet Wbk = NothingEnd Sub

Envoie le classeur actif à plusieurs destinataires. Plage A1:A10

Vous pouvez ajouter des adresses, il suffit de modifier:la référence de la plage A1:A11la boucle 1 To 11et le tableau Array(myadress(11) etc..

Sub EnvoiClasseurAd()Dim myadress(1 To 10)

Set mylst = ActiveSheet.Range("a1:a10")Count = 1

Page 64: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

For Each Envoi In mylstIf Len(Envoi) Then myadress(Count) = Envoi: Count = Count + 1Next

ActiveWorkbook.SendMail Recipients:=Array(myadress(1), myadress(2), _myadress(3), myadress(4), myadress(5), myadress(6), myadress(7), _myadress(8), myadress(9), myadress(10)), Subject:=" Voilà le classeur demandé"End Sub

Exporte un graphique en image JPG

Sub GraphJPG()Dim MyChart As ChartSet MyChart = ActiveSheet.ChartObjects(1).ChartMyChart.Export FileName:="C:\ajeter\graph1.jpg", filtername:="JPG"End Sub

Exportation en .gif de la plage sélectionnée - Graphique y compris.

Sub exportgif()Dim Plage As RangeSet Plage = Application.InputBox(Prompt:="Sélectionner votre zone: (Ex. A1:B10) ", _Title:="Sélection de zone ", Default:="$A$1", Type:=8)Application.ScreenUpdating = FalseWorkbooks.AddPlage.CopyPictureActiveSheet.PasteWith ActiveSheet.ChartObjects.Add(0, 0, _Selection.Width, Selection.Height).Chart.Paste.Export "C:\ajeter\Test.gif", "GIF"End WithActiveWorkbook.Close FalseEnd Sub

 

Teste si une connection est active

Public Const ERROR_SUCCESS = 0&Public Const APINULL = 0&Public Const HKEY_LOCAL_MACHINE = &H80000002Public ReturnCode As Long

Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As LongDeclare Function RegOpenKey Lib "advapi32.dll" Alias "RegOpenKeyA" _(ByVal hKey As Long, ByVal lpSubKey As String, phkResult As Long) As LongDeclare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" _

Page 65: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

(ByVal hKey As Long, ByVal lpValueName As String, _ByVal lpReserved As Long, lpType As Long, _lpData As Any, lpcbData As Long) As LongPrivate Declare Function InternetAutodial Lib "Wininet" _(ByVal dwFlags As Long, ByVal hwndParent As Long) As LongPrivate Declare Function InternetAutodialHangup Lib "wininet.dll" _(ByVal dwReserved As Long) As Long

Public Function ActiveConnection() As BooleanDim hKey As LongDim lpSubKey As StringDim phkResult As LongDim lpValueName As StringDim lpReserved As LongDim lpType As LongDim lpData As LongDim lpcbData As Long

ActiveConnection = FalselpSubKey = "System\CurrentControlSet\Services\RemoteAccess"ReturnCode = RegOpenKey(HKEY_LOCAL_MACHINE, lpSubKey, phkResult)

If ReturnCode = ERROR_SUCCESS ThenhKey = phkResultlpValueName = "Remote Connection"lpReserved = APINULLlpType = APINULLlpData = APINULLlpcbData = APINULLReturnCode = RegQueryValueEx _(hKey, lpValueName, lpReserved, lpType, ByVal lpData, lpcbData)lpcbData = Len(lpData)ReturnCode = RegQueryValueEx _(hKey, lpValueName, lpReserved, lpType, lpData, lpcbData)

If ReturnCode = ERROR_SUCCESS ThenIf lpData = 0 ThenActiveConnection = FalseElseActiveConnection = TrueEnd IfEnd IfRegCloseKey (hKey)End IfEnd Function

Le test de connection

Sub test() If ActiveConnection = True ThenCall MsgBox("Vous avez une connection active.", vbInformation)Else

Page 66: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Call MsgBox("Vous n'avez pas de connection active.", vbInformation)End IfEnd Sub

Avec XP

Private Declare Function InternetGetConnectedState Lib "wininet.dll" _(ByRef lpSFlags As Long, ByVal dwReserved As Long) As Long

Public Function IsConnectedToInternet(Optional ConnectMode As Integer) As BooleanDim lResult As LongIsConnectedToInternet = InternetGetConnectedState(lResult, 0&)ConnectMode = lResultEnd Function

Sub test2()If IsConnectedToInternet = True ThenCall MsgBox("Vous avez une connection active.", vbInformation)ElseCall MsgBox("Vous n'avez pas de connection active.", vbInformation)End IfEnd Sub

Lance la connection

Private Declare Function InternetAutodial Lib "Wininet" _(ByVal dwFlags As Long, ByVal hwndParent As Long) As LongPrivate Declare Function InternetAutodialHangup Lib "wininet.dll" _(ByVal dwReserved As Long) As Long

Sub Connecte()InternetAutodial 1, 0End Sub

Arrête la connection

Sub DéConnecte()InternetAutodialHangup (0&)End Sub

Envoyer un message avec Outlook Express (testé avec Excel 2003)

La variable Dest contient l'adresse de courrier électronique.La variable Sujt contient le sujet du message.La variable Msg contient le corps du message.

Sub MailAvecOE()Dim Dest As StringDim Sujt As String

Page 67: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Dim Msg As StringDest = "[email protected]"Sujt = "Test d'envoi avec Excel"Msg = "Bonjour, Excel vous envoie un message avec OE"Shell "C:\Program Files\Outlook Express\msimn.exe " & _"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & ""End Sub

Envoyer un message avec un classeur en fichier joint(testé avec Excel 2003)

Sub MailAvecOEClasseur()Dim Dest, Sujt, Msg As StringDim TheFileTheFile = "c:\temp\monfich.xls"Dest = "[email protected]"Sujt = "Test d'envoi avec Excel"Msg = "Bonjour, Excel vous envoie un message et un classeur avec OE"Shell "C:\Program Files\Outlook Express\msimn.exe " & _"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & ""SendKeys "%I" & "p" & TheFile & "~" & "%s"End Sub

Signification des caractères après "SendKeys":* %I et P = Insertion de la pièce jointe dans Outlook Express. (%=Alt)* ~ = Validation. (~=Entrée)* %S = Envoyer.

Comment envoyer une feuille dans un message en VBA?(testé avec Excel 2003)

Sub MailFeuilleOE()Dim Dest, Sujt, Msg As StringDim RepNameActiveSheet.CopyActiveWorkbook.SaveAs Filename:="C:\temp\test.xls"RepName = "C:\temp\test.xls"Dest = "[email protected]"Sujt = "Test d'envoi d'une feuille avec Excel"Msg = "Bonjour, Excel vous envoie une feuille avec OE"Shell "C:\Program Files\Outlook Express\msimn.exe " & _"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & ""SendKeys "%I" & "p" & RepName & "~" & "%s"ActiveWorkbook.CloseEnd Sub

Page 68: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Comment envoyer une plage de cellules dans un message en VBA?(testé avec Excel 2003)

Cette macro envoie la plage A1:A10, vous pouvez évidement modifier cette ligne Range("A1:A10").Copypour envoyer une autre plage de cellules.

Sub EnvoiSelectionparMail()Dim Dest, Sujt, Msg As StringDim TheFileRange("A1:A10").CopyWorkbooks.AddActiveSheet.PasteActiveWorkbook.SaveAs Filename:="C:\temp\test.xls"TheFile = "C:\temp\test.xls"Dest = "[email protected]"Sujt = "Test d'envoi avec Excel"Msg = "Bonjour, Excel vous envoie une plage de cellules avec OE"Shell "C:\Program Files\Outlook Express\msimn.exe " & _"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & ""SendKeys "%I" & "p" & TheFile & "~" & "%s"ActiveWorkbook.CloseEnd Sub

Un message à plusieurs destinataires ( Excel 2003)

La liste des destinaires est dans la plage A1:A10

Sub MailingListe() Dim Dest As StringDim Sujt As StringDim Msg As StringFor Each Lescellules In Range("A1:A10")Dest = Lescellules.ValueSujt = "Test d'envoi avec Excel"Msg = "Bonjour, Excel vous envoie un message avec OE" _& vbNewLine & "Daniel.j"Shell "C:\Program Files\Outlook Express\msimn.exe " & _"/mailurl:mailto:" & Dest & "?subject=" & Sujt & "&Body=" & Msg & ""SendKeys "%s"Next

'et si le texte du message est dans une zone de texte :Msg = Worksheets("le nom de ta feuille").Shapes("Zone de texte 1").TextFrame.Characters.Text

End Sub

Page 69: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Ouvre une page web avec le navigateur par défaut

Private Declare Function ShellExecute Lib "shell32.dll" Alias _"ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal _lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As _String, ByVal nShowCmd As Long) As LongPrivate Const SW_SHOWNORMAL As Long = 1

Sub LanceNavigateurPardefaut()Dim Lurl As StringLurl = "http://dj.joss.free.fr/sommaire.htm"ShellExecute hwnd, "open", Lurl, vbNullString, vbNullString, SW_SHOWNORMALEnd Sub

Ouvre une page web et l'enregistre dans un nouveau classeur

Private Declare Function InternetAutodial Lib "Wininet" _(ByVal dwFlags As Long, ByVal hwndParent As Long) As LongPrivate Declare Function InternetAutodialHangup Lib "wininet.dll" _(ByVal dwReserved As Long) As Long

Sub OuvreHTM()InternetAutodial 1, 0On Error Resume NextWorkbooks.OpenText "http:/dj.joss.free.fr/sommaire.htm", xlWindows, _1, xlDelimited, ConsecutiveDelimiter:=False, Tab:=TrueIf Err Then MsgBox Err.Description: Exit SubOn Error GoTo 0ChDir "C:\ajeter\" 'a modifierActiveWorkbook.SaveAs Filename:="lapage.xls"End Sub

'Arrête la connectionSub DéConnecte()InternetAutodialHangup (0&)End Sub

 Comment créer une userform?

Création

Crée un nouveau classeurAlt F11Sélectionne le classeur dans la liste et Insertion=>UserformL'userform créée est nommée "Userform1" par défaut

Page 70: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

 

Comment afficher l'userform?

Crée un bouton dans la feuille et affecte lui cette macro:

Sub Lance()Load UserForm1UserForm1.ShowEnd Sub

Load pour charger l'userform en mémoire et Show pour l'afficher.Un clique sur la petite croix en haut à droite pour fermer l'userform.

 

Comment fermer l'userform avec un bouton?

Dans l'éditeur VB Si la boîte à outils (Contrôle) n'est pas affichée => Menu Affichage=> Boîte à outilsDans la boîte à outils, clique sur le contrôle "Bouton de commande" et place le sur l'userform

Page 71: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Double-clique sur le bouton, un bout de code s'affiche:

Private Sub CommandButton1_Click()

End Sub

Tape cette instruction "Unload UserForm1"Ce qui donne:

Private Sub CommandButton1_Click()Unload UserForm1End Sub

Retourne à la feuille, lance l'userform et un clique sur ce bouton la fermera.

Excel et WordSi vous ne l'avez pas déjà fait :Dans l'éditeur VB, ajoutez une référence à "Microsoft Word 8.0 Object Library"Menu Outils --> Références

Ouvre Word et le fichier Test.doc

Sub ouvreWord()

spécifier le chemin au cas où...Si vous attribuez la valeur 1 au 2 ème argumentl'application s'ouvre à sa taille normale et devient l'application active.

MyAppID = Shell _("C:\Program Files\Microsoft Office\Office\Winword.EXE D:\ajeter\test.doc", 1)AppActivate MyAppIDEnd Sub

Sub ouvreWord2()

'comme celà...

MyAppID = Shell _("C:\Office\Office\Winword.EXE D:\ajeter\test.doc", 1)AppActivate MyAppIDEnd Sub

Sub ouvrwd97()

'où bien comme celà...avec Office 97

MyAppID = Shell _("C:\Office97\Office\Winword.EXE D:\ajeter\test.doc", 1)

Page 72: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

AppActivate MyAppIDEnd Sub

Ouvre Word et le fichier Test.doc même avec un espace dans le chemin

Sub ouvrwordAvecEspace()

'Lorsqu'il y a un espace dans le nom du repertoire: ajout de " "

MyAppID = Shell("Winword.EXE ""C:\Mes documents\test.doc""", 1)End Sub

Procédure pour écrire dans Word

Sub EcriDansWord()Dim WordObj As ObjectOn Error Resume NextSet WordObj = CreateObject("Word.Application.8")

'Pour afficher Word

WordObj.Visible = True

'Ajoute un document

WordObj.Documents.Add

With WordObj.Selection.TypeParagraph.TypeText Text:="Procédure pour écrire dans Word ".TypeParagraph.TypeText Text:="Daniel :o)".TypeParagraphEnd With

'pour imprimer le document

WordObj.PrintOut Set WordObj = NothingEnd Sub

Procédure pour exécuter une macro de Word (LancerParXL)

'Macro qui, par exemple, ouvre un document et l'imprime

Page 73: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

Sub EcriDansWord()Dim WordObj As ObjectSet WordObj = CreateObject("Word.Application.8")WordObj.Visible = TrueWordObj.Documents.AddWordObj.Run "LancerParXL"End Sub

2 procédures maintenant:La première écrit les commentaires de cellules dans WordLa deuxième écrit les formules. (Auteur=?)

Public Sub PrintCellComments()

Dim Cmt As StringDim C As RangeDim I As IntegerDim WordObj As ObjectDim ws As WorksheetDim PrintValue As BooleanDim res As IntegerOn Error Resume NextErr.Number = 0

res = MsgBox("Voulez-vous éditer les commentaires?", _vbYesNoCancel + vbQuestion, "Edition des commentaires de cellules")Select Case resCase vbCancelExit SubCase vbYesPrintValue = TrueCase ElsePrintValue = FalseEnd SelectSet WordObj = GetObject(, "Word.Application.8")If Err.Number = 429 ThenSet WordObj = CreateObject("Word.Application.8")Err.Number = 0End If

WordObj.Visible = TrueWordObj.Documents.AddWith WordObj.Selection.TypeText Text:="Commentaires dans le classeur: " + ActiveWorkbook.Name.TypeParagraph.TypeText Text:="Date: " + Format(Now(), "dd-mmm-yy hh:mm").TypeParagraph.TypeParagraphEnd With

For Each ws In Worksheets

Page 74: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

For I = 1 To ws.Comments.CountSet C = ws.Comments(I).ParentCmt = ws.Comments(I).TextWith WordObj.Selection.TypeText Text:="Commentaire dans la cellule: " + _C.Address(False, False, xlA1) + " feuille: " + ws.NameIf PrintValue = True Then.TypeText Text:=" Cell Value: " + Format(C.Value)End If.TypeParagraph.TypeText Text:=Cmt.TypeParagraph.TypeParagraphEnd WithNext INext ws

Set WordObj = NothingMsgBox "OK...commentaires dans Word", vbInformation, "Edition des Commentaires"End Sub

Public Sub PrintFormulasToWord()

Dim Cnt As StringDim C As RangeDim WordObj As ObjectDim HasArr As Boolean

On Error Resume NextErr.Number = 0

Set WordObj = GetObject(, "Word.Application.8")If Err.Number = 429 ThenSet WordObj = CreateObject("Word.Application.8")Err.Number = 0End If

WordObj.Visible = TrueWordObj.Documents.Add

With WordObj.Selection.Font.Name = "Arial".TypeText "Formules dans la feuille: " + ActiveSheet.Name.TypeParagraph.TypeText "Cells: " + Selection.Cells(1, 1).Address(False, False, xlA1) _& " to " & Selection.Cells(Selection.Rows.Count, Selection.Columns.Count) _.Address(False, False, xlA1).TypeParagraph.TypeParagraphEnd With

For Each C In Selection

Page 75: anneclairepannier.free.franneclairepannier.free.fr/informatique/Macros Excel.docx  · Web viewAutre méthode en testant l'entrée du nom. ... Lors de l'exécution d'une macro Excel

HasArr = C.HasArrayCnt = C.FormulaIf HasArr ThenCnt = "{" + Cnt + "}"End IfIf Cnt <> "" ThenWith WordObj.Selection.Font.Bold = True.TypeText C.Address(False, False, xlA1) & ": ".Font.Bold = False.TypeText Cnt.TypeParagraph.TypeParagraphEnd WithEnd IfNext CMsgBox "Edition des formules dans Word. ", , "Formules dans Word"End Sub

Comment envoyer la valeur d'une cellule vers un signet?

'Supposant un document lettre.doc contenant les signets: "Monsignet" et "Monsignet2"

Sub EcritVersSignet()Dim LaLettre As StringDim LeMontantDim LeTexte2Dim ObjWord As Word.ApplicationDim LeDocWord As Word.Document

On Error Resume Next

LaLettre = ThisWorkbook.Path & "\lettre.doc"Set ObjWord = CreateObject("Word.Application")ObjWord.Visible = TrueSet LeDocWord = ObjWord.Documents.Open(LaLettre)LeMontant = [A1]LeTexte2 = [A2]With LeDocWord'Le nom du signet dans le document word est ici "Monsignet".Bookmarks("Monsignet").Range.Text = LeMontant'Le nom du signet dans le document word est ici "Monsignet2".Bookmarks("Monsignet2").Range.Text = LeTexte2End With

'Pour enregistrer le document et quitter Word'LeDocWord.Save'ObjWord.Quit

Set ObjWord = NothingEnd Sub