astuces et code vba pour excel - mcours.net · astuces et code vba pour exce rubriques classeurs...
Post on 13-Sep-2018
263 Views
Preview:
TRANSCRIPT
Astuces et code VBA pour Exce
Rubriques
Classeurs (Workbooks)
Controcircles et Formulaires
Feuilles (Worksheets)
Fichiers (XL ou autres)
Fonctions
Formules
Graphiques
Menus
Seacutelection
OLE Automation
Excel lt--gt Access (DAO)
Commandes diverses
Programmes divers
Teacuteleacutechargement sur site httpericrenaudfreefr
Les classeurs Excel (Workbooks) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
classeurs
Ajouter des feuilles dans un classeur et les renommer
Enregistrer une copie du classeur (sans modifier le classeur ouvert)
Fermer tous les classeurs ouverts sauf le classeur actif
Renommer les onglets dun classeur (Ex Mois1 Mois2 Mois3 etc)
Trier les onglets dun classeur
Ajouter des feuilles dans un classeur et les renommer
Sub AjouterRenommerFeuilles() Dim cpt As Integer cpt = 1 Do While cpt lt 4 Ajoute 3 feuilles Ajout dune feuille ApplicationSheetsAdd After=SheetsItem(SheetsCount) Type=xlWorksheet Renomme la feuille ApplicationActiveSheetName = Semaine amp CStr(cpt) cpt = cpt + 1 Loop End Sub
Enregistrer une copie du classeur
Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelMonDoublexls End Sub
Fermer tous les classeurs ouverts (sauf le classeur actif)
Sub FermeClasseurs() For Each Wk In Workbooks If WkName ltgt ThisWorkbookName Then WkClose savechanges=True End If Next Wk
End Sub
Renommer les onglets dun classeur
Sub RenommeOnglets() Renomme les onglets CL1 CL2 CL3 etc Dim I As Integer ApplicationScreenUpdating = False For I = 1 To 3 Worksheets(I)Name = CL amp I Next I End Sub
Trier les onglets dun classeur
Sub TriNomsOnglets() Dim I As Integer J As Integer For I = 1 To SheetsCount For J = 1 To I - 1 If UCase(Sheets(I)Name) lt UCase(Sheets(J)Name) Then Sheets(I)Move Before=Sheets(J) Exit For End If Next J Next I End Sub
Controcircles divers en VBA Page mise agrave jour le 14052002
Vous trouverez dans cette rubrique des exemples sur les diffeacuterents controcircles comme
TextBox ComboBox ListBox Bouton doption Case agrave cocher calendrier indicateur de
progression etc
Ces controcircles sutilisent sur un Userform (ou formulaire)
Quelques notions de base
Comment creacuteer un Userform
Depuis une feuille Excel tapez ALT+F11 ou par le menu Outils Macro Visual Basic
Editor
Vous affichez lenvironnement Visual Basic Editor
Inseacuterer un Userform agrave laide du menu Insertion Userform La boicircte agrave outils doit safficher sinon utilisez le menu Affichage Boicircte agrave outils
Pour placer un controcircle sur un Userform
1 - Seacutelectionner le controcircle deacutesireacute dans la fenecirctre Boicircte agrave outils
2 - Cliquer sur le controcircle choisi avec le bouton gauche de la souris et sans relacher
celui-ci deacuteplacer le controcircle vers le Userform puis relacher le bouton de la souris
Voici les principaux controcircles de la boicircte agrave outils (ci-dessous)
Les boicirctes de dialogue
Boite de dialogue avec bouton doption
Le Userform (DlgChoix)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheBoutonsOption() DlgChoixShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DlgChoixChoixPaireValue = True End Sub Nota A louverture du formulaire la case France est cocheacutee par deacutefaut
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If DlgChoixChoixPaire Then Msg = Vous avez choisi lactiviteacute France Style = vbOKOnly + vbInformation Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) Else Msg = Vous avez choisi lactiviteacute Export Style = vbOKOnly + vbInformation
Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Boite de dialogue avec case agrave cocher
Le Userform (CasesACocher)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCaseACocher() Range(A3C3)Select SelectionClearContents CasesACocherShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Remplace la proprieacutete TripleState mise agrave True(CheckBox1) CheckBox1Value = Null CheckBox2Value = False CheckBox3Value = False End Sub Nota A louverture du formulaire la case Franccedilais est cocheacute mais en griseacutee
Code des boutons
1 Bouton OK
Private Sub OK_Click() Dim Langue1 As String Dim Langue2 As String Dim Langue3 As String If CheckBox1Value = False Then Langue1 = Non Else
Langue1 = Oui End If If CheckBox2Value = False Then Langue2 = Non Else Langue2 = Oui End If If CheckBox3 = False Then Langue3 = Non Else Langue3 = Oui End If CasesACocherHide Range(A3)Value = Langue1 Range(B3)Value = Langue2 Range(C3)Value = Langue3 Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() CasesACocherHide End Sub
Le reacutesultat
Boite de dialogue avec liste deacuteroulante
Le Userform (ListeDeroulante)
Le code
Code lanccedilant louverture de la liste deacuteroulante
Sub AfficheListeDeroulante() ListeDeroulanteShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DerniereMarque = Range(A1)End(xlDown)Address Plage de donneacutees pour afficher dans liste deacuteroulante
MarqueRowSource = A1 amp DerniereMarque Afficher la premiegravere marque de la liste (0 = Fiat) MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteHide Marque est le nom donneacute au controcircle ListBox Index = MarqueListIndex ChoixMarque = MarqueList(Index) Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = ChoixMarque End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End Sub
Renommer les onglets dun classeur
Sub RenommeOnglets() Renomme les onglets CL1 CL2 CL3 etc Dim I As Integer ApplicationScreenUpdating = False For I = 1 To 3 Worksheets(I)Name = CL amp I Next I End Sub
Trier les onglets dun classeur
Sub TriNomsOnglets() Dim I As Integer J As Integer For I = 1 To SheetsCount For J = 1 To I - 1 If UCase(Sheets(I)Name) lt UCase(Sheets(J)Name) Then Sheets(I)Move Before=Sheets(J) Exit For End If Next J Next I End Sub
Controcircles divers en VBA Page mise agrave jour le 14052002
Vous trouverez dans cette rubrique des exemples sur les diffeacuterents controcircles comme
TextBox ComboBox ListBox Bouton doption Case agrave cocher calendrier indicateur de
progression etc
Ces controcircles sutilisent sur un Userform (ou formulaire)
Quelques notions de base
Comment creacuteer un Userform
Depuis une feuille Excel tapez ALT+F11 ou par le menu Outils Macro Visual Basic
Editor
Vous affichez lenvironnement Visual Basic Editor
Inseacuterer un Userform agrave laide du menu Insertion Userform La boicircte agrave outils doit safficher sinon utilisez le menu Affichage Boicircte agrave outils
Pour placer un controcircle sur un Userform
1 - Seacutelectionner le controcircle deacutesireacute dans la fenecirctre Boicircte agrave outils
2 - Cliquer sur le controcircle choisi avec le bouton gauche de la souris et sans relacher
celui-ci deacuteplacer le controcircle vers le Userform puis relacher le bouton de la souris
Voici les principaux controcircles de la boicircte agrave outils (ci-dessous)
Les boicirctes de dialogue
Boite de dialogue avec bouton doption
Le Userform (DlgChoix)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheBoutonsOption() DlgChoixShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DlgChoixChoixPaireValue = True End Sub Nota A louverture du formulaire la case France est cocheacutee par deacutefaut
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If DlgChoixChoixPaire Then Msg = Vous avez choisi lactiviteacute France Style = vbOKOnly + vbInformation Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) Else Msg = Vous avez choisi lactiviteacute Export Style = vbOKOnly + vbInformation
Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Boite de dialogue avec case agrave cocher
Le Userform (CasesACocher)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCaseACocher() Range(A3C3)Select SelectionClearContents CasesACocherShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Remplace la proprieacutete TripleState mise agrave True(CheckBox1) CheckBox1Value = Null CheckBox2Value = False CheckBox3Value = False End Sub Nota A louverture du formulaire la case Franccedilais est cocheacute mais en griseacutee
Code des boutons
1 Bouton OK
Private Sub OK_Click() Dim Langue1 As String Dim Langue2 As String Dim Langue3 As String If CheckBox1Value = False Then Langue1 = Non Else
Langue1 = Oui End If If CheckBox2Value = False Then Langue2 = Non Else Langue2 = Oui End If If CheckBox3 = False Then Langue3 = Non Else Langue3 = Oui End If CasesACocherHide Range(A3)Value = Langue1 Range(B3)Value = Langue2 Range(C3)Value = Langue3 Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() CasesACocherHide End Sub
Le reacutesultat
Boite de dialogue avec liste deacuteroulante
Le Userform (ListeDeroulante)
Le code
Code lanccedilant louverture de la liste deacuteroulante
Sub AfficheListeDeroulante() ListeDeroulanteShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DerniereMarque = Range(A1)End(xlDown)Address Plage de donneacutees pour afficher dans liste deacuteroulante
MarqueRowSource = A1 amp DerniereMarque Afficher la premiegravere marque de la liste (0 = Fiat) MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteHide Marque est le nom donneacute au controcircle ListBox Index = MarqueListIndex ChoixMarque = MarqueList(Index) Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = ChoixMarque End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Les boicirctes de dialogue
Boite de dialogue avec bouton doption
Le Userform (DlgChoix)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheBoutonsOption() DlgChoixShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DlgChoixChoixPaireValue = True End Sub Nota A louverture du formulaire la case France est cocheacutee par deacutefaut
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If DlgChoixChoixPaire Then Msg = Vous avez choisi lactiviteacute France Style = vbOKOnly + vbInformation Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) Else Msg = Vous avez choisi lactiviteacute Export Style = vbOKOnly + vbInformation
Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Boite de dialogue avec case agrave cocher
Le Userform (CasesACocher)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCaseACocher() Range(A3C3)Select SelectionClearContents CasesACocherShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Remplace la proprieacutete TripleState mise agrave True(CheckBox1) CheckBox1Value = Null CheckBox2Value = False CheckBox3Value = False End Sub Nota A louverture du formulaire la case Franccedilais est cocheacute mais en griseacutee
Code des boutons
1 Bouton OK
Private Sub OK_Click() Dim Langue1 As String Dim Langue2 As String Dim Langue3 As String If CheckBox1Value = False Then Langue1 = Non Else
Langue1 = Oui End If If CheckBox2Value = False Then Langue2 = Non Else Langue2 = Oui End If If CheckBox3 = False Then Langue3 = Non Else Langue3 = Oui End If CasesACocherHide Range(A3)Value = Langue1 Range(B3)Value = Langue2 Range(C3)Value = Langue3 Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() CasesACocherHide End Sub
Le reacutesultat
Boite de dialogue avec liste deacuteroulante
Le Userform (ListeDeroulante)
Le code
Code lanccedilant louverture de la liste deacuteroulante
Sub AfficheListeDeroulante() ListeDeroulanteShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DerniereMarque = Range(A1)End(xlDown)Address Plage de donneacutees pour afficher dans liste deacuteroulante
MarqueRowSource = A1 amp DerniereMarque Afficher la premiegravere marque de la liste (0 = Fiat) MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteHide Marque est le nom donneacute au controcircle ListBox Index = MarqueListIndex ChoixMarque = MarqueList(Index) Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = ChoixMarque End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Title = Activiteacute Commerciale - copy E RENAUD - Novembre 1999 Response = MsgBox(Msg Style Title) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Boite de dialogue avec case agrave cocher
Le Userform (CasesACocher)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCaseACocher() Range(A3C3)Select SelectionClearContents CasesACocherShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Remplace la proprieacutete TripleState mise agrave True(CheckBox1) CheckBox1Value = Null CheckBox2Value = False CheckBox3Value = False End Sub Nota A louverture du formulaire la case Franccedilais est cocheacute mais en griseacutee
Code des boutons
1 Bouton OK
Private Sub OK_Click() Dim Langue1 As String Dim Langue2 As String Dim Langue3 As String If CheckBox1Value = False Then Langue1 = Non Else
Langue1 = Oui End If If CheckBox2Value = False Then Langue2 = Non Else Langue2 = Oui End If If CheckBox3 = False Then Langue3 = Non Else Langue3 = Oui End If CasesACocherHide Range(A3)Value = Langue1 Range(B3)Value = Langue2 Range(C3)Value = Langue3 Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() CasesACocherHide End Sub
Le reacutesultat
Boite de dialogue avec liste deacuteroulante
Le Userform (ListeDeroulante)
Le code
Code lanccedilant louverture de la liste deacuteroulante
Sub AfficheListeDeroulante() ListeDeroulanteShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DerniereMarque = Range(A1)End(xlDown)Address Plage de donneacutees pour afficher dans liste deacuteroulante
MarqueRowSource = A1 amp DerniereMarque Afficher la premiegravere marque de la liste (0 = Fiat) MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteHide Marque est le nom donneacute au controcircle ListBox Index = MarqueListIndex ChoixMarque = MarqueList(Index) Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = ChoixMarque End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Langue1 = Oui End If If CheckBox2Value = False Then Langue2 = Non Else Langue2 = Oui End If If CheckBox3 = False Then Langue3 = Non Else Langue3 = Oui End If CasesACocherHide Range(A3)Value = Langue1 Range(B3)Value = Langue2 Range(C3)Value = Langue3 Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() CasesACocherHide End Sub
Le reacutesultat
Boite de dialogue avec liste deacuteroulante
Le Userform (ListeDeroulante)
Le code
Code lanccedilant louverture de la liste deacuteroulante
Sub AfficheListeDeroulante() ListeDeroulanteShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() DerniereMarque = Range(A1)End(xlDown)Address Plage de donneacutees pour afficher dans liste deacuteroulante
MarqueRowSource = A1 amp DerniereMarque Afficher la premiegravere marque de la liste (0 = Fiat) MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteHide Marque est le nom donneacute au controcircle ListBox Index = MarqueListIndex ChoixMarque = MarqueList(Index) Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = ChoixMarque End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
MarqueRowSource = A1 amp DerniereMarque Afficher la premiegravere marque de la liste (0 = Fiat) MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteHide Marque est le nom donneacute au controcircle ListBox Index = MarqueListIndex ChoixMarque = MarqueList(Index) Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = ChoixMarque End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() Utilisation de loption AddItem Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Set Liste = Worksheets(1)Cells(1 1)Resize(Worksheets(Feuil1) _ Cells(1 1)CurrentRegionRowsCount - 1 1) NbConstructeurs = ApplicationCountA(Range(A1)EntireColumn) ListeDeroulanteModifiableConstructeurClear ReDim Arr(1 To NbConstructeurs) For I = 1 To NbConstructeurs Arr(I) = Liste(I)Value ListeDeroulanteModifiableConstructeurAddItem Arr(I) Next ConstructeurListIndex = 0 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() ListeDeroulanteModifiableHide ApplicationScreenUpdating = False Constructeur est le nom donneacute au controcircle ComboBox Marque = ConstructeurValue Stockage du choix effectueacute dans la liste deacuteroulante en D2 Range(D2)Value = Marque Columns(AA)Select On Error GoTo Ajoute SelectionFind(What=Marque After=ActiveCell LookIn=xlFormulas _ LookAt=xlPart SearchOrder=xlByRows SearchDirection=xlNext _ MatchCase=False)Activate Range(A1)Select Exit Sub Ajoute
Une nouvelle marque eacutetant ajouteacutee ajout de celle-ci agrave la fin de la colonne A Range(A1)End(xlDown)Offset(1 0)Value = Marque Tri des marques en ordre croissant SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Seacutelectionne la plage et recolore la plage des marques apregraves ajout nouvelle marque With Worksheets(1) Range([A1] [A1]End(xlDown))Select End With With SelectionInterior ColorIndex = 20 PatternColorIndex = xlAutomatic End With Range(A1)Select End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Le Userform (ListeDeroulanteModifiable)
Les controcircles
Nom de la ComboBox = Constructeur Nom du CommandButton Valider Choix = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteModifiable() ListeDeroulanteModifiableShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() MeConstructeurRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() MeConstructeurListIndex = -1 End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Code des boutons
1 Bouton OK
Private Sub OK_Click() MeHide If MeConstructeurListIndex = -1 Then Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MeConstructeurValue Tri de la plage de donneacutees suite agrave lajout dun eacuteleacutement Sheets(Feuil1)Range([A1] [A1]End(xlDown))Select SelectionSort Key1=Range(A1) Order1=xlAscending Header=xlGuess _ OrderCustom=1 MatchCase=False Orientation=xlTopToBottom Else End If Mise en place de la valeur choisie en D2 Sheets(Feuil1)Cells(2 4)Value = MeConstructeurValue End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteModifiableHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Boite de dialogue avec seacutelection multiple dans liste deacuteroulante
Le Userform (DlgChoixMultiple)
Les controcircles
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Nom de la ListBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulanteMultiSelect() DlgChoixMutlipleShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear Proprieacuteteacute Multiselect du controcircle ListeClients mis sur fmMultiSelectExtended ListeClientsMultiSelect = fmMultiSelectExtended End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixMultipleHide j = 1 With ListeClients For i = 0 To ListCount - 1 If Selected(i) = True Then Le reacutesultat est placeacute dans les colonnes D et E de la feuille Feuil1 Cells(j 4) = List(i 0) Cells(j 5) = List(i 1) Selected(i) = False j = j + 1 End If Next End With End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixMultipleHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire
(voir image du Userform au deacutebut de la page)
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Boite de dialogue avec liste deacuteroulante agrave 2 colonnes
Le Userform (DlgChoix)
Les controcircles
Nom de la ComboBox = ListeClients Nom du CommandButton OK = OK Nom du CommandButton Annuler = Annuler
Quelques proprieacuteteacutes du controcircle ListeClients
ColumnCount = 2 (Nbre de colonne agrave afficher dans une zone de liste) ColumnWidths = 40 (Largeur de chaque colonne dune zone de liste agrave plusieurs colonnes)
Height = 18 (Hauteur en points dun objet) ListWidth = 190 (Largeur de la liste dun controcircle ComboBox) Width = 78 (largeur en points dun objet)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheListeDeroulante() DlgChoixShow End Sub
Code dinitialisation du formulaire
Private Sub UserForm_Initialize() Les donneacutees proviennent de la feuille Feuil1 et sont dans les colonnes A et B With Sheets(Feuil1)Range(A1) MeListeClientsRowSource = Range(Cells End(xlDown)(1 2))Address(External=True) End With End Sub
Code dactivation du formulaire
Private Sub UserForm_Activate() Effacement des donneacutees de la plage qui reccediloit les items seacutelectionneacutes (colonnes D et E) Range(D1E1 Cells(ListeClientsListCount 4))Clear End Sub
Code des boutons
1 Bouton OK
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Private Sub OK_Click() DlgChoixHide If ListeClientsListIndex ltgt -1 Then Reacutecupeacuteration du code et du nom du client Sheets(Feuil1)Cells(1 4)Value = ListeClientsColumn(0 ListeClientsListIndex) Sheets(Feuil1)Cells(1 5) = ListeClientsColumn(1 ListeClientsListIndex) End If End Sub
2 Bouton Annuler
Private Sub Annuler_Click() DlgChoixHide End Sub
Le reacutesultat par rapport agrave la seacutelection dans le formulaire (voir image du Userform au deacutebut de la page)
Boite de dialogue combineacutee
Cette boicircte de dialogue permet de mettre agrave jour les deux controcircles de droite
(TextBox et ComboBox) suivant la seacutelection effectueacutee dans le controcircle de
gauche (ListBox) et cela de maniegravere dynamique
Le Userform (ListeDeroulanteCombinee)
Le code
Code lanccedilant louverture du Userform (ListeDeroulanteCombinee)
Sub AfficheListeDeroulanteCombinee() Sheets(Accueil)Activate Range(B2)Value = Range(C2)Value = Range(D2)Value = ApplicationScreenUpdating = False ListeDeroulanteCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Private Sub UserForm_Activate() Dim Arr() As String Dim I As Integer NbSheets As Integer Dim Liste As Object Suppression des entreacutees de la liste si celle-ci en contient If OngletsListCount gt= 1 Then Dim ElementListe As Integer Dim NbreIt As Integer NbreIt = OngletsListCount - 1 For ElementListe = NbreIt To 0 Step -1 OngletsRemoveItem (ElementListe) Next ElementListe End If Ajout de toutes les entreacutees de la liste NbSheets = WorksheetsCount ReDim Arr(1 To NbSheets) For I = 2 To NbSheets Arr(I) = Worksheets(I)Name ListeDeroulanteCombineeOngletsAddItem Arr(I) Next I OngletsListIndex = 0 End Sub
Code sur leacuteveacutenement Change de la liste deacuteroulante Onglets (Controcircle situeacute agrave gauche)
Private Sub Onglets_Change() Dim OngletSelect As Integer Deacuteterminer la ligne seacutelectionneacutee dans la liste deacuteroulante OngletSelect = ListeDeroulanteCombineeOngletsListIndex + 2 Mise agrave jour TextBox Cateacutegorie (controcircle en haut et agrave droite) ListeDeroulanteCombineeCategorie = Sheets(OngletSelect)Range(C1)Value Mise agrave jour ComboBox Marque (controcircle en bas et agrave droite) Dim DerniereMarque As String Sheets(OngletSelect)Activate DerniereMarque = Range(A1)End(xlDown)Address MarqueRowSource = A1 amp DerniereMarque MarqueListIndex = 0 End Sub
Code des boutons
1 Bouton Valider
Private Sub Valider_Click() ListeDeroulanteCombineeHide Reacutecupeacuteration des index en fonction de la seacutelection IndexOnglet = OngletsListIndex IndexModele = MarqueListIndex Reacutecupeacuteration des valeurs en fonction des index Onglet = OngletsList(IndexOnglet) Modele = MarqueList(IndexModele) Rubrique = CategorieValue
Mise en place des valeurs dans la feuille de calcul Sheets(Accueil)Activate Range(B2)Value = Onglet Range(C2)Value = Rubrique Range(D2)Value = Modele End Sub
2 Bouton Annuler
Private Sub Annuler_Click() ListeDeroulanteCombineeHide End Sub
Les donneacutees utiliseacutees pour remplir la liste deacuteroulante
Onglet Liste Voitures
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Onglet Liste Motos
Onglet Liste Avions
Un exemple de seacutelection avec le reacutesultat inscrit dans la feuille de calcul
Boite de dialogue combineacutee
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Cette boicircte de dialogue permet en cochant une des options du controcircle
de gauche (Cateacutegorie) dafficher la liste correspondante dans le
controcircle de droite (Liste avec Noms et Preacutenoms)
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (ListeCombinee)
Sub AfficheListeCombinee() ListeCombineeShow End Sub
Code douverture du formulaire par leacuteveacutenement Activate
Private Sub UserForm_Activate() Permet de cocher le bouton radio 1 agrave louverture du formulaire MeOptionButton1Value = True End Sub
Code sur leacuteveacutenement Click des boutons doption de la zone Cateacutegorie
(Controcircle situeacute agrave gauche)
Private Sub OptionButton1_Click() LastInputRow = Cells(1 1)End(xlDown)Row ListBox1RowSource = EffectifA1 A amp LastInputRow MyCategorie = Deacutebutants MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton2_Click() LastInputRow = Cells(1 2)End(xlDown)Row ListBox1RowSource = EffectifB1 B amp LastInputRow MyCategorie = Poussins MeListBox1ListIndex = 0 Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Private Sub OptionButton3_Click() LastInputRow = Cells(1 3)End(xlDown)Row ListBox1RowSource = EffectifC1 C amp LastInputRow MyCategorie = Benjamins MeListBox1ListIndex = 0
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Mise agrave jour libelleacute liste deacuteroulante With ListeCombinee Label1Caption = Liste des amp MyCategorie amp (Nom et Preacutenom) End With End Sub
Code des boutons
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MySelection = MeListBox1List(ListBox1ListIndex) MsgBox Vous avez choisi le joueur amp MySelection amp amp vbCr amp _ Il appartient agrave la cateacutegorie des amp MyCategorie amp Unload Me End Sub
2 Bouton Annuler
Private Sub Annuler_Click() MeHide Unload Me End Sub
Boite de dialogue avec 2 ListBox synchroniseacutees
Sur une ideacutee de Ole P Erlandsen
Cette boicircte de dialogue permet en seacutelectionnant un eacuteleacutement dans la liste de gauche
dafficher les eacuteleacutements correspondants dans la liste de droite
Le Userform (ListeCombinee)
Le code
Code lanccedilant louverture du Userform (DoubleListBox)
Sub AfficheListBox() Load DoubleListBox DoubleListBoxShow Unload DoubleListBox End Sub
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Code douverture du formulaire par leacuteveacutenement Initialize
Private Sub UserForm_Initialize() La mise agrave jour des items dans ListBox1 mettra agrave jour les items dans la ListBox2 With Me UpdateListBox ListBox1 -1 End With End Sub
Code sur leacuteveacutenement Change de la ListBox1 (Controcircle situeacute agrave gauche)
Private Sub ListBox1_Change() Mise agrave jour des items dans la ListBox2 UpdateListBox MeListBox2 MeListBox1ListIndex End Sub
Private Sub UpdateListBox(Parametres As MSFormsListBox IndexValue As Integer) Dim LastInputRow As Integer ColumnIndex As Integer InputRange As Range Les donneacutees commencent agrave la ligne 3 Const FirstInputRow As Integer = 3 Deacutetermine depuis quelle colonne on prend la liste des items ColumnIndex = IndexValue + 2 Deacutetermine la derniegravere ligne de la colonne seacutelectionneacutee et la plage correspondante LastInputRow = Cells(FirstInputRow ColumnIndex)End(xlDown)Row Set InputRange = ActiveSheetRange(Cells(FirstInputRow ColumnIndex) Cells(LastInputRow ColumnIndex)) With Parametres ColumnHeads = True Affiche les en-tecirctes de colonne RowSource = InputRangeAddress Speacutecifie la source de donneacutees ListIndex = 0 Seacutelectionne le premier item End With Set InputRange = Nothing End Sub
Code du bouton valider
1 Bouton Valider
Private Sub CmdValider_Click() MeHide MsgBox Dans la cateacutegorie amp MeListBox1List(MeListBox1ListIndex) amp Chr(13) amp Chr(13) amp _ Vous avez choisi amp MeListBox2List(MeListBox2ListIndex) vbInformation Reacutesultat de votre choix End Sub
La feuille de donneacutees
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Boicircte de dialogue avec un controcircle TabStrip (controcircle Onglet)
Quelques infos agrave propos du Controcircle TabStrip
Un controcircle TabStrip est un controcircle contenant une collection dun
ou de plusieurs onglets
Dans les controcircles TabStrip ceux-ci sont indeacutependants des pages
En reacutealiteacute un clic sur un onglet naffiche pas de nouvelle page
Pour les controcircles TabStrip la proprieacuteteacute Value permet de deacuteterminer
ou de deacutefinir quel onglet est actif
Cet exemple permet en cliquant sur lun des onglets davoir instantaneacutement les chiffres correspondants agrave lactiviteacute indiqueacutee sur longlet
Le Userform (Avec 3 onglets)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheTabStrip() UserForm1Show End Sub
Code douverture du formulaire
Private Sub UserForm_Activate() MeTabStrip1Value = 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I End Sub
Code sur leacuteveacutenement Change
Private Sub TabStrip1_Change() Select Case TabStrip1Value Case 0 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 2)Value Next I Case 1 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 3)Value Next I Case 2 For I = 1 To 5 MeControls(TextBox amp I)Value = Sheets(Reacutesultats)Cells(I + 1 4)Value Next I End Select End Sub
Code du bouton Fermer
Bouton Fermer
Private Sub CmdFermer_Click() MeHide End Sub
Les donneacutees de la feuille Reacutesultats utiliseacutees pour remplir le
UserForm
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Les controcircles courants
Exemples dutilisation de InputBox
Page mise agrave jour le 19032003
InputBox peut ecirctre utiliseacutee soit comme fonction soit comme meacutethode
La fonction Inputbox permet dafficher une boicircte de dialogue contenant une zone de
texte leacutegendeacutee invitant lutilisateur agrave y saisir linformation attendue Linformation saisie
est renvoyeacutee sous forme de chaicircne de caractegraveres et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
Lobjet Application dExcel possegravede une meacutethode InputBox que lon peut substituer agrave la
fonction InputBox de Visual Basic
La meacutethode Inputbox se preacutesente comme la fonction InputBox mais offre une
possibiliteacute tregraves
inteacuteressante elle permet de speacutecifier le type de donneacutees qui sera renvoyeacutee (numeacuterique
plage)
Saisie dinformation via une InputBox (fonction)
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Saisie dinformation via une InputBox (fonction)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue Linformation saisie est renvoyeacutee sous forme
de chaicircne de caractegraveres et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxFonction() Dim Inscription As String Inscription = InputBox(Nom de ladheacuterent Nouveau membre) Si lutilisateur na saisie aucune donneacutee et quil clique sur OK ou si lutlisateur clique sur Annuler on quitte la proceacutedure If Inscription = Then MsgBox Aucune donneacutee na eacuteteacute saisie Exit Sub Sinon la donneacutee saisie est afficheacutee Else MsgBox Inscription End If
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End Sub
Saisie dinformation (valeur numeacuterique) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme numeacuterique (type=1) Linformation
saisie est renvoyeacutee sous forme de nombre et stockeacutee dans une variable afin de
pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim Recette As Integer Recette = ApplicationInputBox(Recette effectueacutee Saisie de la recette Type=1) Si lutlisateur a cliqueacute sur Annuler If Recette = False Then Exit Sub sinon la donneacutee saise est afficheacutee MsgBox La recette est de amp Recette End Sub
Saisie dinformation (plage de cellules) via une InputBox (meacutethode)
Cette boite de dialogue avec une zone de texte leacutegendeacutee invite lutilisateur
agrave y saisir linformation attendue sous forme de seacutelection de plage (type=8)
Linformation saisie est renvoyeacutee sous forme de plage et stockeacutee dans une variable afin de pouvoir ecirctre ensuite exploiteacutee par le programme
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue InputBox
Sub UtilisationDeInputboxMethode() Dim MaPlage As Range On Error Resume Next Set MaPlage = ApplicationInputBox(prompt=Seacutelectionnez une plage de cellules _ Title=Seacutelection dune plage Left=5 Top=5 Type=8) Si lutlisateur a cliqueacute sur le bouton Annuler If ErrNumber = 424 Then MsgBox Vous avez choisi dannuler
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End Else sinon la plage seacutelectionneacutee va ecirctre afficheacutee MsgBox La plage seacutelectionneacutee est amp MaPlageAddress End If End Sub
Pour plus dinformations consultez laide sur InputBox
Exemples de la fonction MsgBox
Page mise agrave jour le 02112000
Vous trouverez dans cette rubrique des exemples de la fonction MsgBox La fonction
MsgBox permet dafficher une boicircte de dialogue preacutesentant un message et des boutons
de commande afin dafficher une information agrave lattention de lutilisateur ou dobtenir une reacuteponse agrave une question qui orientera lexeacutecution du programme
Message dinformation via une MsgBox
Message dinformation via une MsgBox avec choix de laction agrave effectuer (2 boutons)
Message dinformation via une MsgBox avec choix de laction agrave effectuer (3 boutons)
Message dinformation via une MsgBox
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur le bouton pour valider la lecture de ce message
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageInformation() Affiche un message dinformation Msg = Votre fichier a eacuteteacute sauvegardeacute Title = Deacutemonstration de MsgBox - E Renaud 102000 Style = vbOKOnly + vbInformation Reponse = MsgBox(Msg Style Title) End Sub
Message dinformation via une MsgBox avec choix de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui
indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub RecupInfoMessage() Dim Msg Style Title Response Deacutefinit le message Msg = Souhaitez-vous continuer Deacutefinit les boutons Style = vbYesNo + vbQuestion Deacutefinit le titre Title = Deacutemonstration de MsgBox - E Renaud 12000 Affiche le message Response = MsgBox(Msg Style Title) If Response = vbYes Then Lutilisateur a choisi Oui MyString = Oui Effectue une action Else Lutilisateur a choisi Non MyString = Non Effectue une action End If End Sub
Message dinformation via une MsgBox avec choix
de laction agrave effectuer
Cette boicircte de dialogue affiche un message attend que lutilisateur
clique sur un bouton puis renvoie une valeur de type Integer qui indique le bouton choisi par lutilisateur
La boicircte de dialogue
Le code
Code lanccedilant louveture de la boicircte de dialogue MsgBox
Sub MessageAvecReponseOuAnnulation() Affiche un message dinformation avec test sur le bouton seacutelectionneacute Msg = Deacutemonstration avec 3 boutons Title = Exemple de boicircte de message Style = vbYesNoCancel + vbQuestion Reponse = MsgBox(Msg Style Title) Si le bouton Annuler a eacuteteacute choisi on quitte la proceacutedure If Reponse = vbCancel Then Exit Sub sinon on teste lequel du bouton Oui ou Non a eacuteteacute choisi If Reponse = vbYes Then MsgBox Vous avez seacutelectionneacute Oui Else MsgBox Vous avez seacutelectionneacute Annuler End If End Sub
Pour plus dinformations consultez laide sur MsgBox
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Controcircles avanceacutes
Le controcircle Calendar (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut
et fin pour les utiliser dans votre application
Exemple trouveacute dans livre Excel 2000 amp Visual Basic pour Applications 6 disponible chez Amazonfr
Ajout du controcircle Calendar
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Calendar Control 80
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (fmContratDates)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheCalendar() fmContratDatesShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() cboDateAValiderAddItem (Date de deacutebut) cboDateAValiderAddItem (Date de fin) cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
Code lieacute au choix des dates sur le controcircle Calendar
Private Sub Calendrier_Click() Choix dune date sur le calendrier If cboDateAValiderListIndex = 0 Then DateDebutValue = CalendrierValue cboDateAValiderListIndex = 1 Else DateFinValue = CalendrierValue End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() Veacuterification de la validiteacute des informations If DateDebutValue = Then
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
MsgBox Vous devez speacutecifier une date de deacutebut vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateFinValue = Then MsgBox Vous devez speacutecifier une date de fin vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt= 0 Then MsgBox Vous devez speacutecifier une date de deacutebut anteacuterieure agrave la date de fin _ vbOKOnly + vbCritical Contrat dauteur Exit Sub ElseIf DateValue(DateFin) - DateValue(DateDebut) lt 40 Then Dim Continuer As Integer Continuer = MsgBox(Vous avez indiqueacute une date de deacutebut agrave seulement _ amp DateValue(DateFin) - DateValue(DateDebut) amp jours de la date de fin _ Valider cette date vbYesNo + vbQuestion Valider la date de deacutebut ) If Continuer = vbNo Then Exit Sub End If fmContratDatesHide Affichage des dates seacutelectionneacutees MsgBox ( Les dates de Deacutebut et Fin sont amp DateDebutValue amp et amp DateFinValue) Mise agrave jour des paramegravetres DateDebutValue = DateFinValue = cboDateAValiderListIndex = 0 CalendrierValue = Date CalendrierSetFocus End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() Dim Rep As Byte Rep = MsgBox(Etes-vous sucircr de vouloir fermer lapplication en cours _ vbYesNo + vbQuestion Annuler lapplication en cours ) If Rep = vbNo Then Exit Sub End If MeHide End End Sub
3 Bouton Retour (cmdRetour)
Private Sub CmdRetour_Click() MsgBox Vous allez fermer lapplication MeHide End Sub
Le controcircle ComboBox
Allie les caracteacuteristiques dun controcircle ListBox et dun controcircle TextBox
Lutilisateur peut entrer une nouvelle valeur comme dans un controcircle TextBox
ou bien seacutelectionner une valeur existante comme dans un controcircle ListBox
La liste dun controcircle ComboBox se compose de lignes de donneacutees La proprieacuteteacute par deacutefaut dun controcircle ComboBox est la proprieacuteteacute Value
Le principe de fonctionnement de ce controcircle se deacutecompose comme suit
1 - Remplir le controcircle ComboBox avec des donneacutees
2 - Choisir une de ces donneacutees en la seacutelectionnant
3 - Reacutecupeacuterer la donneacutee seacutelectionneacutee agrave la fermeture du formulaire
Remplir le controcircle Combobox avec des donneacutees
Exemple Afficher une liste de Domaines viticoles
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Je vous donne 4 meacutethodes pour remplir cette ComboBox (en fonction de votre besoin)
La proprieacuteteacute (name) du controcircle ComboBox est cboComboBox
Meacutethode 1 Les donneacutees sont dans une feuille de calcul (Feuil1)
Private Sub UserForm_Initialize() MecboComboBoxRowSource = Feuil1A1A amp Sheets(Feuil1)Cells(1 1)End(xlDown)Row End Sub
Meacutethode 2 Les donneacutees sont figeacutees et vous les ajoutez gracircce agrave la meacutethode
AddItem
Private Sub UserForm_Initialize() With MecboComboBox cboComboBoxAddItem Domaine Alexis Rouge cboComboBoxAddItem Domaine du Grand Cregraves Blanc cboComboBoxAddItem Domaine du Grand Cregraves Muscat cboComboBoxAddItem Domaine du Grand Cregraves Roseacute cboComboBoxAddItem Domaine du Grand Cregraves Rouge End With End Sub
Meacutethode 3 Les donneacutees correspondent agrave la liste des mois (Janvier Feacutevrier
Deacutecembre) On va utiliser la meacutethode AddItem avec une variable (i)
Private Sub UserForm_Initialize() Dim Mois(1 To 12) As String Dim i As Integer Creacuteation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format(DateSerial(1 i 1) mmmm) MecboComboBoxAddItem Mois(i) Next i End Sub
Meacutethode 4 Les donneacutees sont figeacutees et vous les ajouter gracircce _
agrave la fonction VBAArray(arglist)
Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim stDeptList() As String Dim i As Integer vaDepartement = VBAArray(Ain Aisne AllierAlpes-de-Hte-Provence _ Alpes-Hautes Alpes-Maritimes Ardennes) ReDim stDeptList (0 To UBound(vaDepartement)) For i = 0 To UBound(vaDepartement) stDeptList(i) = vaDepartement(i) Next i cboComboboxList = stDeptList End Sub
Seacutelectionner une donneacutees dans la liste
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Il suffit simplement de seacutelectionner avec la souris la donneacutee deacutesireacutee
Reacutecupeacuterer litem seacutelectionneacute
Private Sub cmdOK_Click() MsgBox Litem seacutelectionneacute est amp cboComboBoxValue vbInformation Unload Me End Sub
Reacutecupeacuterer une nouvelle valeur saisie
Il est possible dans le cas ougrave les donneacutees sont issues dune feuille Excel dinscrire cette nouvelle valeur dans la feuille Excel Lorsque lon ajoute une nouvelle donneacutee celle-ci se trouve en position ListIndex = -1 On utilise pour cela un test sur la proprieacuteteacute ListIndex En reacutegle geacutenegraverale cette proprieacuteteacute ListIndex agrave la valeur -1 agrave louveture du formulaire Si on seacutelectionne la premiegravere donneacutee de la liste la valeur ListIndex est eacutegale agrave 0 et ainsi de suite
Private Sub OK_Click() MeHide If MecboComboBoxListIndex = -1 Then _ Sheets(Feuil1)Cells(1 1)End(xlDown)Offset(1 0)Value = MecboComboboxValue End Sub
Le controcircle RefEdit
Ce controcircle placeacute dans un formulaire affiche ladresse dune plage de cellules
que vous avez entreacutee ou seacutelectionneacutee dans une feuille de calcul
Pour seacutelectionner une plage cliquez sur le bouton dans le controcircle pour reacuteduire
le formulaire utilisateur seacutelectionnez la plage puis cliquez de nouveau sur le
bouton dans le controcircle pour deacutevelopper le formulaire utilisateur
Exemple dutilisation du controcircle RefEdit
Effectuer une opeacuteration arithmeacutetique (+ - ou x) sur une plage de cellules (Ex Conversion FrsEuros majorer un prix appliquer une remise)
Principe dutilisation du controcircle RefEdit
Etape 1 Cliquez sur le trait horizontal du controcircle
Etape 2 Affichage dune boicircte de seacutelection
Etape 3 Seacutelectionnez avec la souris la plage deacutesireacutee
Etape 4 Cliquez sur la flegraveche rouge du controcircle pour valider votre seacutelection
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Mise en oeuvre du controcircle RefEdit
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez RefEditCtrl
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle
dans la boicircte agrave outils
Ajout du controcircle RefEdit
La boicircte agrave outils
Le Userform (SelectOperation)
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code
Code lanccedilant louverture de la boicircte de dialogue
Sub AfficheRefEdit() SelectOperationShow End Sub
Code douverture du formulaire
Private Sub UserForm_Initialize() Affiche la seacutelection en cours RefEdit1Text = ActiveWindowRangeSelectionAddress Rend le bouton Addition actif par deacutefaut Frame1OptionAdditionValue = True End Sub
Code des boutons
1 Bouton Valider (CmdValider)
Private Sub CmdValider_Click() Teste si une valeur a eacuteteacute saisie dans la TextBox (Opeacuterande) On Error Resume Next If TextBox1Value = Then MsgBox Vous devez saisir une valeur dopeacuterande RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Set PlageSelect = Range(RefEdit1Text) MyOperande = TextBox1Value Teste la seacutelelection effectueacutee est correct If Err ltgt 0 Then MsgBox La plage seacutelectionneacutee est invalide RefEdit1SetFocus On Error GoTo 0 Exit Sub End If Effectue lopeacuteration choisie sur la plage de cellules seacutelectionneacutees For Each Cell In PlageSelect If OptionAdditionValue = True Then CellValue = CellValue + MyOperande If OptionSoustractionValue = True Then CellValue = CellValue - MyOperande If OptionMultiplicationValue = True Then CellValue = CellValue MyOperande If OptionDivisionValue = True Then CellValue = CellValue MyOperande Next Cell SelectOperationHide Unload SelectOperation End Sub
2 Bouton Annuler (CmdAnnuler)
Private Sub CmdAnnuler_Click() SelectOperationHide Unload SelectOperation
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End Sub
Le controcircle TextBox (Zone de texte)
Ce controcircle placeacute dans un Userform permet la saisie de donneacutees
Ces donneacutees saisies peuvent parfois ecirctre erronneacutees (erreur de frappe texte agrave la
place de
nombre date non conforme etc )
Pour cela il peut ecirctre inteacuteressant de controcircler soit lors de la validation par OK ou
lors de la
sortie du controcircle si les donneacutees saisies sont conformes par rapport agrave la fonction du controcircle
Convention deacutecriture
Le Userform est nommeacute UserForm1
Le controcircle TextBox est nommeacute TextBox1
Le bouton OK est nommeacute CmdOK
Exemples de tests sur une TextBox
Sassurer quil y a eu une saisie dans la TextBox
Sassurer que la saisie dans la TextBox est de type numeacuterique (nombre)
Le controcircle ProgressBar version 60
Ce controcircle permet dafficher par exemple la progression dune mise agrave
jour de cellules (ex multiplier une plage par un coeumlfficient)
Exemple trouveacute sur le site de Ole P Erlandsen
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft ProgressBar Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
Ajout du controcircle ProgressBar Control
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
La boicircte agrave outils
Le Userform (frmProgressBar1)
Le code
Code lanccedilant lindicateur de progression
Sub StartProcessing1() Displays a progress bar while a macro runs requires a reference to MSCOMCTRLOCX Dim lngTotal As Long lngI As Long Initiate ProgressBar Load frmProgressBar With frmProgressBar ProgressBarScrolling = ccScrollingStandard or ccScrollingSmooth Show set the UserForms ShowModal property to false before running or Show False End With UpdateProgressBar 0 Processing set initial progress status start the process lngTotal = 2000 For lngI = 1 To lngTotal If lngI Mod 50 = 0 Then Update the ProgressBar for every 50th loop UpdateProgressBar lngI lngTotal 100 Processing amp Format _ (lngI lngTotal 0) amp End If Do something place your code here Range(D1)Formula = Format(Time hhmmss) Next lngI Range(D1)ClearContents
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Clean up frmProgressBarHide Unload frmProgressBar End Sub
Code lieacute agrave la macro UpdateProgressBar
Private Sub UpdateProgressBar(NewValue As Single Optional NewCaption As String) Updates the progressbar dialog With frmProgressBar If Not IsMissing(NewCaption) Then Caption = NewCaption ProgressBarValue = NewValue If NewValue = 0 Then Repaint End With End Sub
Le controcircle DTPicker (calendrier)
Ce controcircle permet gracircce agrave un calendrier de saisir des dates de deacutebut et des dates
de fin
de faccedilon simple et sans erreur possible pour les utiliser ensuite dans votre
application Cet exemple a eacuteteacute reacutealiseacute sous Excel 2000
Aspect du controcircle
Ajout du controcircle DTPicker
1 - Activer un UserForm dans le Visual Basic Editor
2 - Faites un clic droit sur la boicircte agrave outils et seacutelectionnez Controcircles
suppleacutementaires
3 - Dans la liste deacuteroulante seacutelectionnez Microsoft Date and Time Picker Control
version 60
4 - Cliquez sur OK pour fermer la boicircte de dialogue et ajoutez le controcircle dans la boicircte agrave outils
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
La boicircte agrave outils
Le Userform (frmConges)
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code
Code lanccedilant louverture du formulaire
Sub AfficheConges() frmCongesShow End Sub
Codes douverture du formulaire
Private Sub UserForm_Initialize() Deacutefinir buteacutee mini pour controcircle Date deacutebut (DTPicker1) MeDTPicker1MinDate = Now - 60 Deacutefinir buteacutee maxi pour controcircle Date fin (DTPicker2) MeDTPicker2MaxDate = Now + 365 End Sub
Private Sub UserForm_Activate() Remplissage des 2 listes deacuteroulantes (Nom agent et type de congeacutes) MecboAgentsRowSource = CongeacutesB7B21 MecboCongesRowSource = CongeacutesB24B31 Activer le premier enregistrement de chaque liste deacuteroulante MecboAgentsListIndex = 0 MecboCongesListIndex = 0 Deacutefinir la date afficheacutee par deacutefaut dans chaque controcircle DTPicker MeDTPicker1Value = Now MeDTPicker2Value = Now End Sub
Code lieacute agrave leacutevenement Change sur le controcircle DTPicker2
Private Sub DTPicker2_Change() Reacutecupeacuteration des dates seacutelectionneacutees MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker2SetFocus End If End Sub
Code des boutons
1 Bouton Valider (cmdValider)
Private Sub CmdValider_Click() MyDateDebut = DTPicker1Value MyDateFin = DTPicker2Value Dans le cas ougrave le choix est effectueacute sur le DTPicker1 If MyDateFin lt= MyDateDebut Then MsgBox La date de fin ne peut ecirctre infeacuterieure agrave la date de deacutebut DTPicker1SetFocus Else Unload Me Mise en place des donneacutees dans la feuille BaseCongeacutes Sheets(BaseCongeacutes)Cells(65536 1)End(xlUp)Offset(1 0)Value = MecboAgentsList _ (MecboAgentsListIndex) Sheets(BaseCongeacutes)Cells(65536 2)End(xlUp)Offset(1 0)Value = MecboCongesList _ (MecboCongesListIndex) Sheets(BaseCongeacutes)Cells(65536 3)End(xlUp)Offset(1 0)Value = Format(MyDateDebut mmddyyyy) Sheets(BaseCongeacutes)Cells(65536 4)End(xlUp)Offset(1 0)Value = Format(MyDateFin mmddyyyy) End If End Sub
2 Bouton Annuler (cmdAnnuler)
Private Sub CmdAnnuler_Click() MeHide End Sub
Quelques infos sur les UserForms
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Dans cette rubrique vous trouverez des infos pour la gestion des UserForms
Retour au menu Controcircles divers
Empecirccher le deacuteplacement dun Userform
Mettre hors fonction la croix (X) de fermeture du UserForm
Minimiser un formulaire (Excel 2000 uniquement)
Ajout dune image sur un bouton de formulaire
Empecirccher le deacuteplacement dun Userform et non affichage de la croix de fermeture
[ Exemple proposeacute par Laurent Longre ]
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If exLong And ampH880000 Then SetWindowLongA hWnd -16 exLong And ampHFF77FFFF MeHide MeShow End If End Sub
Mettre hors fonction la croix (X) de fermeture du UserForm
Private Sub UserForm_QueryClose(Cancel As Integer CloseMode As Integer) If CloseMode = vbFormControlMenu Then MsgBox Vous ne pouvez pas utiliser ce bouton de fermeture Cancel = True End If End Sub
Minimiser un UserForm
[ Exemple proposeacute par Laurent Longre ]
Mettre la proprieacuteteacute ShowModal du UserForm sur False (cette proprieacuteteacute nexiste pas sous Excel 97)
Deacutefintions
1 - Lorsquun objet UserForm est modal (ShowModal=True) lutilisateur doit fournir des informations
ou fermer lobjet UserForm pour pouvoir utiliser toute autre partie de lapplication 2 - Lorsquun objet UserForm nest pas modal (ShowModal=False) lutilisateur peut afficher dautres feuilles
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
ou fenecirctres sans fermer cet objet
Le code qui suit devra ecirctre dans le module de code du UserForm
Private Declare Function FindWindowA Lib User32 _ (ByVal lpClassName As String ByVal lpWindowName As String) As Long
Private Declare Function GetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long) As Long
Private Declare Function SetWindowLongA Lib User32 _ (ByVal hWnd As Long ByVal nIndex As Long _ ByVal dwNewLong As Long) As Long
Private Sub UserForm_Activate() Dim hWnd As Long exLong As Long hWnd = FindWindowA(vbNullString MeCaption) exLong = GetWindowLongA(hWnd -16) If (exLong And ampH20000) = 0 Then SetWindowLongA hWnd -16 exLong Or ampH20000 MeHide MeShow End If End Sub
Ajouter une image agrave un bouton de formulaire
Pour ajouter une image agrave un bouton de formulaire il faut posseacuteder une image de type Gif par exemple avec une taille denviron 26x20 comme celles ci-dessous
Vous creacuteez votre bouton normalement et ensuite vous allez dans les proprieacuteteacutes de ce bouton
1 - Seacutelectionner la proprieacuteteacute Picture et cliquez sur le bouton avec 3 points Vous seacutelectionnez votre image 2 - Seacutelectionner la proprieacuteteacute PicturePosition et choisissez loption 2 - fmPicturepositionLeftBottom (Cest celle qui me parait ecirctre la mieux adapteacutee)
Remplir une combobox ou listbox
Depuis une sheet
Remplir une ComboBox ou Listbox depuis une feuille de calcul Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1A amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Depuis une sheet (2 colonnes)
Private Sub UserForm_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Feuil1A1B amp Sheets( Feuil1 )Cells( 1 1 )End(xlDown)Row End With End Sub
Avec une autre syntaxe Private Sub UserForm1_Initialize() With Sheets( Feuil1 )Range( A1 ) MeComboBox1RowSource = Range(Cells End(xlDown)( 1 2 ))Address(External= True ) End With End Sub
Avec la meacutethode Additem
Ajout ditem avec la meacutethode AddItem pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() With MeComboBox1 ComboBox1AddItem Domaine Alexis Rouge ComboBox1AddItem Domaine du Grand Cregraves Blanc ComboBox1AddItem Domaine du Grand Cregraves Muscat ComboBox1AddItem Domaine du Grand Cregraves Roseacute ComboBox1AddItem Domaine du Grand Cregraves Rouge End With End Sub
Avec la liste des onglets Ajout de la liste des onglets du classeur pour remplir une ComboBox ou Listbox Public Sub UserForm_Initialize() For Each c In ActiveWorkbookSheets ComboBox1AddItem cName Next End Sub
Avec les noms des mois Ajout ditems correspondant agrave des mois pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Dim Mois( 1 To 12 ) As String Dim i As Integer Creation dun tableau des noms de mois For i = 1 To 12 Mois(i) = Format ( DateSerial ( 1 i 1 ) mmmm ) MeComboBox1AddItem Mois(i) Next i End Sub
Avec une plage nommeacutee Utiliser une une plage nommeacutee pour
remplir une ComboBox ou Listbox
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
La liste est deacutefinie dans le Userform par son nom entreacute agrave laide de la commande InsertionNomDeacutefinir avec la formule suivante NomClient=DECALER(Codes$A$1NBVAL(Codes$A$A)) ou Codes correspond au nom de longlet du classeur et
Nomclient eacutetant le nom de la plage de donneacutees Private Sub UserForm_Initialize() Activation du classeur WorkBookxls Workbooks( WorkBookxls )Activate ComboBox1RowSource = CodesNomClient End Sub
Avec une boucle et additem Ajout ditems correspondant agrave des anneacutees pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() ReDim Annee( 1 To 12 ) For i = 1 To 12 Annee(i) = 1998 + (i) MeComboBox1AddItem Annee(i) Next End Sub
Avec un fichier texte Ajout ditem depuis un fichier texte pour remplir une ComboBox ou Listbox Private Sub UserForm_Initialize() Ouvre le fichier en lecture Open CExcelDonneestxt For Input As 1 Do While Not EOF ( 1 ) Lit les donneacutees Input 1 NomClient Ajoute les donneacutees dans la ComboBox ou Listbox MeComboBox1AddItem NomClient Loop Close 1 End Sub
Avec la fonction array (tableau) Private Sub UserForm_Initialize() Dim vaDepartment As Variant Dim vaDeptCode As Variant Dim stDeptList() As String Dim i As Integer Liste des deacutepartements vaDepartment = VBAArray( Ain Aisne Allier Alpes (Hte Prov) Alpes (Hautes) Alpes (Maritimes) _ Ardegraveche Ardennes ) Code des deacutepartements vaDeptCode = VBAArray( 01 02 03 04 05 06 07 08 ) ReDim stDeptList( 0 To UBound (vaDepartment) 0 To 1 ) Boucle pour mise en place des valeurs For i = 0 To UBound (vaDepartment) stDeptList(i 0 ) = vaDeptCode(i) stDeptList(i 1 ) = vaDepartment(i)
Next i ComboBox1List = stDeptList End Sub Autre variante possible Private Sub UserForm1_Initialize() Dim TabMonnaies( 4 2 ) ComboBox1ColumnCount = 2 Nom des monnaies proposeacutees TabMonnaies( 0 0 ) = Franc
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
TabMonnaies( 1 0 ) = Euro TabMonnaies( 2 0 ) = Dollar TabMonnaies( 3 0 ) = Livre Symboles des monnaies
TabMonnaies( 0 1 ) = F TabMonnaies( 1 1 ) = euro TabMonnaies( 2 1 ) = $ TabMonnaies( 3 1 ) = pound ComboBox1List() = TabMonnaies End Sub
Avec les fichiers XLS drsquoun reacutepertoire Lister les fichiers dun reacutepertoire donneacute et les afficher dans une ComboBox ou Listbox Seul le nom du fichier sera afficheacute (Function ShortFilename) Private Sub UserForm_Initialize() Dim F Dim LongFilename As String With ApplicationFileSearch NewSearch LookIn = CExcelTraitement des deacutechets Execute On Error Resume Next For Each F In FoundFiles LongFilename = F Namefile = ShortFilename(LongFilename) MeComboBox1AddItem Namefile Next F End With End Sub
Boucle sur des controcircles
Efface le contenu des textbox Met agrave blanc les diffeacuterentes TextBox contenues dans le formulaire Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 CtrlValue = End If Next Ctrl End Sub
Exporter les donneacutees des textbox Exporte les valeurs des diffeacuterentes TextBox dans les cellules A1 A2 A3 etc lors de la validation par le bouton OK Private Sub cmdOK_Click() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Cells(i 1 ) = Ctrl End If Next Ctrl End Sub
Remplir les textbox agrave lrsquoouverture Remplit les controcircles TextBox du formulaire
avec les valeurs contenues dans les cellules A1 A2 etc lors de louverture du formulaire Private Sub UserForm_Initialize() Dim i As Integer For Each Ctrl In MeControls If TypeOf Ctrl Is MSFormsTextBox Then i = i + 1 Controls( TextBox amp i)Value = Cells(i 1 )Value End If Next Ctrl End Sub
Initialisation de checkbox Permet via un bouton placeacute sur le formulaire de reacuteinitialiser les controcircles Checkbox (Mise agrave False) Private Sub CmdInitCheckBox_Click() Dim Ctrl As MSFormsControl Remise agrave False des cases agrave cocher For Each Ctrl In UserForm1Controls If TypeOf Ctrl Is MSFormsCheckBox Then CtrlValue = False Next Ctrl End Sub
Les feuilles Excel (Worksheets) Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples concernant des programmes
sappliquant aux feuilles de calcul
Comparer deux colonnes
Effectuer un calcul sur une plage (Ex Multiplier par 2 les cellules
de la plage)
Effectuer une recopie increacutementeacutee
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Introduire une variable dans une formule SOMME (Ex ladresse dune cellule)
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Recherche du nombre doccurence
Rechercher la derniegravere cellule dune plage
Recopier une plage variable vers une autre feuille du classeur
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Reacutecupeacuterer la somme dune colonne dans une variable
Reacutecupeacuterer le nombre de colonnes
Reacutecupeacuterer le nombre de lignes
Reacutecupeacuterer la somme du produit de 2 colonnes (Somme des N (AB))
Reacutepertoire et nom de fichier dans pied de page
Supprimer les doublons dans une colonne
Supprimer les lignes vides dune plage
Supprimer un nom dans une feuille de calcul
Supprimer tous les noms dans une feuille de calcul
Supprimer les noms avec un joker dans une feuille de calcul
Supprimer les lignes contenant du texte
Utiliser des macro-commandes dans une feuille proteacutegeacutee
Comparer deux colonnes
Permet dajouter dans la colonne 1 les valeurs qui seraient dans la colonne 2 et pas dans la colonne 1 Sub CompareTwoColonnes() Dim Cell As Range Plage As Range I As Long Set Plage = Range(A1 [A1]End(xlDown)) I = PlageCount ApplicationScreenUpdating = False For Each Cell In Range(B1 [B1]End(xlDown)) If PlageFind(Cell Plage(1) xlValues xlWhole) Is Nothing Then I = I + 1 Cells(I 1) = Cell End If Next Cell End Sub
Effectuer un calcul sur une plage
Permet de multiplier lensemble dune plage par une valeur (2 dans lexemple) Sub MultiplieParDeux() Utilisation dun tableau intermeacutediaire Dim Tabl Dim I As Integer J As Integer Tabl = Range(A1C1000)Value For I = 1 To 1000 For J = 1 To 3 Tabl(I J) = Tabl(I J) 2 Next J Next I ApplicationScreenUpdating = False Range(A1C1000)Value = Tabl End Sub
Effectuer une recopie increacutementeacutee
Permet deffectuer une recopie increacutementeacutee agrave partir de A1 et A2 Sub RecopieIncrementee() Set PlageSource = Worksheets(Feuil1)Range(A1A2) Effectue une recopie increacutementeacutee de A1 agrave A20 Set PlageARemplir = Worksheets(Feuil1)Range(A1A20)
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
PlageSourceAutoFill Destination=PlageARemplir End Sub
Inseacuterer une ligne vide toutes les 2 lignes (ou plus)
Permet dinseacuterer dans un tableau une ligne vide toutes les deux lignes (ou plus) Sub MacroInsertUneLigneSurDeux() Dim Line As Integer Range(A2)Select Line = 1 Recommence Line = Line + 2 Rows(Line)Select SelectionInsert Shift=xlDown If Line lt ActiveSheetUsedRangeRowsCount Then GoTo Recommence End If End Sub
Introduire une variable dans une formule SOMME (Ex Un Ndeg de ligne)
Sub VariableSomme() La colonne A est la colonne ougrave lon doit effectuer une somme Se placer sur la premiegravere ligne vide de la colonne pour poser la formule Somme Range(A1)End(xlDown)Offset(1 0)Select Reacutecupeacuteration du nombre de lignes agrave comptabiliser dans la formule MonNoDeLigne = -(ActiveCellRow) + 1 ActiveCellFormulaR1C1 = =SUM(R[ amp MonNoDeLigne amp ]CR[-1]C) End Sub
Introduire une variable dans une formule SOMME (Ex Ladresse dune cellule)
Sub VariableAdressDansSomme() Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range(A1)End _ (xlDown)Address amp ) End Sub
Mettre en eacutevidence les cellules reacutepondant agrave un critegravere
Ce programme va seacutelectionner toutes les cellules correspondant agrave la valeur contenue dans D2 Sub SelectCellulesValeurDeterminee() LaValeur = Range(D2)Value Range(A1)Select For Each cll In ActiveCellCurrentRegion If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp Next cll If Len(Plg) gt 0 Then Range(Left(Plg Len(Plg) - 1))Select End Sub
Pour seacutelectionner les lignes agrave la place des cellules Remplacer la ligne de code If cllValue = LaValeur Then Plg = Plg amp cllAddress() amp par If cllValue = LaValeur Then Plg = Plg amp cllRow() amp amp cllRow() amp
Recherche du nombre doccurence
Ce programme va compter le nombre de fois quil rencontre la valeur ValeurAChercher Sub RechercheNbOccurence() Reacutesultat = ApplicationCountIf(Range(AA) ValeurAChercher) MsgBox (Le texte ValeurAChercher est preacutesent amp Reacutesultat amp fois) End Sub
Rechercher la derniegravere cellule dune plage
Ce programme permet de positionner le curseur sur la derniegravere cellule dune plage correspondant agrave la cellule en cours Sub AllerADernierecellule() Seacutelectionne la plage en cours ActiveSheetUsedRangeSelect Seacutelectionne la derniegravere cellule de la plage en cours
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
ActiveSheetUsedRangeSpecialCells(xlCellTypeLastCell)Offset(0 0)Select End Sub
Recopier une plage variable vers une autre feuille du classeur
Ce programme permet de recopier une plage variable A8 agrave Gx vers une autre feuille (Feuil2) en A1 correspondant agrave la cellule en cours Sub SelectRecopie() Redeacutefinir la plage en fonction du nombre de lignes Seacutelectionner cette plage Copier les valeurs contenues dans cette plage sur la feuille 2 agrave la cellule A1 With Worksheets(1) Range([A1] [G1]End(xlDown))Copy Worksheets(2)[A1] End With End Sub
Reacutecupeacuterer la colonne active sous forme litteacuterale (A AB AZ etc)
Ce programme permet de reacutecupeacuterer la lettre de la colonne de la cellule active Sub LetCol() Dim Let_Col As String Let_Col = Left(Mid(ActiveCellAddress 2) _ Len(Mid(ActiveCellAddress 2)) - (Len(Mid(Mid(ActiveCellAddress 2) _ ApplicationSearch($ Mid(ActiveCellAddress 2) 1) + 1)) + 1)) MsgBox Let_Col End Sub Autre variante avec utilisation des valeurs VRAI(-1) et FAUX (0) Sub LettreColonne() Utilisation des valeurs VRAI (-1) et FAUX (0) Lettre_Col = Left(ActiveCellAddress(0 0) (ActiveCellColumn lt 27) + 2) MsgBox Lettre_Col End Sub
Reacutecupeacuterer la somme dune colonne dans une variable
Ce programme effectue la somme de la colonne A et la met dans une variable LaSomme Sub FaireSommeColonne() LaSomme = ApplicationSum(Range(A1)EntireColumn) MsgBox LaSomme End Sub
Reacutecupeacuterer le nombre de colonnes
1 - Nombre de colonnes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les colonnes vides) Sub NombreDeColonnes() NbColonnes=ActiveSheetUsedRangeColumnsCount MsgBox NbColonnes End Sub
2 - Nombre de colonnes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des colonnes vides) Sub NombreDeColonnes() NbColonnes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbColonnes End Sub
Reacutecupeacuterer le nombre de lignes
1 - Nombre de lignes comprises entre la premiegravere cellule et la derniegravere cellule de la plage seacutelectionneacutee (y compris eacuteventuellement les lignes vides) Sub NombreDeColonnes() NbLignes=ActiveSheetUsedRangeRowsCount MsgBox NbLignes End Sub
2 - Nombre de lignes comprises entre la colonne A (vide ou pas) et la derniegravere cellule utiliseacutee (cette seacutelection peut contenir des lignes vides) Sub NombreDeLignes() NbLignes = CellsSpecialCells(xlCellTypeLastCell)Column MsgBox NbLignes End Sub
Reacutecupeacuterer la somme du produit de 2 colonnes
Somme des N valeurs (A1B1 + A2B2 )
Ce programme effectue le produit des valeurs de la colonne A par celles de la colonne B et additionne ces reacutesultats Sub SommeProduit() Cells(1 A)Select NbLignes = Cells(Range(AA)Count ActiveCellColumn)End(xlUp)Row NbLignes = Cells(16 1)End(xlUp)Row TotalIntermediaire = 0
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
For Lgn = 2 To NbLignes Etiquettes en ligne 1 If Not Rows(NbLignes)Hidden Then TotalIntermediaire = TotalIntermediaire + Cells(Lgn A) Cells(Lgn B) End If Next Lgn MsgBox TotalIntermediaire End Sub
Reacutepertoire et nom de fichier dans pied de page
Proceacutedure agrave mettre dans This WorkBook
La mise a jour ce fait degraves que lon active un onglet Private Sub Workbook_SheetActivate(ByVal Sh As Object) Dim ZtPath As String ZtPath = ApplicationActiveWorkbookPath ActiveSheetPageSetupLeftFooter = ZtPath amp amp ampF End Sub
Supprimer les doublons dans une colonne
Ce programme efface les doublons dans la colonne sans supprimer les lignes Sub EffaceDoublonsColonnnes() Const Cell_Deacutepart As String = A1 Dim Fin As Range I As Long J As Long Col As Integer Dim ModeCalcul As Long With Application ModeCalcul = Calculation Calculation = xlCalculationManual ScreenUpdating = False End With Col = Range(Cell_Deacutepart)Column Set Fin = Range(Cell_Deacutepart)End(xlDown)(2) On Error Resume Next Do I = J + 1 J = Range(Cells(I 1) Fin)ColumnDifferences(Cells(I 1))(0)Row If J gt I Then Range(Cells(I + 1 1) Cells(J 1))ClearContents Loop Until Err ApplicationCalculation = ModeCalcul End Sub
Supprimer les lignes vides dune plage
Ce programme supprime les lignes vides dans une plage Sub DetruireLigne() DerniereLigne = ActiveSheetUsedRangeRowsCount ApplicationScreenUpdating = False For R = DerniereLigne To 1 Step -1 If ApplicationCountA(Rows(R)) = 0 Then Rows(R)Delete Next R End Sub
Supprimer un nom dans une feuille de calcul
Ce programme supprime le nom Base dans toutes les feuilles du classeur Sub SupprimeUnNom() For Each Nm In ActiveWorkbookNames If NmName Like Base Then NmDelete End If Next Nm End Sub
Supprimer tous les noms dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeTouslesNoms() For Each Nm In ActiveWorkbookNames NmDelete Next Nm End Sub
Supprimer tous les noms (avec un joker) dans une feuille de calcul
Ce programme supprime tous les noms dans le classeur Sub SupprimeNomsAvecJoker() For Each Nm In ActiveWorkbookNames
If NmName Like Base Then NmDelete End If End Sub
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Supprimer les lignes contenant du texte
Ce programme recherche dans la colonne A les cellules contenant du texte et supprime les lignes associeacutees agrave ces cellules Sub SupprimeLignesAvecTtexte() NbRw = ApplicationCountA(Columns(AA)) For Rw = NbRw To 1 Step -1 If ApplicationIsText(Cells(Rw 1)) Then Rows(Rw)Delete Next Rw End Sub
Utilser des macro-commandes dans une feuille proteacutegeacutee
Ce programme permet dutiliser des macro-commandes dans une feuille proteacutegeacutee par Outils Protection
Worksheets(Feuil1)Protect UserInterfaceOnly=True permet de manipuler par macro une feuille proteacutegeacutee tout en laissant la protection active par rapport aux manipulations de lutilisateur
Private Sub Workbook_Open() Worksheets(Feuil1)Protect UserInterfaceOnly=True End Sub
Instruction agrave mettre dans Workbook_Open cette proprieacuteteacute neacutetant pas enregistreacutee avec le classeur
Les fichiers (Excel ou autres) Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique des exemples de programmes se rapportant aux
traitement sur des fichiers Excel ou autres (txt ini log)
Ecrire dans un fichier de type texte (Date heure) agrave louverture ou la fermeture dExcel
Lire et increacutementer un fichier INI
Lire les enregistrements dans un fichier texte
Lister des fichiers texte et les ouvrir avec GetOpenFileName
Lister tous les fichiers XLS dans une feuille de calcul
Reacutealiser une copie du classeur actif sous un autre nom
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Ecrire dans un fichier de type texte (date et heure)
Ce programme utilise les eacuteveacutenements WorkBook_Open et Workbook_BeforeClose pour inscrire des informations dans un fichier de type texte lors de louverture et de la fermeture dExcel Dans lexemple le fichier texte se nomme activitelog
Private Sub Workbook_Open() Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now()
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Open LogFile For Append Shared As 1 Print 1 Ouverture dExcel a amp Donnees Close 1 End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim LogFile As String LogFile = CExcelactivitelog ChDir CExcel Donnees = Now() Open LogFile For Append Shared As 1 Print 1 Fermeture dExcel a amp Donnees Print 1 ---------------------------------- Close 1 End Sub
Exemple de fichier geacuteneacutereacute
Lire et increacutementer un fichier INI
Ce programme permet dincreacutementer un fichier incremini et de reacutecupeacuterer la valeur contenue dans ce fichier Arriveacute agrave 1000 le compteur est reacuteinitialiseacute agrave 1
Structure du fichier incremini [Numero] NUMERO=4
Ne pas oublier de copier les deux lignes qui suivent en tecircte de votre module
Declare Function GetPrivateProfileStringA Lib Kernel32 (ByVal lpAppName As _ String ByVal lpKeyName As String ByVal lpDefault As String ByVal lpReturnedString _ As String ByVal nSize As Long ByVal lpFileName As String) As Long
Declare Function WritePrivateProfileStringA Lib Kernel32 (ByVal lpAppName _ As String ByVal lpKeyName As String ByVal lpString As String _ ByVal lpFileName As String) As Long
Sub IncreacutementeIni() Dim Compteur As String 10 GetPrivateProfileStringA Numero NUMERO 1 Compteur 10 CWindowsIncremini WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur) + 1) _ CWindowsIncremini MsgBox Le compteur est increacutementeacute agrave amp Compteur amp If Compteur = 1000 Then MsgBox ( La valeur de 1000 est atteinte Remise agrave 1 du compteur) Compteur = 1 WritePrivateProfileStringA Numero NUMERO CStr(CLng(Compteur)) _ CWindowsIncremini End If End Sub
Lire les enregistrements dans un fichier texte
Ce programme lit les diffeacuterents enregistrements dans un fichier texte et les inscrits dans une feuille de calcul
Structure du fichier Listingtxt JordanDurand15 EricBataille52 MarcelDupond35
Sub LireFichierTexte() Dim Prenom Nom Age Ouvre le fichier en lecture
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Open CExcelListingtxt For Input As 1 Effectue la boucle jusquagrave la fin du fichier Do While Not EOF(1) Lit les donneacutees dans trois variables Input 1 Prenom Nom Age Ecrit les donneacutees dans la feuille de calcul agrave partir de la ligne 2 Range(A65536)End(xlUp)(2)Value = Prenom Range(B65536)End(xlUp)(2)Value = Nom Range(C65536)End(xlUp)(2)Value = Age Loop Ferme le fichier Close 1 End Sub
Le reacutesultat
Lister des fichiers texte et les ouvrir avec GetOpenFileName
GetOpenFileName Affiche la boicircte de dialogue standard Ouvrir et lit un nom de fichier tapeacute ou seacutelectionneacute par lutilisateur sans reacuteellement ouvrir les fichiers Sub ChoixFichierTexteAOuvrir() ChDir C ChDir cExcel CeFichier =ApplicationGetOpenFilename(Text Files (txt) txt) If VarType(CeFichier) = vbBoolean Then Exit Sub Else WorkbooksOpenText Filename=CeFichier Origin=xlWindows _ StartRow=1 DataType=xlDelimited TextQualifier=xlDoubleQuote _ ConsecutiveDelimiter=False Tab=True Semicolon=False Comma=False _ Space=False Other=False FieldInfo=Array(1 1) End If End Sub
Lister tous les fichiers XLS dans une feuille de calcul
Ce programme permet de rechercher tous les fichiers Excel du reacutepertoire Excel de les placer dans un tableau et de copier ce tableau dans une feuille de calcul Sub RechercheClasseursSurDisque() Dim Classeurs() As String I As Long With ApplicationFileSearch NewSearch FileType = msoFileTypeExcelWorkbooks LookIn = CExcel SearchSubFolders = True Execute With FoundFiles ReDim Classeurs(1 To Count 1 To 1) For I = 1 To Count Classeurs(I 1) = Item(I) Next I ApplicationScreenUpdating = False With Range(A1)Resize(Count) Value = Classeurs Sort [A1] End With End With End With End Sub
Reacutealiser une copie du classeur actif sous un autre nom
Ce programme enregistre le classeur actif sous un autre nom (une copie) sans pour autant modifier le nom du classeur actif Sub SaveCopyAs() ActiveWorkbookSaveCopyAs CexcelDoublexls End Sub
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Reacutecupeacuterer le nom dun fichier seacutelectionneacute par GetOpenFileName
Cas dutilisation Par exemple si vous faites une lectureeacutecriture (via Open FileName For Input As 1) dun fichier seacutelectionneacute par GetOpenFilename pour inscrire les enregistrements dans un nouveau classeur (via WorkbooksAdd template=xlWorksheet) vous navez agrave aucun moment reacuteellement ouvert ce fichier mais vous voulez en connaicirctre le nom pour le donner agrave votre classeur actif
Public NameSansExtension As String Sub SelectionFichier() Dim LongFilename As String LongFilename = ApplicationGetOpenFilename(Text Files (txt) txt) ShortFilename (LongFilename) MsgBox Le nom sans extension du fichier est amp NameSansExtension End Sub
Function ShortFilename(LongFilename As String) As String For i = Len(LongFilename) To 1 Step -1 If Mid(LongFilename i 1) = Then Exit For Next ShortFilename = Mid(LongFilename i + 1 Len(LongFilename)) NameSansExtension = Mid(ShortFilename 1 Len(ShortFilename) - 4) End Function
Les fonctions personnaliseacutees Page mise agrave jour le 28032001
Inseacuterer le chemin du classeur dans une feuille de calcul
Somme des cellules avec un motif rouge par exemple
Inseacuterer le chemin dun classeur dans une feuille de calcul
Cette fonction insegravere le chemin du classeur dans la feuille de calcul
Le code
Code de la fonction InsereCheminClasseur
Function InsereCheminClasseur() As String ApplicationVolatile InsereCheminClasseur = ApplicationCallerParentParentFullName End Function
Somme des cellules avec un motif rouge
Cette fonction calcule la somme dune plage en fonction de la
couleur du motif des cellules
Le code
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Code de la fonction SumByColor
Function SumByColor(PlageEntree As Range CouleurPlage As Range) As Double Dim Cell As Range TempSum As Double ColorIndex As Integer ColorIndex = CouleurPlageCells(1 1)InteriorColorIndex TempSum = 0 On Error Resume Next For Each Cell In PlageEntreeCells If CellFormula lt gt Then If CellInteriorColorIndex = ColorIndex Then TempSum = TempSum + _ CellValue End If Next Cell On Error GoTo 0 Set Cell = Nothing SumByColor = TempSum End Function
Les paramegravetres de la fonction
PlageEntree Permet de seacutelectionner la plage agrave calculer
CouleurEntree Seacutelectionne la cellule servant de reacutefeacuterence pour la couleur du motif
Les formules Excel Page mise agrave jour le 10022002
Vous trouverez dans cette rubrique un recueil de formules pouvant vous rendre de
preacutecieux services
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Reacutealiser un filtre eacutelaboreacute (Champ avec condition ET)
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Calcul sur 12 mois glissants
Calcul sur les heures
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Calcul de lancienneteacute en Mois et Anneacutees
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Calculer une somme entre deux bornes
Exemples de formats personnaliseacutes
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Moyenne ne tenant pas compte des valeurs zeacutero
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute)
Le champ calculeacute permet dextraire les noms dont le salaire actuel
est gt= au salaire de deacutebut x 2
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Reacutealiser un filtre eacutelaboreacute (Champ calculeacute avec condition ET)
Extraire les noms dont la date de deacutebut est gt= au 31121997 ET la date de fin lt
01012001
Reacutecupeacuterer la valeur dune cellule reacutesultant dune intersection LigneColonne
Somme des cellules (A1 par ex) de plusieurs feuilles
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Somme dune colonne avec un nombre de lignes variable
Cas 1 Les valeurs commencent agrave la ligne 1 =SOMME(DECALER($A$1NB(AA)-NB(AA)))
Cas 2 Les valeurs commencent agrave la ligne 2
=SOMME(DECALER($A$1NB(AA)-NB(AA)-1))
Trouver le quantiegraveme du jour
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Trouver les dates mobiles (jours feacuterieacutes)
Les jours feacuterieacutes sont de deux sortes
Jours agrave date fixe (comme le 14 juillet le 11 novembre et le 25 deacutecembre)
Jours mobiles dont la date varie dune anneacutee sur lautre Ces jours feacuterieacutes mobiles
sont calculeacutes dapregraves la date du dimanche de Pacircques
Degraves lors que lon connaicirct la date du dimanche de Pacircques on peut en deacuteriver les dates de
tous les jours feacuterieacutes mobiles par simple addition
Le dimanche de Pacircques est le premier dimanche qui suit la premiegravere pleine lune apregraves
leacutequinoxe de printemps (21 mars)
La formule suivante signeacutee Norbert Hetterich renvoie la date du dimanche de Pacircques
pour lanneacutee A
(entre 1900 et 2078)
=FRANC((JOUR(MINUTE(A38)2+55)amp4ampA)7)7-6
Les jours feacuterieacutes mobiles en France et en Belgique sont le Lundi de Pacircques (Dimanche de
Pacircques (DP) + 1)
le Jeudi de lAscension (DP + 39) et le Lundi de Pentecocircte (DP + 50)
En partant de la formule de N Hetterich on peut donc obtenir facilement les dates de
ces trois jours feacuterieacutes pour une anneacutee donneacutee (entre 1900 et 2078)
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Les graphiques Excel Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique un recueil de graphiques pouvant vous rendre de
preacutecieux services
Reacutealiser un graphique dynamique (Donneacutees en colonnes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en colonnes)
Reacutealiser un graphique dynamique (Donneacutees en lignes)
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (Donneacutees en lignes)
Reacutealiser un graphique dynamique (donneacutees en colonnes)
Longlet sintitule Donneacutees et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs (en colonnes)
Longlet sintitule Etat Commandes et le fichier GraphiqueDynamique
Les donneacutees sont en colonnes
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Reacutealiser un graphique dynamique sur donneacutees en lignes
Longlet sintitule Personnel et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Reacutealiser un graphique dynamique sur les 12 derniegraveres valeurs en lignes
Longlet sintitule Effectif et le fichier GraphiqueDynamique
Les donneacutees sont en lignes
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Les menus et barres doutils
Vous trouverez dans cette rubrique des exemples pour creacuteer modifier ou personnaliser
les menus dExcel
Ajout dun item au menu Outils
1 - Ajouter un item intituleacute Exemple en derniegravere position du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un item intituleacute Exemple apregraves litem Protection du menu Outils
Le code pour installer litem dans le menu Outils Sub AddItemInMenuOutils() With ApplicationCommandBars(Tools)ControlsAdd(msoControlButton before=7) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils
Sub EffaceItem() CommandBars(Tools)Controls(Exemple)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun item au menu Outils Protection
Ajouter un item intituleacute Exemple dans le sous-menu Protection du menu Outils
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code pour installer litem dans le menu Outils Protection
Sub AddItemInMenuOutilsProtection() With ApplicationCommandBars(Protection)ControlsAdd(msoControlButton) Caption = Exemple OnAction = Affiche FaceId = 343 End With End Sub Le code pour effacer litem du menu Outils Protection Sub EffaceItem() CommandBars(Tools)Controls(Protection)Controls(4)Delete End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditems dans le menu Outils Protection - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Ajout dun nouveau menu
1 - Ajouter un menu Exemple dans la barre de menus apregraves le menu
Le code pour ajouter le menu Exemple Sub InserenouveauMenu() With CommandBars(1)ControlsAdd(msoControlPopup) Caption = Exemple With ControlsAdd(msoControlButton) Caption = Tri croissant FaceId = 210 BeginGroup = True OnAction = Affiche End With With ControlsAdd(msoControlButton) Caption = Tri deacutecroissant FaceId = 211 BeginGroup = True OnAction = Affiche End With End With End Sub Le code pour supprimer le menu Exemple Sub SupprimeNouveauMenu() CommandBars(1)Controls(Exemple)Delete End Sub Le code de laction associeacutee aux items Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un nouveau menu Exemple dans la barre de menus Style = vbYes Title = Ajout dun nouveau menu - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu Exemple dans la barre de menus avant le menu Format
Le code pour ajouter le menu Exemple avant le menu Format Ce code est identique agrave lexemple preacuteceacutedent sauf quil faut ajouter before=5 5 eacutetant le le numeacutero du menu avant lequel on veut inseacuterer le menu Exemple La ligne de code With CommandBars(1)ControlsAdd(msoControlPopup) devient With CommandBars(1)ControlsAdd(msoControlPopupbefore=5)
Ajout ditems au menu contextuel (clic droit)
1 - Ajouter un item Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Le code pour ajouter le menu contextuel Sub InsereMenuContextuel() With ApplicationCommandBars(Cell)ControlsAdd(msoControlButton) Caption = Exemple BeginGroup = True FaceId = 343 OnAction = Affiche End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
2 - Ajouter un menu popup depuis litem Exemple dans menu contextuel (clic droit souris)
Le code pour ajouter le menu contextuel Sub InsereMenuContextuePopUp() With ApplicationCommandBars(Cell) With ControlsAdd(msoControlPopup) Caption = Exemple BeginGroup = False Sous-menu 1 (Exemple 11) ControlsAdd (msoControlButton) Controls(1)Caption = Exemple 11 With Controls(1)
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
OnAction = Affiche FaceId = 351 End With Sous-menu 2 (Exemple 12) ControlsAdd (msoControlButton) Controls(2)Caption = Exemple 12 With Controls(2) OnAction = Affiche FaceId = 352 End With End With End With End Sub Le code pour supprimer le menu contextuel Sub SupprimeMenuContextuel() ApplicationCommandBars(Cell)Reset End Sub Le code de laction associeacutee agrave litem Exemple
Sub Affiche() Dim Msg Style Title Msg = Vous avez ajouteacute un item intituleacute Exemple dans le menu Outils Style = vbYes Title = Ajout ditem dans menu contextuel - copy Eric RENAUD - 111999 Response = MsgBox(Msg Style Title) End Sub
Masquer des items dans un menu (ou reacuteafficher)
1 - Rendre inaccesible le menu Outils
Le code pour rendre inaccessible litem Outils Sub InhibeMenuOutils() CommandBars(1)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils
Sub AfficheMenuOutils() CommandBars(1)Controls(6)Enabled = True End Sub
2 - Rendre inaccesible le menu Outils Protection
Le code pour rendre inaccessible litem Outils Protection
Sub InhibeOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = False End Sub Le code pour rendre accessible litem Outils Protection Sub AfficheOutilsProtection() CommandBars(1)Controls(6)Controls(6)Enabled = True End Sub
Supprimer laffichage dun menu (ou reacuteafficher)
Supprimer lintituleacute Outils de la barre de menus
Le code pour supprimer lintituleacute Outils de la barre de menus Sub SupprimeIntituleOutils() CommandBars(1)Controls(6)Visible = False End Sub Le code pour reacuteafficher lintituleacute Outils dans la barre de menus Sub ReinstalleIntituleOutils() CommandBars(1)Controls(6)Visible = True
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End Sub
Seacutelection dans une feuille de calcul (agrave laide du code VBA)
Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes VBA pour effectuer
diffeacuterents types de seacutelection de cellules
Seacutelection dune plage avec la souris
Seacutelection dune plage
Seacutelection de 2 plages (non contiguumles)
Seacutelection de deux colonnes non contiguumles
Seacutelection de cellules caracteacuteristiques (par ex cellules eacutegales agrave 20)
Seacutelection de cellules vers le bas depuis la cellule active (Ctrl+Shift+Bas)
Seacutelection de cellules vers le haut depuis la cellule active (Ctrl+Shift+Haut)
Seacutelection de cellules vers la droite depuis la cellule active (Ctrl+Shift+Droit)
Seacutelection de cellules vers la gauche depuis la cellule active (Ctrl+Shift+Gauche)
Seacutelection de cellules dans la plage courante depuis la cellule active
Seacutelection de cellules contigues dans la colonne de la cellule active
Seacutelection de cellules contigues dans la ligne de la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Seacutelection dune plage avec la souris
Permet de seacutelectionner une plage avec la souris (Meacutethode InputBox) Sub SelectionPlageAvecSouris() Dim Plage As Range Set Plage = ApplicationInputBox(Seacutelectionnez une plage Seacutelection de cellules Type=8) MsgBox (La plage que vous avez seacuteleacutectionnez est amp PlageAddress) End Sub
Seacutelection dune plage
Permet de seacutelectionner la zone en cours par rapport agrave la cellule active Sub SelectionPlage() ActiveCellCurrentRegionSelect MsgBox (La plage seacutelectionneacutee est amp SelectionAddress) End Sub
Seacutelection de 2 plages (non contiguumles)
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Permet de seacutelectionner deux plages discontinues (Plage A1Ax et C1Cx) Sub SelectionDiscontinue() Dim Z1 Z2 MaPlageMultiZone As Range Worksheets(Feuil1)Select Range(A1)Select ActiveCellEnd(xlDown)Select Zone1 = ActiveCellAddress SelectionOffset(0 2)Select Zone2 = ActiveCellAddress Set Z1 = Range(A1 Zone1) Set Z2 = Range(C1 Zone2) Set MaPlageMultiZone = Union(Z1 Z2) ZoneSelection = MaPlageMultiZoneSelect End Sub
Seacutelection de deux colonnes non contiguumles
Permet de seacutelectionner deux colonnes A et D par exemple Sub SelectionDeuxColonnesNonContigues() Soit les colonnes A (1) et D (4) agrave seacutelectionner NCol1 = 1 NCol2 = 4 Union(Cells(1 NCol1) Cells(1 NCol2))EntireColumnSelect End Sub
Seacutelection de cellules caracteacuteristiques
(par ex cellules eacutegales agrave 20)
Permet de seacutelectionner toutes les cellules dont la valeur est 20 Sub CellulesValeurDeterminee() La valeur 20 est saisie en E2 LaValeur = Range(E2)Value Range(A1)Select For Each Cll In ActiveCellCurrentRegion If CllValue = LaValeur Then plg = plg amp CllAddress() amp Next Cll If Len(plg) gt 0 Then Range(Left(plg Len(plg) - 1))Select End Sub
Seacutelection de cellules vers le bas depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlDown))Select
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End Sub
Seacutelection de cellules vers le haut depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlUp))Select End Sub
Seacutelection de cellules vers la droite depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToLeft))Select End Sub
Seacutelection de cellules vers la gauche depuis la cellule active
Sub SelectDown() Range(ActiveCell ActiveCellEnd(xlToRight))Select End Sub
Seacutelection de cellules dans la plage courante depuis la cellule active
Sub SelectCurrentRegion() ActiveCellCurrentRegionSelect End Sub
Seacutelection de cellules contigues dans la colonne de la cellule active
Sub SelectActiveColumn() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la ligne 1 On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlUp) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlDown) Range(TopCell BottomCell)Select End Sub
Seacutelection de cellules contigues dans la ligne de la cellule active
Sub SelectActiveRow() If IsEmpty(ActiveCell) Then Exit Sub Ignore error si Activecell est dans la colonne A On Error Resume Next If IsEmpty(ActiveCellOffset(-1 0)) Then Set TopCell = ActiveCell Else Set TopCell = ActiveCellEnd(xlToLeft) If IsEmpty(ActiveCellOffset(1 0)) Then Set BottomCell = ActiveCell Else Set BottomCell = ActiveCellEnd(xlToRight) Range(TopCell BottomCell)Select End Sub
Seacutelection dune colonne entiegravere par rapport agrave la cellule active
Sub SelectEntireColumn() SelectionEntireColumnSelect End Sub End Sub
Seacutelection dune ligne entiegravere par rapport agrave la cellule active
Sub SelectEntireRow() SelectionEntireRowSelect End Sub
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Commandes codes fonctions etc agrave utiliser dans vos applications
Page mise agrave jour le 28032001
Adapter la largeur dune colonne en fonction de son contenu
Colums(A)AutoFit
Afficher un message ordinaire
MsgBox(Vous ecirctes le bienvenu)
Afficher un message dans la barre de status
ApplicationStatusBar=Programme en cours dexeacutecution
Copier les donneacutees issues dun filtre automatique vers une autre feuille
Sheets(Feuil1)AutoFilterRangeCopy Sheets(Feuil2)Range(A1)
ou
Sheets(Feuil1)Range(_FilterDatabase)Copy Sheets(Feuil2)Range(A1)
Deacutefinir limprimante par deacutefaut
ActivePrinter=Canon LBP-465 sur LPT1
Deacutefinir la ligne de titre
ActiveSheetPageSetUpPrintTitleRows=$1$1
Deacutelimiter du texte dans une cellule
ActiveCellWrapText=True
Documenter une fonction personnaliseacutee
ApplicationMacroOptions InsereCheminClasseur Reacutecupegravere le chemin du
classeur
InsereCheminClasseur Nom de la fonction
Reacutecupegravere le chemin du classeur Deacutefinition de la fonction
Figer le deacutefilement de leacutecran
ApplicationScreenUpdating=False
Inseacuterer un commentaire dans une cellule (non VBA)
=SOMME(A10A11)+N(Ceci est un commentaire)
Inseacuterer la formule SOMME agrave une position variable
Range(A1)End(xlDown)Offset(1 0)Value = =SUM(A1 amp Range_
(A1)End(xlDown)Address amp )
Redeacutefinir la plage pour utiliser la combinaison de touches Ctrl+Fin
Lorsque lon supprime des lignes ou colonnes Excel garde toujours la mecircme
reacutefeacuterence de la derniegravere cellule utiliseacutee bien quelle soit vide
Pour remeacutedier agrave cela une ligne de code
ActiveSheetUsedRange
Seacutelectionner la plage utiliseacutee dans une feuille de calcul
ActiveSheetUsedRangeSelect
Seacutelectionner la plage en cours sans prendre en compte la ligne de titres
With SelectionCurrentRegion
Intersect(Cells Offset(1))Select
End With
Seacutelectionner la zone en cours
Nota La zone en cours est une plage limiteacutee par toute combinaison de
lignes et de colonnes vides
Range(A1)CurrentRegionSelect
Somme dune plage variable (Non VBA)
Nota La plage se situe dans la colonne A (A1 agrave Ax) et celle-ci possegravede un titre =SOMME(DECALER(A2NB(AA)-1-NB(AA)-1))
Trouver la premiegravere ligne vide
Cette commande permet de trouver dans une plage la premiegravere ligne vide
NoLgn = ActiveSheetUsedRangeRow + ActiveSheetUsedRangeRowsCount
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Cette commande permet de trouver dans une colonne (A) la premiegravere ligne vide
premLiVide = Columns(1)Find( [A65536] xlByRows xlNext)Row
Des programmes de toutes sortes Page mise agrave jour le 3052002
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Reacutecupeacuterer le nom de login (reacuteseau)
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Reacutecupeacuterer le contenu dune variable denvironnement (SET)
Ce programme permet de reacutecupeacuterer une variable denvironnement (voir DOS
pour deacutetail sur commande SET)
Dans cet exemple la variable AU_LOCAL_DIR me retourne un chemin
(diffeacuterent suivant les utilisateurs) ougrave je trouve un fichier agrave traiter avec Excel Ce chemin est du type AU_LOCAL_DIR=frenaudaudrostmp
Le code
Code de la proceacutedure RechercheVariableEnvironnement
Sub RechercheVariableEnvironnement() Deacuteclaration des variables Dim EnvString Indx Msg PathLen Indx = 1 Initialise lindex agrave 1 Do Extrait la variable denvironnement (AU_LOCAL_DIR) EnvString = Environ (Indx) Veacuterifie lentreacutee AU_LOCAL_DIR If Left (EnvString 13 ) = AU_LOCAL_DIR= Then Extrait la longueur et met lentreacutee dans une variable PathLen = Len ( Environ ( AU_LOCAL_DIR )) Msg = Mid (EnvString 14 PathLen) Exit Do Else Pas dentreacutee AU_LOCAL_DIR donc on increacutemente Indx = Indx + 1 End If Loop Until EnvString =
If PathLen gt 0 Then MsgBox Msg Affiche le message frenaudaudrostmp Else MsgBox Il nexiste pas de variable amp denvironnement AU_LOCAL_DIR End If End Sub
Reacutecupeacuterer le nom de login (reacuteseau)
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Cette fonction permet de reacutecupeacuterer le nom de login (et non pas le nom
dutilisateur deacuteclareacute dans Excel)
Le code
Code de la fonction GetUserName
Declare Function WNetGetUser Lib mprdll Alias WNetGetUserA ( ByVal lpName As String _
ByVal lpUserName As String lpnLength As Long ) As Long Const NoError = 0 Function GetUserName () Const lpnLength As Integer = 255 Dim status As Integer Dim lpName lpUserName As String lpUserName = Space$ (lpnLength + 1 )
status = WNetGetUser(lpName lpUserName lpnLength) If status = NoError Then lpUserName = Left$ (lpUserName InStr (lpUserName Chr ( 0 )) - 1 ) Else MsgBox Impossible dobtenir le login End End If GetUserName = lpUserName End Function
Code de la proceacutedure AfficheLogin
Sub AfficheLogin() MsgBox GetUserName End Sub
Reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette proceacutedure permet de reacutecupeacuterer une valeur stockeacutee dans la base de registre
Cette valeur est stockeacutee dans la cleacute HKEY_CURRENT_USERSoftwareVB and VBA Program Settings
Jutilise personnellement cette proceacutedure pour increacutementer un numeacutero de facture
LectureEcriture dans la base de registre
Private Sub LectureRegistry() Lecture des infos dans la base de registre Call InfoRegistry Reacutecupeacuteration du Ndeg de facture NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Increacutementation du Ndeg de facture NumFac = NumFac + 1 Ecriture de la nouvelle valeur NumFac dans la base de registre SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=NumFac End Sub
Private Sub InfoRegistry() Lecture de la valeur dans la base de registre NumFac = GetSetting (appname= Facture Grand Cregraves section= NumFacture key= Numeacutero ) Si aucune valeur nest preacutesente dans la base de registre If NumFac = Then Numdepart = InputBox( Indiquer le Ndeg de votre derniegravere facture manuelle Initialisation du numeacutero de facture ) Si on clique sur le bouton Annuler fin de proceacutedure If Numdepart = Then End Sinon on inscrit le numeacutero saisi dans la boicircte de dialogue SaveSetting appname= Facture Grand Cregraves section= NumFacture key= Numeacutero setting=Numdepart
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
End If End Sub
Effacement de la cleacute dans la base de registre
Sub EffaceRegistry() Effacement de la cleacute dans la base de registre On Error Resume Next DeleteSetting Facture Grand Cregraves End Sub
Echanges de donneacutees entre Excel et Word Page mise agrave jour le 28032001
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Word ou reacutecupeacuterer des donneacutees Word dans Excel
Ces exemples fonctionnent avec Word et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets de Word
Dans Excel choisissez la commande Reacutefeacuterences du menu Outils de Visual Basic Editor et cochez Microsoft Word 90 Object Library
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Copier des donneacutees Excel dans un nouveau document Word (format tabulation)
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Reacutecupeacuterer les donneacutees dun document Word et les copier dans Excel
Ce programme permet daller chercher des donneacutees dans un document Word de les copier de les coller dans Excel et de refermer Word
Sub DonneacuteesWordVersExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication AppWordShowMe AppWordVisible = True Ouvre le document Word (Fichierdoc) et effectue une copie des donneacutees
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Set DocWord = AppWordDocumentsOpen( cExcelFichierdoc ReadOnly= True ) With AppWord SelectionWholeStory SelectionCopy End With Copie des donneacutees dans Excel ThisWorkbookWorksheets( Feuil1 )Paste Fermeture de Word AppWordApplicationQuit ApplicationCutCopyMode = False End Sub
Les donneacutees Word La copie dans Excel
Copier des donneacutees Excel dans un document Word (format tableau)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees sous forme de tableau
Sub EnvoyerDonneesExcelVersWord() Dim DocWord As WordDocument Dim AppWord As WordApplication
Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc ReadOnly= False ) Copie les donneacutees Excel ThisWorkbookWorksheets( Feuil1 )Range( A1B6 )Copy Colle les donneacutees dans Word DocWordRangePasteSpecial ApplicationCutCopyMode = False DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un document Word (format tabulations)
Ce programme permet de copier des donneacutees dExcel douvrir un document Word et dy coller les donneacutees Les donneacutees eacutetant seacutepareacutees par des tabulations
Sub CopierDonneesExcelVersWord() Range( A1B6 )Copy Set WW = CreateObject ( wordapplication ) WWVisible = True
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
WWDocumentsAdd WWSelectionPasteSpecial Link= False DataType=wdPasteText Placement= _ wdInLine DisplayAsIcon= False End Sub
Les donneacutees Excel La copie dans Word
Copier des donneacutees Excel dans un tableau Word afin de le compleacuteter
Ce programme permet de copier des donneacutees dExcel douvrir un document Word existant dajouter une ligne au tableau existant dans Word et de compleacuteter chaque cellule de la ligne creacuteer
Sub RemplirTableauWordDepuisDonneacuteesExcel() Dim DocWord As WordDocument Dim AppWord As WordApplication Set AppWord = New WordApplication ApplicationDisplayAlerts = True AppWordShowMe AppWordVisible = True Ouvre le document Word Set DocWord = AppWordDocumentsOpen( cexcelFichierdoc _ ReadOnly= False )
Copie les donneacutees Excel Contrats_ISBN = Range( A2 )Value Contrats_Titre = Range( B2 )Value Contrats_Nom = Range( C2 )Value Colle les donneacutees dans Word DocWordTables( 1 )RowsAdd Derligne = DocWordTables( 1 )RowsCount With DocWordTables( 1 ) Cell(Derligne 1 )RangeInsertAfter Contrats_ISBN Cell(Derligne 2 )RangeInsertAfter Contrats_Titre Cell(Derligne 3 )RangeInsertAfter Contrats_Nom End With DocWordApplicationActiveDocumentSave AppWordApplicationQuit End Sub
Le tableau Word avant mise agrave jour
Les donneacutees Excel agrave copier dans le tableau Word
Le tableau Word apregraves mise agrave jour
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Echanges de donneacutees entre Excel et Access Page mise agrave jour le 1082002
Vous trouverez dans cette rubrique des exemples de programmes permettant denvoyer
des donneacutees Excel vers Access de reacutecupeacuterer des donneacutees dAccess dans Excel ou de mettre agrave jour des enregistrements dans Access depuis Excel
Ces exemples fonctionnent avec Access et Excel 2000 Ils nont pas eacuteteacute testeacute sous la
version 97
Pour que ces exemples fonctionnent vous devrez creacuteer une reacutefeacuterence de bibliothegraveques
dobjets daccegraves
aux donneacutees de Microsoft (DAO) Dans Excel choisissez la commande Reacutefeacuterences du
menu Outils de Visual Basic Editor et cochez Microsoft DAO 36 Object Library
Un lien inteacuteressant (mes sources) traitant de External Data Access with DAO (Data Access Objects) and ADO (ActiveX Data Objects)
Envoyer les donneacutees dune feuille Excel vers une table Access
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une
requecircte
Mettre agrave jour un enregistrement dans Access depuis Excel
Envoyer les donneacutees dune feuille Excel vers une table Access
Ce programme permet de copier les donneacutees dune feuille de calcul Excel vers une table Access
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table recevant les donneacutees Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel dougrave lon exporte les donneacutees --gt DAOSheet
Sub WritingWorksheetData_DAO() Dim Plage As Range Dim Array1 As Variant Dim x As Variant
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Commandesmdb Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Factures dbOpenDynaset) Deacutetermination de la taille de la plage agrave envoyer vers Access Set Plage = Worksheets( DAOSheet )Range( A1 )CurrentRegionOffset( 1 0 ) Set Plage = PlageResize(PlageRowsCount - 1 PlageColumnsCount) PlageSelect Lecture de la plage pour renvoyer une valeur contenant un tableau Array1 = PlageValue Ecriture des donneacutees depuis Excel vers les enregistrement de la table Factures For x = 1 To UBound (Array1 1 ) With Rs1
AddNew Fields( NoFacture ) = Array1(x 1 ) Fields( Client ) = Array1(x 2 ) Fields( Date ) = Array1(x 3 ) Fields( Solde ) = Array1(x 4 ) Update End With Next Fermeture de la base Commandesmdb Db1Close Effacement des donneacutees copieacutees vers la base (sauf les titres) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents End Sub
Les donneacutees Excel
Les donneacutees copieacutees dans la table Factures
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb )
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table Set Rs1 = Db1OpenRecordset( Name = Factures Type =dbOpenDynaset) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
Reacutecupeacuterer les donneacutees dune table Access dans une feuille de calcul Excel via une requecircte
Ce programme permet de reacutecupeacuterer les donneacutees dune table Access par lintermeacutediare dune requecircte et de les copier dans une feuille Excel
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave reacutecupeacuterer dans Excel --gt Factures Champs de la table Factures --gt NoFacture Client Date et Solde Nom de la requecircte --gt Factures pour un client Code SQL --gt SELECT FacturesNofacture FacturesClient FacturesDate FacturesSolde FROM Factures WHERE (((FacturesClient) Like ALLEE DES VINS)) Feuille de calcul Excel recevant les donneacutees de la table --gt DonneacuteesDataBase
Sub CopyFromRecordset_DAO() Dim Db1 As Database Dim Rs1 As Recordset Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Ouverture de la table Factures Un objet Recordset repreacutesente les enregistrements dune table
Set Rs1 = Db1OpenRecordset( Name = Factures pour un client Type =dbOpenSnapshot) Effacement des donneacutees existantes dans la WorkSheet (sauf les titres) et copie des enregistrements With Worksheets( DonneacuteesDataBase )Range( A2 ) With SelectionCurrentRegion Intersect(Cells Offset( 1 ))Select End With SelectionClearContents CopyFromRecordset Rs1 End With Fermeture de la Base de donneacutees
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Db1Close End Sub
Les donneacutees de la table Factures
Les donneacutees reacutecupeacutereacutees dans la feuille Excel
La requecircte Factures pour un client en mode Creacuteation
Mettre agrave jour un enregistrement dans Access depuis Excel
Ce programme permet de mettre agrave jour dans la table Factures le champ (Solde) correspondant agrave lenregistrement dont le Ndeg de facture est eacutegal agrave la variable NdegFacture
Deacutefinition des eacuteleacutements utiliseacutes Nom de la base de donneacutees --gt Commandesmdb Table posseacutedant les donneacutees agrave mettre agrave jour --gt Factures Champ de la table Factures agrave mettre agrave jour --gt Solde Recherche agrave partir du --gt NoFacture Note Afin de proposer les 2 possibilteacutes de syntaxe lexemple se propose de tester quel est le type de la variable Nofacture car la syntaxe est diffeacuterente suivant que la variable est un nombre (vbInteger) ou une chaicircne (vbString)
Sub UpdateDataAccess_DAO()
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
Dim Db1 As Database TypeVariable = VarType (NumFacture) Ouverture de la base de donneacutees Set Db1 = DBEngineOpenDatabase(ThisWorkbookPath amp Commandesmdb ) Mise agrave jour de lenregistrement If TypeVariable = 2 Then La variable Numfacture est de type vbInteger (2) Db1Execute UPDATE Factures SET Solde= Oui WHERE NoFacture = amp NumFacture Else La variable Numfacture est de type vbString (8) Db1Execute UPDATE Factures SET Solde = Oui WHERE NoFacture = amp NumFacture amp End If Db1Close End Sub
Teacuteleacutechargement
Page mise agrave jour le 23042001
Vous trouverez sur cette page des exemples preacutesenteacutes dans les diffeacuterentes rubriques et
disponibles en teacuteleacutechargement
Exemples preacutesents sur le site Fichier Archive
Boite de dialogue avec case agrave cocher
Boite de dialogue avec boutons doptions
Boite de dialogue avec liste deacuteroulante
Boite de dialogue avec liste deacuteroulante modifiable
Boite de dialogue avec liste deacuteroulante modifiable simplifieacutee
Boite de dialogue avec liste deacuteroulante agrave seacutelection multiple
Boite de dialogue avec liste deacuteroulante agrave deux colonnes
Boite de dialogue avec liste deacuteroulante combineacutee
Le controcircle Calendar (Calendrier)
Le controcircle ProgressBar version 60
Supprimer les doublons dans une colonne
top related