L’enregistrement automatique





Poursuivons sur le thème de la sécurité : La sauvegarde automatique de vos classeurs est t’elle bien paramétrée ? De quoi se prémunir des plantages du logiciel ou des incidents électriques intempestifs.


- 1 – accédez aux options du logiciel, Bouton Office / Options Excel / Enregistrement :
- 2 – Veillez à ce que la case Enregistrer les informations de récupération automatique toutes les n minutes soit cochée.
- 3 –Régler la valeur de n, un temps compris entre 10 et 20 minutes semble raisonnable

- 4 – Les autres options permettent de choisir :

  • Le format par défaut des classeurs pour les utilisateurs désireux de s’assurer l’emploie constant du mode de compatibilité (format 97-2003)
  • L’emplacement par défaut des sauvegardes automatiques
  • L’emplacement par défaut des classeurs.
  • Inhiber éventuellement la sauvegarde automatique pour le classeur en cours
- 5 – En cas de problème, Excel vous proposera lors du redémarrage (dans le panneau de gauche), de récupérer le fichier qu’il a enregistré automatiquement ou le fichier d’origine, faites votre choix et enregistrer le.






Une rentrée bien difficile et pas beaucoup de temps pour « Blogger » ! je vais essayer de reprendre les bonnes habitudes…Voici un petit article sur les mots de passe, de quoi
améliorer la sécurité et la confidentialité de vos données


- 1 – C’est au cours de l’enregistrement du classeur que l’on va créer le mot de passe, donc Bouton Office / enregistrer sous

- 2 – Cliquer sur le bouton Outils et sélectionner l’option : Options générales…

- 3 – Pour autoriser l’ouverture du classeur entrez un mot de passe dans la zone lecture ; pour autoriser la lecture mais pas la modification (lecture seule) entrez un mot de passe dans la zone modification. Il est évidement possible de faire les deux avec un même ou deux mots de passe différents.


- 4 – Terminer votre enregistrement

- 5 – Dans cet exemple Excel me demande le mot de passe avant l’ouverture du classeur test.xlsx

- 6 – Attention ! Il n’y aura pas de solution si vous avez malencontreusement égaré ou oublié le mot de passe

Rappel ! Un mot de passe peut être qualifié de fort s’il mélange des lettres majuscules, minuscules, des chiffres et d’autres symboles pour une longueur minimale de 8 caractères.




VBA : L’objet WebBrowser



En réponse à l’article du 2 avril 2009 sur
l’importation de tableau HTML, un lecteur me demande comment on pourrait récupérer des images se trouvant dans le dit tableau ? Evidement la méthode des données externes ne peut convenir ici, mais plusieurs méthodes permettent de réaliser ce travail…Aujourd’hui laissez moi vous présenter l’objet WebBrowser !

- 1 – Avant tous vous allez charger dans votre éditeur VBA, les bibliothèques Microsoft HTML Object Library et Microsoft Internet Controls. (Si vous n’êtes pas sur de la démarche, lisez l’article du 9 Mai 2009)

- 2 – Placez dans votre feuille de calcul, deux objets WebBrower. Pour cela utiliser la commande Développeur / Insérer / Autres contrôles…Dans la liste sélectionnez le contrôle Microsoft Web Brower, cliquez sur le bouton OK et glisser pour tracer votre contrôle. La taille et la position de l’objet n’ont pas d’importance pour l’instant.

- 3 –Comme son nom l’indique un Web Brower est simplement un navigateur Internet que l’on a ici incorporé dans notre feuille de calcul. Donc il va nous permettre d’afficher des pages web et d’en étudier le contenu…

- 4 – La première partie du programme a pour objet d’afficher une page web dans le premier web browser et de trouver des informations sur cette page, notamment le nombre et la liste des images qu’elle contient.

- 5 – La seconde partie ramène dans la feuille une image précise en adaptant la taille du webbrowser à la taille de l’image.

- 6 – Voici le code, puisse t’il vous inspirer des améliorations…

Option Explicit

Private Sub Worksheet_Activate()
'ici je lance ma procédure à l'ouverture du classeur
'à vous de choisir éventuellement un autre événements et (ou) un autre objet
Dim maPageHtml As HTMLDocument
Dim imgHtml As HTMLImg
Dim resultat As String
Dim I As Integer
Dim haut As Integer
Dim larg As Integer
'position et taille du premier webbrowser
Feuil2.WebBrowser1.Left = 1
Feuil2.WebBrowser1.Top = 1
Feuil2.WebBrowser1.Width = 400
Feuil2.WebBrowser1.Height = 200
'position du seond webbrowser
Feuil2.WebBrowser2.Left = 500
Feuil2.WebBrowser2.Top = 1
'affichons une page dans le premier webbrower
Feuil2.WebBrowser1.Navigate "http://www.olivier-picot.fr/pagetest.html"
'analysons le contenu de cette page et retournons
'son url + date de modification + taille + nombre d'images
Set maPageHtml = WebBrowser1.Document
resultat = "adresse de la source : " & maPageHtml.URL & vbLf & _
"derniere modification de la page : " & maPageHtml.LastModified & vbLf & _
"taille de la page : " & maPageHtml.fileSize & " octets " & vbLf & _
"nombre d'images dans la page : " & maPageHtml.images.Length & "."
'affichons cette information
MsgBox resultat, , "Information"
'boucle sur les images pour récupérer leurs noms et écriture dans ma feuille de cacul
For I = 0 To maPageHtml.images.Length - 1
Set imgHtml = maPageHtml.images.Item(I)
Feuil2.Cells(I + 15, 1) = imgHtml.src
Next I
'**************************************
'je recupere la taille de la seconde image de ma page
Set imgHtml = maPageHtml.images.Item(1)
haut = imgHtml.Height
larg = imgHtml.Width
'pour adapter la taille de mon webbrowser à celle de mon image
Feuil2.WebBrowser2.Width = larg
Feuil2.WebBrowser2.Height = haut
'un peu de html et l'image est récupérée
.WebBrowser2.Navigate "about:<img src="http://www.olivier-picot.fr/album2.png" />"
'il est impossible de passer des variables VBA au code HTML aussi cette méthode ne ‘permet de récupérer toutes les images d'une page sans les nommer une à une et les ‘afficher dans des webbrowser différents
End Sub





VBA : Les modules d’un projet



Modules de code, de feuilles, de classeur…les débutants sont un peu perdu dans les différents modules d’un VBAProject. Ou faut’ il écrire le code ? A quelles conditions les procédures peuvent-elles être appelées ? Ce petit schéma devrait vous aider à y voir plus clair !







VBA : Déclarations implicites des types de données



Lorsque vous déclarez vos variables vous avez l’habitude de préciser explicitement le type de données grâce au mot clé
As (Exemple Dim prenom as String). Mais savez vous que vous avez à votre disposition deux autres méthodes permettant la précision de manière implicite.

- 1 – La première méthode consiste à utiliser un suffixe correspondant au type de données :
Dim prenom$
Déclare la variable prenom de type chaîne (String).
% Integer
&
Long
!
Single
#
Double
@
Currency
$
String
- 2 – La seconde méthode utilise l’instruction DefType : Une instruction de type DefStr E-G, X signifie que toutes les variables de toutes les procédures d’un module dont les noms commencent par e, f, g ou x sont de type String. Pour cela la déclaration doit figurer dans le module général de code.
Exemple :
Option Explicit
DefStr E-G, X
Sub test()
‘il devient inutile de préciser le type de ‘ces variables
Dim ea
Dim fa
Dim ga
Dim xa
ea = "A"
fa = "B"
xa = "A"
ga = ea & fa & xa
MsgBox ga
End Sub

Liste des DefType :
DefBool Boolean
DefDbl Double
DefInt Integer
DefDate Date
DefLng Long
DefStr String
DefCur Currency
DefObj Object
DefSng Single
DefVar Variant
DefByte Byte

VBA : Les fichiers XML



Excel 2007 vous permet de travailler facilement sur vos fichiers XML, après importation du fichier dans la feuille de calcul ; il crée alors une zone de travail nommée « mappage XML ». Votre tableur devient alors un véritable éditeur de fichier XML…


- 1 – Commençons par une procédure permettant l’importation d’un fichier XML dans la feuille de calcul
Sub ImporterXML()
Dim MonFichier As XmlMap
'XmlImport est une méthode de l'objet workbook
'On choisi le fichier à importer et on définie son chemin d'accès
'On crée un Mappage
'On précise la cellule de destination
ActiveWorkbook.XmlImport _
URL:=ActiveWorkbook.Path & "\albuminfo.xml", _
Importmap:=MonFichier, _
Overwrite:=False, _
Destination:=Range("$A$3")
'Il faut attribuer un nom au mappage
MonFichier.Name = "Mes Amis 3"
End Sub


- 2 –Après modification des valeurs (Suppression ou ajout de lignes, correction d’erreurs…) dans le mappage, exportons le résultat dans un nouveau fichier XML
Sub ExportXML()
'SaveAsXMLData est une méthode de l'objet workbook
'On nomme le fichier cible à exporter et on définie son chemin d'accès
'On précise le mappage à utiliser
ActiveWorkbook.SaveAsXMLData _
Filename:=ActiveWorkbook.Path & "\albuminfo3.xml", _
Map:=ActiveWorkbook.XmlMaps("Mes Amis 3")
End Sub
Dans cet exemple j’ai supprimé toutes les lignes du mappage sauf la première.

- 3 – Le fichier XML à été modifié à l’extérieur de mon mappage Excel il nous faut donc réactualiser le mappage
Sub ActualiserXML()
'XmlMaps est une méthode de l'objet workbook permettant la gestion des mappages
'XML, actualiser, supprimer, exporter
ActiveWorkbook.XmlMaps("Mes Amis 3").Import _
"C:\Documents and Settings\User\Mes documents\albuminfo.xml"
End Sub





De nouveau une question au sujet de l’article du 6 Juin 2009 sur la suppression de lignes en fonction d’une valeur contenue dans un champ. C’est Décidément un sujet incontournable ! Cette fois un de nos lecteurs souhaiterait non pas supprimer les lignes mais plutôt les masquer ; et de plus il souhaite que la recherche de la valeur se passe dans toute la feuille et non pas dans une colonne unique. J’ai donc relevé le défi…


- 1 – Considérons la liste (A1 :E20), je souhaite (par exemple) masquer toute les lignes qui contiennent le mot France, quelque soit la colonne dans laquelle il se trouve.


- 2 – Voici le code, charge à vous de l’adapter…
Option Explicit
Option Base 1
Sub recherche2()
Dim i As Integer
Dim j As Integer
Dim lignefin As Integer
Dim recherche As String
Dim contenu As String
Dim tab_compare(5)
Dim compare As Long
recherche = InputBox("Veuillez entrer la valeur cherchée ?", "Welcome", "")
'La valeur saisie est transmise à la variable recherche
With ThisWorkbook.Sheets(1)
'détermination du nombre de lignes dans la base
'le nombre de colonnes est en général connu
Range("A2").Select
Range(Selection, Selection.End(xlDown)).Select
lignefin = Selection.Rows.Count
'pour chaque cellule de la base
For i = 2 To lignefin + 1
For j = 1 To 5
'on parcourt, on stocke le contenu de la cellule et on compare avec la valeur saisie
Cells(i, j).Select
contenu = Cells(i, j).Value
'la fonction InStr(chaîne1, chaîne2) permet de vérifier la présence de chaîne2 dans chaîne1
'et retourne l'occurrence de la première position de la comparaison donc 0 si chaîne2 est ‘pas présente dans chaîne1

compare = InStr(1, contenu, recherche)
'pour chaque comparaison on stocke le résultat dans un tableau
If compare = 0 Then
tab_compare(j) = "Y"
Else
tab_compare(j) = "N"
End If
'il faut cinq résultats positifs pour décider de masquer la ligne
If tab_compare(1) = "Y" And tab_compare(2) = "Y" And tab_compare(3) = "Y" _
And tab_compare(4) = "Y" And tab_compare(5) = "Y" Then
Rows(i).Select
Selection.EntireRow.Hidden = True
End If
Next j
Next i
End With
End Sub
‘************************************************************
Sub Remettre()
'prévoir une macro pour réafficher les lignes
Rows("1:21").Select
Selection.EntireRow.Hidden = False
End Sub

 
- 3 – Voici le résultat après exécution de la procédure recherche2 () que j’ai attaché au bouton Recherche, la procédure Remettre() que j’ai attacher au bouton Réafficher permet de faire réapparaitre les lignes masquées.




VBA : L’horoscope chinois



Dans le prolongement de l’article précédent, je vous propose un algorithme très simple pour le calcul de votre signe astrologique chinois…



- 1 – Ouvrez un nouveau classeur et réalisez le tableau suivant, puis ajouter le bouton de commande Développeur / Contrôles / Insérer / contrôles de formulaire

- 2 – Réaliser un formulaire VBA (TestDate) conforme au modèle ci dessous

- 3 - Affecter la macro OuvrirFormulaire() (que vous avez saisie dans une feuille de module de code) au bouton de commande de votre feuille de calcul.

- 4 – Voici le code de cette macro…
Option Explicit
Sub OuvrirFormulaire()
TestDate.Chinois.Caption = ""
TestDate.Show
End Sub

- 5 –
Le programme vous demande de saisir votre date de naissance puis de cliquer sur le bouton OK. Excel retourne alors votre l’horoscope chinois dans un label.

- 6 – Voici le code du programme :
Option Explicit
'indique que les tableaux sont numérotés à partir d'un indice i=1
Option Base 1
‘******************************************************
Private Sub CalcAge_Click()
'déclaration des variables
Dim ligne As Byte
Dim anChinois As Integer
Dim col As Byte
‘On récupère l’année dans la date de naissance par extraction des 4 caractères placés à droite
anChinois = Right(datenaissance.Value, 4)
‘Maintenant il suffit de balayer le tableau et de comparer les dates
For ligne = 2 To 13
For col = 2 To 11
If Cells(ligne, col).Value = anChinois Then
Chinois.Caption = "Vous êtes " & Cells(ligne, 1).Value & " dans l'horoscope chinois."
End If
Next col
Next ligne
End Sub
‘**********************************************************
Private Sub Sortir_Click()
'fermeture du formulaire
TestDate.Hide
End Sub



VBA : Calculer votre horoscope



Pas d’article depuis début Juillet ! Il est temps de se remettre au travail ; mais comme la période est encore estivale, je vous propose un petit jeu destiné au calcul de son horoscope solaire. De quoi se familiariser avec les fonctions dates d’Excel.


- 1 – Ouvrez un nouveau classeur et réalisez le tableau suivant, puis ajouter le bouton de commande Développeur / Contrôles / Insérer / contrôles de formulaire

- 2 – Réaliser un formulaire VBA (TestDate) conforme au modèle ci dessous

- 3 – Affecter la macro OuvrirFormulaire() (que vous avez saisie dans une feuille de module de code) au bouton de commande de votre feuille de calcul.

- 4 – Voici le code de cette macro…
Option Explicit
Sub OuvrirFormulaire()
With TestDate
.age.Caption = ""
.journaissance.Caption = ""
.Signe.Caption = ""
.datenaissance.Value = ""
End With
TestDate.Show
End Sub

- 5 – Le programme affiche en permanence la date et l’heure courante. Il faut saisir sa date de naissance puis cliquer sur le bouton OK. Excel retourne alors votre âge, votre jour de naissance et votre signe de l’horoscope solaire dans 3 labels différents

- 6 – Voici le code du programme :
Option Explicit
'indique que les tableaux sont numérotés à partir d'un indice i=1
Option Base 1
‘************************************************
Private Sub CalcAge_Click()
'déclaration des variables
Dim dn As Date
Dim dj As Date
Dim dateSigne As Date
Dim NumJourSemaine As Byte
Dim JourSemaine As String
Dim ligne As Byte
Dim TableJourSemaine
'*****************************************
'Calcul et affichage de l'âge avec arrondi
dj = Date
dn = datenaissance.Value
age.Caption = "Vous avez " & Int((dj - dn) / 365.25) & " ans."
'*****************************************
'Calcul et affichage du jour de naissance
‘remplissage du tableau des jours de la semaine
TableJourSemaine = Array("Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi")
‘Weekday(n) retourne le n° d’ordre du jour dans la semaine
NumJourSemaine = Weekday(dn)
‘en fonction du numéro d’ordre le selon que va nous donner le jour
Select Case NumJourSemaine
Case 1
JourSemaine = TableJourSemaine(1)
Case 2
JourSemaine = TableJourSemaine(2)
Case 3
JourSemaine = TableJourSemaine(3)
Case 4
JourSemaine = TableJourSemaine(4)
Case 5
JourSemaine = TableJourSemaine(5)
Case 6
JourSemaine = TableJourSemaine(6)
Case 7
JourSemaine = TableJourSemaine(7)
End Select
journaissance.Caption = "Vous êtes né un " & JourSemaine & "."
'***********************************************************
'calcul et affichage de l'horoscope solaire
ligne = 2
‘il faut transformer la date saisie en une date d’année type, 2009 par exemple car le tableau du classeur correspond à une seule année
dateSigne = CDate(Left(CStr(datenaissance.Value), 6) & "2009")
While ligne >= 2 And ligne <= 13 If dateSigne >= Cells(ligne, 2).Value And dateSigne <= Cells(ligne, 3).Value Then Signe.Caption = "Vous êtes du " & Cells(ligne, 1).Value & " dans l'horoscope solaire."
Exit Sub
Else
‘il faut bloquer le passage à l’année suivante
If dateSigne >= 22 / 12 / 2009 Or dateSigne <= 20 / 1 / 2009 Then Signe.Caption = "Vous êtes du Capricorne dans l'horoscope solaire."
End If
ligne = ligne + 1
End If
Wend
End Sub
‘******************************************************
Private Sub Sortir_Click()
'fermeture du formulaire
TestDate.Hide
End Sub
‘********************************************************
Private Sub UserForm_Activate()
'affichage de la date et de l'heure courante
datejour.Caption = "Aujourd'hui : " & Date & " à " & Time
End Sub





VBA : Envoyer un Email via Outlook 2007



Le dernier article nous a permis d’appréhender la relation entre Excel et un navigateur Web, voici comment gérer la relation entre Excel et votre messagerie Outlook…


- 1 – Dans cet exemple l’utilisateur veut à partir de son classeur actif, envoyer par mail un autre classeur Excel qu’il choisira sur son disque dur. Le programme lui demandera l’adresse Email du destinataire puis effectuera l’envoie en arrière plan.
 
- 2 – Pour un bon fonctionnement du programme vous aurez bien sur au préalable chargé la bibliothèque des objets Outlook. (Si vous n’êtes pas sur de la démarche, lisez l’article du 9 Mai 2009)

- 3 –Voici le code, à vous de l’adapter.
Sub envoiEmail()
Dim appOutlook As Outlook.Application
Dim message As Outlook.mailitem
Dim Adresse As String
Dim ouverture$
On Error GoTo sierreur:
'Lance une session OutLook
Set appOutlook = CreateObject("outlook.Application")
'Demande de l'adresse email du destinataire
Adresse = InputBox("Entrez une adresse Email ?", "Envoyer un Email")
'Crée un nouveau message
Set message = appOutlook.createitem(olMailItem)
With message 'paramétrons le message
.Subject = "ENVOYER UN MAIL A PARTIR D'EXCEL"
'Paramétrage du champ Objet :
.Body = "Ceci est le corps du message" & Chr(13) & "Cordialement" & Chr(13) & "Olivier"
'Paramétrage du corps du texte contenu et signature
.BodyFormat = olFormatHTML
'Choix du format du message ici html
.Recipients.Add (Adresse)
'Ajout de l'adresse dans le champ A...
ouverture = Application.GetOpenFilename( _
filefilter:="Fichiers Excel (*.xls),*.xls", _
Title:="Ouvrir", _
MultiSelect:=False)
Workbooks.Open ouverture
'Ouverture du classeur choisi pour être envoyé en pièce jointe
.Attachments.Add ouverture
'Paramétrage du champ Attaché :
.send
'Envoie du message
ActiveWorkbook.Close
'Fermeture du classeur choisi pour être envoyé en pièce jointe
End With
appOutlook.Quit
'fermeture de Outlook
Set appOutlook = Nothing
'J’ai du gérer l'erreur du au clic sur le bouton annuler du inputbox
sierreur:
MsgBox "Vous devez saisir une adresse Email" & Chr(10) _
& "puis cliquer sur OK", vbOKOnly + vbCritical, "ATTENTION"
End Sub




top