|
Bonjour,
Après plusieurs mois d'absences, me voila de retour. Depuis l'Essonne,
mon nouveau département et la Beauce, ma nouvelle région j'essaierais
de poursuivre cette lettre d'astuces. Même s'il me manque le soleil
(et la pluie) du Tarn (le pays que j'ai adopté et qui a adopté
toute ma famille) je tâcherais de vous l'apporter dans ces lettres
chaque mois.
Merci à tous ceux qui m'ont envoyé un petit mot d'encouragement
et à qui je n'ai pu répondre par manque de temps et parfois de
connexion à Internet
Limiter le nombre d'enregistrements à un seul
Il est parfois utile de créer une table contenant des informations
de configuration, il n'y aura alors qu'1 seul enregistrement. Cet
enregistrement débutera
par une rubrique de type AutoNumérique dénommée
IDparam (par exemple).
Sur la propriété de ce champ : <2
La fonction RECHERCHEV
Cette fonction permet de rechercher une valeur dans une liste
de donnée. Cette recherche est effectuée dans la
colonne de gauche de la liste, lorsqu'elle est trouvée,
Excel se déplace
vers la droite sur la même ligne et lit la valeur dans la
colonne indiquée.
Les paramètres dont elle a besoin sont donc :
- valeur_cherchée : la valeur
recherchée
- table_matrice : la plage dans
laquelle la valeur est recherchée
- no_index_col : l'index de la
colonne renvoyant la donnée
- valeur_proche: VRAI pour
rechercher la valeur la plus proche dans la 1ère colonne
de la plage et FAUX pour rechercher
la valeur exacte.
Pour fonctionner correctement la fonction a besoin d'une certaine
structure :
- La colonne dans laquelle doit se faire la recherche doit être
la 1ère colonne de la plage.
- la plage doit contenir la colonne renvoyant la donnée.
- la 1ère colonne de la plage a l'index 1.
Par exemple dans une liste contenant les champs Date, Produit,
Prix unitaire, Taux TVA, Nombre, respectivement dans les colonnes
A, B, C, D, E et la ligne 1, les données s'étendant
jusqu'à la ligne 100. Pour rechercher :
- le prix unitaire à partir du Produit, table_matrice doit être
au moins B1:C100 et no_index_col est
2.
- le nombre à partir de la date, table_matrice doit être
au moins A1:E100 et no_index_col est
6.
Les fonctions INDEX et EQUIV
La fonction précédente comme vous le constatez à ces
limites : la colonne de recherche doit se trouver à gauche
de la colonne de résultat. Pour palier à ceci vous
pouvez utilisez conjointement 2 fonctions :
- EQUIV, qui va vous
donner l'emplacement d'une valeur dans une colonne ou une ligne,
- INDEX, qui renvoie une donnée d'une liste (en ligne ou colonne)
à partir de sa position dans la liste.
Reprenons l'exemple précédent :
| Date |
Produit |
Prix unitaire |
Taux TVA |
Nombre |
01/10/2004 |
aa |
10,50 |
5,5% |
10 |
02/10/2004 |
zz |
2,50 |
5,5% |
125 |
05/11/2004 |
bb |
3,00 |
19,6% |
23 |
03/10/2004 |
dd |
50,25 |
19,6% |
5 |
Si vous voulez savoir quel est le produit vendu à 3,00 € (attention
cela ne me donnera que le 1er produit à ce prix s'il y en a plusieurs
tout comme RECHERCHEV), procédez ainsi :
- Dans une cellule, par exemple F1, tapez 3 (c'est à dire la
valeur à rechercher)
- Dans une autre cellule, par exemple G1,
tapez la formule suivante en considérant que le tableau ci-dessus
se trouve en A1:E5 :
=EQUIV(F1;C1:C5;0)
F1 est la valeur que vous recherchez
C2:C5 est le tableau dans lequel vous recherchez la valeur,
ici je n'inclue pas les titres
0 doit être mis pour rechercher une valeur exacte (pour les autres
valeurs voir l'aide)
- Cette formule vous renverra 3 car la valeur 3 se trouve en
3ème position dans la plage C2:C5
- Dans une cellule, par exemple H1, tapez la formule suivante
:
=INDEX(B2:B5;G1)
B2:B5 est le tableau dans lequel je veux lire le résultat (tout
comme pour la recherche je n'inclue pas les titres). Ce tableau
doit avoir la même dimension que celui dans lequel on a effectué
la recherche.
G1 représente la position où je dois lire la donnée dans ce tableau,
ici la 3ème position. Ce qui vous donne bien bb
Vous pouvez combiner ces 2 fonctions en utilisant la formule suivante
:
=INDEX(B2:B5;EQUIV(F1;C1:C5;0))
Un formulaire avec photo
Soit une liste de données dans Excel, celle-ci comprenant
un champ (colonne) contenant l'adresse d'une photo sur votre disque
PC (exemple : liste des produits avec code (A1), intitulé (B1),
photo (C1), Nb en stock (D1) sur la feuille BD). Vous pouvez dans
une autre feuille
établir un formulaire qui affiche les données du
produit lorsque vous indiquer un code. Je rappelle que dans la
liste de données le champ Photo doit contenir l'adresse (chemin)
de la photo et non la photo elle-même.
Votre formulaire pourrait alors ressembler à ceci :
|
A |
B |
C |
1 |
Code |
AFG |
|
2 |
|
|
Photo |
3 |
Intitulé |
=RECHERCHEV(B1;BD!A:D;2;VRAI) |
=RECHERCHEV(B1;BD!A:D;3;VRAI) |
4 |
|
|
|
5 |
Nb en stock |
=RECHERCHEV(B1;BD!A:D;4;VRAI) |
|
6 |
|
|
|
Ensuite ajouter un bouton sur cette feuille depuis la barre d'outils
Formulaires, affectez-lui la procédure suivante et renommez le
MAJ
Sub InsertPhoto()
Dim strChem As String, strPhoto As String
If ActiveSheet.OLEObjects.Count > 0 Then
ActiveSheet.OLEObjects(1).Delete
End If
strPhoto = Range("C3")
Range("C3").Select
ActiveSheet.OLEObjects.Add Filename:=strPhoto,
Link:=True, DisplayAsIcon:=False
End Sub
Sauvegarder une base de données Access dans la base elle-même Private Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type
Private Const FO_MOVE As Long = &H1
Private Const FO_COPY As Long = &H2
Private Const FO_DELETE As Long = &H3
Private Const FO_RENAME As Long = &H4
Private Const FOF_MULTIDESTFILES As Long
= &H1
Private Const FOF_CONFIRMMOUSE As Long = &H2
Private Const FOF_SILENT As Long = &H4
Private Const FOF_RENAMEONCOLLISION As Long = &H8
Private Const FOF_NOCONFIRMATION As Long = &H10
Private Const FOF_WANTMAPPINGHANDLE As Long = &H20
Private Const FOF_CREATEPROGRESSDLG As Long = &H0
Private Const FOF_ALLOWUNDO As Long = &H40
Private Const FOF_FILESONLY As Long = &H80
Private Const FOF_SIMPLEPROGRESS As Long = &H100
Private Const FOF_NOCONFIRMMKDIR As Long = &H200
Private Declare Function apiSHFileOperation
Lib "shell32.dll" Alias "SHFileOperationA" (lpFileOp
As SHFILEOPSTRUCT) As Long
Function fMakeBackup(strSaveChem As String, strDonnees As String)
As Boolean
Dim strMsg As String
Dim tshFileOp As SHFILEOPSTRUCT
Dim lngRet As Long
Dim lngFlags As Long
Const cERR_USER_CANCEL = vbObjectError + 1
Const cERR_DB_EXCLUSIVE = vbObjectError
+ 2
On Local Error GoTo fMakeBackup_Err
If fDBExclusive = True Then Err.Raise cERR_DB_EXCLUSIVE
strMsg = "Confirmation de
sauvegarde de la base de données?"
If MsgBox(strMsg, vbQuestion
+ vbYesNo, "SAUVEGARDE")
= vbNo Then Err.Raise cERR_USER_CANCEL
lngFlags = FOF_SIMPLEPROGRESS Or FOF_FILESONLY
Or FOF_NOCONFIRMATION
strSaveChem = "C:\sauvegarde"
With tshFileOp
.wFunc = FO_COPY
.hwnd = hWndAccessApp
.pFrom = CurrentDb.Name & vbNullChar
.pTo = strSaveChem & CurrentProject.Name & vbNullChar
.fFlags = lngFlags
End With
lngRet = apiSHFileOperation(tshFileOp)
fMakeBackup = (lngRet
= 0)
End If
Exit Function
fMakeBackup_Err:
fMakeBackup = False
Select Case Err.Number
Case cERR_USER_CANCEL
Case cERR_DB_EXCLUSIVE
MsgBox "La
base de données " & vbCrLf & CurrentDb.Name & vbCrLf & vbCrLf & "est
ouverte en exclusif. Merci de la réouvrir en
mode normal" & " puis de réessayer.", vbCritical
+ vbOKOnly, "SAUVEGARDE
ABANDONNÉE"
Case Else
strMsg
= "Information d'Erreur ..." & vbCrLf & vbCrLf
strMsg
= strMsg & "FOnction: fMakeBackup" & vbCrLf
strMsg
= strMsg & "Description: " & Err.Description & vbCrLf
strMsg
= strMsg & "Erreur #: " & Format$(Err.Number) & vbCrLf
MsgBox
strMsg, vbInformation, "SAUVEGARDE ABANDONNÉE"
End Select
End Function
le numéro de la semaine selon la norme Européenne
Public Function NoSem(UneDate As Date) As Integer
On Error Resume Next
NoSem = CInt(Format(UneDate, "ww", vbMonday, vbFirstFourDays))
End Function
Un formulaire avec des sections libres
Lorsque vous établissez un formulaire dans Word, vous ajoutez
des contrôles zones de texte, liste, case à cocher, ... afin de
permettre à l'utilisation d'entrer des données uniquement sur ces
contrôles.
Une zone de texte permet d'entrer un texte illimité mais ne permet
pas de modifier la mise en forme de cette zone lorsque le document
est protégé comme un formulaire. Pour pallier à ceci, vous pouvez
ne pas protéger une partie de votre document, dans cette dernière
l'utilisateur pourra faire ce qu'il veut comme si le document n'était
pas protégé (pratique par exemple pour un modèle de lettre ou de
rapport avec des données fixes à ne pas modifier). Dans ce cas
procédez ainsi :
- Placez vous en début de zone à laisser libre
- Insérez au moins un paragraphe vide (Appuyez sur Entrée)
Puis lorsque vous protégez votre document :
- Sélectionnez
- Cliquez sur le bouton (s'il est grisé, c'est que vous
avez oublié de faire les étapes indiquées ci-dessus)
- Décochez la section correspondant à celle devant rester libre
(dans notre cas, la section 2)
Utiliser les couleurs pour l'organisation de son emploi du temps
(à partir version XP)
Depuis la version XP (2002), on peut colorer nos différents RDV
ou évènements. Pour cela :
- Sélectionnez votre RDV
- clic-droit
- Sélectionnez
- Choisissez votre couleur
Vous pouvez renseigner directement cette couleur lorsque vous
créez votre RDV en renseignant .
Les différentes catégories proposées ne vous correspondent peut-être
pas. Pour les adapter :
- Sélectionnez un RDV
- clic-droit
- Sélectionnez
Vous ne pouvez modifier les couleurs mais changer l'intitulé des
catégories (c'est déjà cela).
|