Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

FAQ MS-AccessConsultez toutes les FAQ

Nombre d'auteurs : 140, nombre de questions : 926, dernière mise à jour : 30 mars 2017 

 
OuvrirSommaireVBAManipulation des données

Utiliser les méthodes Transfer de l'objet DoCmd.

 
Sélectionnez
DoCmd.TransferText ' Import/export/attache vers du texte 
 
Sélectionnez
DoCmd.TransferSpreadSheet ' Import/export/attache vers une feuille de calcul 
 
Sélectionnez
DoCmd.TransferDatabase ' Import/export/attache vers une autre base de données.
Créé le 1er avril 2003  par Team Access

Premier type d'extraction
Vous avez un identifiant (par exemple) composé de x lettres, d'un "-" puis de y chiffres.
Exemple : DRFS-135412
On veut incrémenter la partie numérique de l'identifiant.
On utilisera donc la fonction InStr() pour récupérer la position du caractère recherché (ici le tiret "-").
Puis, grâce aux fonctions mid() et right() nous pourrons isoler la partie numérique afin de l'incrémenter.
Voir aussi la fonction left() dans le même registre.

Autre type d'extraction
Par exemple, voici comment effacer le dernier caractère d'une chaîne de caractères :

 
Sélectionnez
Left(Tachaine,Len(Tachaine)-1)

À partir d'Access 2000, la fonction Split tranformera une chaîne de caractères en un tableau.

Mis à jour le 14 octobre 2007  par Demco

Lien : Comment travailler sur une partie d'une chaîne de caractères ?
Lien : Comment séparer des éléments d'un champ dans des champs distincts (exemple : adresse) ?
Lien : Tutoriel sur les chaînes de caractères
Lien : Tutoriel sur la classe String

Il existe différentes fonctions permettant de sélectionner une partie d'une chaîne de caractères comme les trois premières lettres ou bien les cinq dernières lettres :
len() pour connaître la longueur d'une chaîne ;
right() pour lire les x derniers caractères de la chaîne ;
left() pour lire les x derniers caractères de la chaîne.

Créé le 12 mai 2004  par Demco

Lien : Comment extraire une partie d'une chaîne de caractères ?
Lien : Comment séparer des éléments d'un champ dans des champs distincts (exemple : adresse) ?
Lien : Tutoriel sur les chaînes de caractères
Lien : Tutoriel sur la classe String

On utilise la fonction ci-dessous qui attend en paramètres la chaîne, la position de l'élément à extraire et le délimiteur. Cette fonction renvoie une chaîne vide lorsqu'elle ne peut pas procéder à l'extraction.
Dans le cas d'une extraction partielle, cette fonction est beaucoup plus rapide qu'un Split.

 
Sélectionnez
Function ExtraitElement(ChaineRecherche As String, Position As Long, Delim As String) As String
         
' Renvoie une chaîne vide si l'extraction n'est pas possible
On Error GoTo Err_Function

Dim compteur As Long, LastPos As Long, CurPos As Long

If InStr(ChaineRecherche, Delim) = 0 Or Len(ChaineRecherche) = 0 Then Exit Function
LastPos = 1
Do
    CurPos = InStr(LastPos, ChaineRecherche, Delim)
    If CurPos = 0 Then
        If compteur = Position - 1 Then ExtraitElement = Mid(ChaineRecherche, LastPos)
        Exit Do
    Else
        compteur = compteur + 1
        If compteur = Position Then
            ExtraitElement = Mid(ChaineRecherche, LastPos, CurPos - LastPos)
            Exit Do
        End If
    End If
    LastPos = CurPos + 1
Loop While CurPos > 0
Exit Function
   
Err_Function:
    MsgBox "Error " & Err.Number & " : " & Err.Description
    Resume Next

End Function
Créé le 1er janvier 2005  par Jean-Marc Rabilloud

Lien : FAQ VB


La fonction VBA StrConv permet de convertir des chaînes de caractères.

 
Sélectionnez

StrConv(String,Conversion)


Le premier paramètre correspond à la chaîne de caractères à convertir, le deuxième est le masque de conversion.
Utilisez la constante VbLowerCase pour convertir en minuscules, VbUpperCase pour convertir en majuscules,
VbProperCase pour convertir en noms propres : la première lettre de chaque mot est alors en majuscule, le reste en minuscules.

 
Sélectionnez

MsgBox StrConv("Ceci est un essai", vbProperCase)


Affiche : Ceci Est Un Essai

Mis à jour le 29 août 2006  par Team Access
 
Sélectionnez
Public Function ReplaceT(ByVal Expression As String, _
                         ByVal Find As String, _
                         ByVal Replace As String, _
                Optional ByVal Start As Long = 1, _
                Optional ByVal Count As Long = -1, _
                Optional ByVal Compare As Integer = vbTextCompare) _
                As String
               
Dim P As Long            ' Position 1er caractère à tester
Dim L As Long            ' Longueur de expression
Dim f As Long            ' Longueur de la chaîne à remplacer
Dim r As Long            ' Longueur chaîne de remplacement

 ' Argument "Start" : élimination du début de chaîne
Let L = Len(Expression)
If Start > L Then
    ' Parce que "Right$" n'accepte pas une taille négative
    Let Expression = vbNullString
ElseIf Start > 1 Then
    ' Troncature d'"Expression"
    Let Expression = Right$(Expression, L - Start + 1)
    End If

ReplaceT = Expression    ' valeur retour par défaut

 ' Argument "Find" : si chaîne vide, on retourne "Expression".
If Find = vbNullString Then Exit Function
Let f = Len(Find)

Let r = Len(Replace)    ' Taille de la chaîne de remplacement
Let P = 1                ' On commence à la première position
If Count <> 0 Then
    Do
        ' La taille d'"Expression" peut varier lors de chaque
        ' remplacement (si "Find" et "Replace" sont de longueurs
        ' différentes), c'est pourquoi l'instruction suivante
        ' est située DANS la boucle.
        Let L = Len(Expression)
        ' Position de la sous-chaîne à remplacer...
        Let P = InStr(P, Expression, Find, Compare)
        ' ... si elle y figure bien
        If P > 0 Then
            Let Expression = Left$(Expression, P - 1) + _
                             Replace + _
                             Right$(Expression, (L - P - f + 1))
            ' Décalage 1er caractère à comparer (position trouvée
            ' + taille de la chaîne de remplacement)
            Let P = P + r
            ' Un remplacement de moins à effectuer (si "Count">0)
            ' On continue indéfiniment si "Count" < 0
            Let Count = Count - 1
            End If
        ' Si le compteur atteint zéro (cas  on voulait un nombre
        ' défini de substitutions), ou s'il n'y a plus de
        ' remplacement possible, on sort.
        Loop Until (P <= 0) Or (Count = 0)
    End If
ReplaceT = Expression        ' Retour..
End Function 
Créé le 1er janvier 2005  par shwin

Lien : Comment arrondir un nombre sous Access 97 ?
Lien : Tutoriel Classe String par cafeine

Exemple de contenu d'un champ :
'12 Rue MOZART 33000 BORDEAUX'

Nous voulons séparer cette chaîne en trois parties :

  1. l'adresse
  2. le code postal
  3. la ville

Ceci ne peut se faire automatiquement. Il faut réfléchir à l'algorithme de décomposition.
Ici, nous remarquons que les deux derniers éléments sont le CP et la ville.
Nous en déduisons qu'en partant de la fin de la chaîne, le premier caractère numérique de celle-ci sera le dernier chiffre du code postal.
Nous pouvons donc isoler la ville : il ne reste alors plus que deux éléments à décomposer.
Pour cela, nous savons qu'un CP ne possède que cinq caractères, il est donc aisé de l'isoler.

Fonctions nécessaires au travail d'une chaîne de caractères : mid(), right() et left().

Créé le 1er avril 2004  par Lucifer

Lien : Comment extraire une partie d'une chaîne de caractères ?
Lien : Comment travailler sur une partie d'une chaîne de caractères ?
Lien : Tutoriel sur les chaînes de caractères
Lien : Tutoriel sur la classe String
Lien : Extraire et mettre en forme le nom de rue d'une adresse afin de faciliter la recherche.

Access 2000+ :

round(nombre,nombre de décimales)

Avant 2000 :

 
Sélectionnez
Function Arrondi(ByVal Nbre As Double, ByVal Expo As Long) As Double

    If Expo < 0 Then Arrondi = Arrondi(Nbre * 10 ^ Expo, Abs(Expo))

    Arrondi = CLng(Nbre * 10 ^ Expo) / 10 ^ Expo

End Function

Où Nbre est le nombre avec décimales, et Expo le nombre voulu de chiffres après le signe décimal.

Créé le 12 mai 2004  par Maxence HUBICHE

Vous pouvez utiliser :

 
Sélectionnez
Clng(Nb*10^n)/10^n

Où n est le nombre de décimales voulues, et Nb le nombre.

Vous obtiendrez le même résultat en utilisant :

 
Sélectionnez
Round(Nb,n)
Créé le 3 septembre 2004  par Maxence HUBICHE
 
Sélectionnez
SendKeys "{TAB}"

Attention : l'instruction SendKeys est à utiliser avec parcimonie. Pour la fiabilité de votre code, préférez toujours des solutions plus directes : lorsque c'est possible, agissez directement sur les objets avec du code VBA plutôt que par l'intermédiaire d'une simulation clavier.
Par exemple, pour déplacer le focus vers un contrôle de formulaire, choisissez plutôt les méthodes MonContrôle.SetFocus ou Docmd.GotoControl si celles-ci suffisent à vos besoins.

Créé le 3 septembre 2004  par Bidou, FRED.G

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

Une solution est de créer un champ de type Long (entier Long) qui reçoive des nombres aléatoires. Il suffit alors de trier la table sur ce champ.
Vous pouvez définir la propriété Valeur par défaut du champ dans la table. Utilisez la fonction GenUniqueID() comme valeur de cette propriété.
Pour (re)définir les valeurs du champ, on peut utiliser la fonction Rnd() dans une boucle sur le Recordset de la table. Exemple en DAO :

 
Sélectionnez
Dim rs as Dao.Recordset

Randomize
Set rs = CurrentDb.OpenRecordset("MATABLE", DbOpenTable)
With rs
While Not .Eof
  .Edit
  !MonChampAléat = Clng(Int((2147483647 + 2147483648 + 1) * Rnd -2147483648))
  .Update
  .Movenext
Wend
.Close
End With
Créé le 25 octobre 2004  par FRED.G

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

La fonction Round n'existe pas sous Access 97 de base.

Voici une fonction d'arrondissement (spécialement utile pour la comptabilité).
En gros certaines fonctions arrondissent 0,4450 à 0,44 au lieu de 0,45 comme c'est nécessaire parfois en comptabilité.
Avec celle-ci, il est même possible de choisir le chiffre qui induit un arrondi supérieur.

 
Sélectionnez
Function RoundCost(ByVal Nbr As Double, _
                   Optional ByVal Expo As Long = 2, Optional ByVal NextNumSup = 5) As Double 

 'Expo is the number of desired decimals 
 'NextNumSup is the min number after the Expo decimal which result in a Roundsup for Nbr 
 'Exemple : Roundcost(0.44X) = 0.45 if X >= NextNumSUp (5 by default) 
 'Correct bug for RoundSup(0.445) = 0.44 

    If Expo < 0 Then RoundCost = RoundCost(Nbr * 10 ^ Expo, Abs(Expo)) 

    RoundCost = CLng(Nbr * 10 ^ Expo + (0.01 * (10 - NextNumSup))) / 10 ^ Expo 

End Function  
Créé le 25 octobre 2004  par extros

Lien : Replace n'existe pas sous Access 97, comment faire ?

Voici les deux commandes :

 
Sélectionnez
DoCmd.RunCommand  acCmdCopy  ' Copier
DoCmd.RunCommand  acCmdPaste  ' Coller

Pour copier le texte d'une zone de texte, il faut dans un premier temps le sélectionner, voici comment faire :

 
Sélectionnez
Me.Texte1.SetFocus
Me.Texte1.SelStart = 0
Me.Texte1.SelLength = Len(Texte1.Text)
 ' Le texte est sélectionné, il nous reste qu'à le copier.
DoCmd.RunCommand acCmdCopy 
Créé le 1er janvier 2005  par Tofalu

Il existe plusieurs solutions qui affectent soit le format d'affichage des données, soit les données elles-mêmes.

Formatage de l'affichage seulement

Il suffit d'utiliser la propriété Format d'un champ de table ou de requête ou d'un contrôle de formulaire ou d'état.
Valeur de la propriété pour une seule lettre, en majuscule : >.
Valeur de la propriété pour une seule lettre, en minuscule : <.

Conversion des données :

Fonction Ucase$() -> Renvoie une valeur de type String contenant la chaîne indiquée, convertie en majuscules (cf. Aide Access). Exemple :

 
Sélectionnez

Dim MaVariable As String
MaVariable = Ucase$("develoPPEZ123")

MaVariable reçoit "DEVELOPPEZ123"
Mise en minuscules -> Lcase$()

Fonction Strconv() Renvoie une valeur de type Variant (String)

 
Sélectionnez

Dim MaVariable As String
MaVariable = Strconv("develoPPEZ123", vbUpperCase)

MaVariable reçoit "DEVELOPPEZ123". Mise en minuscules -> vbLowerCase au lieu de vbUpperCase

Fonction Format(). Le deuxième argument prend une chaîne identique à la propriété Format. Cependant le résultat renvoyé sera une réelle conversion :

 
Sélectionnez

Dim MaVariable As String
MaVariable = Format("BONJOUR", "<")

La variable "MaVariable" reçoit le texte "bonjour"

On peut également utiliser la propriété Masque de saisie (Inputmask) d'un champ de table ou d'un contrôle de formulaire.
Valeur de la propriété pour une seule lettre, en majuscule : >C
Valeur de la propriété pour une seule lettre, en minuscule : <C
Exemple : Pour avoir deux lettres en majuscules suivies de trois lettres en minuscules on aura : >CC<CCC
Cependant gérer la casse au moment de la saisie à l'aide cette propriété n'est pas la solution la plus souple, car il faut connaître à l'avance le nombre maximum de caractères pouvant être saisis.
Pour la saisie via un formulaire, préférez plutôt une conversion au moment de l'événement Sur touche Activée :

 
Sélectionnez

Private Sub Moncontrôle_KeyPress(KeyAscii As Integer)
  KeyAscii = Asc(UCase$(Chr(KeyAscii)))
End Sub
Créé le 10 mai 2005  par FRED.G

Dans Access, les moyens "classiques" de mise en forme des données d'un champ ou d'un contrôle sont les suivants :

  • propriété Format : elle permet de contrôler la façon dont les données sont affichées, en y ajoutant n'importe quel caractère littéral où le souhaitez, par exemple des espaces.
    Le formatage effectué ne concerne que l'affichage et n'affecte pas les données enregistrées. La propriété format est prioritaire sur la mise en forme déterminée par un masque de saisie ;
  • propriété Masque de saisie (InputMask) : le masque de saisie sert à faciliter/imposer la saisie des données sous une forme bien précise. Il est possible par exemple d'obliger l'utilisateur à saisir telle ou telle combinaison de chiffres et de lettres. Ou encore de prévoir l'insertion automatique d'espaces et autres caractères littéraux à des endroits de votre choix.
    Vous pouvez choisir d'enregistrer ces caractères littéraux avec les données saisies elles-mêmes. Contrairement à la propriété format, le reste de la mise en forme imposée par le masque est quant à lui nécessairement et définitivement répercuté puisqu'il agit directement sur la saisie.

Ces deux propriétés permettent aussi d'agir sur la casse (majuscule/minuscule).

Consulter l'aide Access (F1) pour connaître les syntaxes et paramètres acceptés par les propriétés Format et Masque de saisie, et pour disposer de nombreux exemples.

Créé le 10 mai 2005  par FRED.G

Dans Access, les données peuvent être affichées dans des champs de tables ou de requêtes, dans des contrôles d'états ou de formulaires.
Mais il faut faire la distinction entre le format d'affichage des données et les données telles qu'elles sont enregistrées dans les tables (pour les champs) ou la propriété ControlSource (pour les contrôles).
Ainsi vous pouvez utiliser la propriété Format d'un champ ou d'un contrôle pour mettre en forme les données telles qu'elles apparaissent à l'utilisateur, mais sans affecter la version originale des données. Le format est juste une mise forme appliquée lors de l'affichage.

Par exemple, dans un champ stockant des tailles en cm, vous saisissez la valeur 183.
Définissez la propriété Format du champ comme ceci : 0\m00
Le champ affichera : 1m83
Mais la valeur qui est enregistrée dans la table sera bien 183.

Créé le 10 mai 2005  par FRED.G
 
Sélectionnez

Public Function DecimalToBinaire(DecVal As Double) As String
' Variable temporaire qui sert lors du traitement du nombre à convertir
Dim NbTmp As Double 
' Variable/Indice de boucle
Dim IndiceP as Integer 
NbTmp = DecVal
    For IndiceP = 1 To Int(Log(DecVal) / Log(2)) + 1
        DecimalToBinaire = CDbl(NbTmp Mod 2) & DecimalToBinaire
        NbTmp = CDbl(Int(NbTmp / 2))
    Next IndiceP
End Function

Il vous suffit ensuite de l'appeler ainsi pour convertir par exemple 1324 en binaire :

 
Sélectionnez

DecimalToBinaire(1324)
Créé le 20 novembre 2005  par fdraven

Int retourne la partie entière. La partie décimale est égale au nombre moins sa partie entière, on a donc facilement :

 
Sélectionnez

Dim N As Double
N = 2.322001
MsgBox N - Int(N)

Ceci dit, pour que cela fonctionne aussi avec N négatif, il faut utiliser la fonction Fix à la place de Int. En effet, Int(-2.9) retourne -3 alors que Fix(-2.9) retourne -2.

Aide Access :
Différence entre les fonctions Int et Fix : si le nombre est négatif, Int renvoie le premier entier négatif inférieur ou égal à ce nombre, alors que Fix renvoie le premier entier négatif supérieur ou égal à nombre. Par exemple, Int convertit -8,4 en -9 et Fix convertit -8,4 en -8.

Ce qui donne donc :

 
Sélectionnez

Dim N As Double
N = -2.9
MsgBox Abs(N - Fix(N))

Abs permet de retourner un résultat toujours positif.

Créé le 20 novembre 2005  par Tofalu

La bibliothèque "Microsoft Excel x.x Object Library" permet d'utiliser toutes les fonctions disponibles sous Excel de la manière suivante :

 
Sélectionnez

WorksheetFunction.Nom de la fonction

Par exemple :

 
Sélectionnez

WorksheetFunction.NormSInv(0.5)

Attention cependant à l'apparente simplicité de ce code. L'objet WorksheetFunction est fourni par l'application Excel. Vous faites donc de l'automation, ce qui signifie qu'une instance Excel est lancée à chaque exécution de votre code.
L'ouverture et la fermeture de cette instance sont gérées automatiquement. Cependant du code automation sera toujours beaucoup plus lent qu'une fonction personnalisée exécutée directement par Access.

Créé le 20 novembre 2005  par FRED.G, LeLaid


Lorsque vous tentez de modifier un très grand nombre d'enregistrements avec DAO, l'erreur 3052 (maxlocksperfile insuffisant) est levée.


La solution consiste à désactiver le verrouillage par enregistrement et utiliser ainsi le verrouillage par page.


En français, dans les options d'Access 2000 (et les versions suivantes), Onglet [Avancé] décocher la case [Ouvrir avec enregistrements verrouillés].
Puis relancer Access (dans le but de recharger Jet).


Le verrouillage par enregistrement est arrivé avec Jet 4.0 / Access 2000.

Si le moteur Jet applique un verrouillage au niveau enregistrement et si les enregistrements sont de petite taille alors on peut "économiser" des verrous en appliquant un verrouillage par page.

Le verrouillage au niveau de la page peut améliorer la situation à la condition qu'une page contienne plusieurs enregistrements.
Supposons que la taille d'un enregistrement soit de 500 octets, pour une taille de page de 4Ko: il y a 8 enregistrements/page.
Le verrouillage par page posera 8 fois moins de verrous qu'un verrouillage par enregistrement.

Attention : l'accès concurrent aux données peut s'en trouver fortement dégradé (applications multiutilisateurs)

Mais le problème du nombre limité de verrous existe toujours, sur les très grandes sources de données.


Quelques explications :


Ce problème semble bien être une limitation "by design" du moteur de bases de données Jet 4.0.
Effectivement, le paramètre MaxLocksPerFile permet de repousser la limite du nombre de verrous, mais pas à l'infini.

Alors comment faire pour gérer une telle situation ?
Lorsque le maximum de verrous est atteint, il faut "libérer" le Recordset (et donc les verrous) et puis ensuite reprendre le traitement là où on l'avait "suspendu". Il n'y a pas de contournement.

Apparemment, Jet 4.0 met en œuvre une telle démarche incrémentale dans le cadre de "grosse" requête UPDATE (transactionnée seulement ?).
Dans cette configuration, le paramètre MaxLocksPerFile est utilisé par Jet pour décider à quel moment entériner les modifications déjà faites, libérer les verrous et puis reprendre le traitement, sans jamais dépasser cette limite.

En revanche, dans le cas d'une programmation directe des Recordsets via VBA/DAO, le programmeur doit mettre en oeuvre cette démarche dans son code.


Créé le 29 novembre 2006  par =JBO=

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.


La propriété RecordsAffected de l'objet QueryDef retourne le nombre d'enregistrements affectés par l'ordre SQL après exécution.

Parfois, vous auriez besoin de cette information avant modification. Du genre : "Êtes-vous sûr de vouloir supprimer 10 enregistrements ?"


Pour cela vous pouvez utiliser une transaction. L'ordre SQL sera lancé dans la transaction,
et il sera alors possible d'annuler l'opération (Rollback) si l'utilisateur ne souhaite pas continuer.

 
Sélectionnez

Const REQUETE As String = "raaa"
Dim q As DAO.QueryDef

Dim n As Long
DBEngine.BeginTrans
Set q = CurrentDb.QueryDefs(REQUETE)
q.Execute
If MsgBox("Vous allez insérer " & q.RecordsAffected & _
" nouveaux enregistrements." & vbCrLf & _
"E
Êtes-vous sûr de vouloir continuer ?", vbYesNo + vbQuestion, "Insertion") = vbYes Then

DBEngine.CommitTrans
Else
DBEngine.Rollback
End If


La méthode CommitTrans valide les modifications apportées.

Créé le 29 novembre 2006  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?

Pour exécuter ce code, il faut activer la référence : Microsoft DAO 3.x Object Library.

La propriété PercentPosition du Recordset DAO retourne la position de l'enregistrement courant en pourcentage.
Ainsi, le squelette du code permettant une telle synchronisation ressemblera à :

 
Sélectionnez
Dim oRst As DAO.Recordset 
' Ici ouverture du Recordset 
' 
' 
' 
'''''''''''''''''''''''''' 
SysCmd acSysCmdInitMeter, "Traitement", 100 ' Définit la valeur maximale de la jauge. 
While Not oRst.EOF 
SysCmd acSysCmdUpdateMeter, Int(oRst.PercentPosition) ' Définit la valeur actuelle de la jauge. 
' Ici traitement sur l'enregistrement 
' 
' 
' 
oRst.MoveNext 
Wend 
SysCmd acSysCmdRemoveMeter ' Supprime la jauge d'avancement
Mis à jour le 29 juillet 2007  par Tofalu

Lien : Définition et manipulation de données avec DAO par Tofalu
Lien : Comment déclarer une référence dans MS Access ?


Contrairement à la fonction Round qui arrondit un nombre à sa valeur la plus proche en fonction des décimales choisies, cette fonction propose la fonction myRound qui arrondit un nombre à sa valeur supérieure et inférieure en fonction des décimales choisies.

 
Sélectionnez
Enum myRoundEnum
    myRoundup = -1
    myRoundDown = 1
End Enum
 
Public Function myRound(vValeur As Variant, Optional byNbDec As Byte, Optional eSens As myRoundEnum = myRoundup) As Variant
   myRound = eSens * Int(eSens * vValeur * 10 ^ byNbDec) / 10 ^ byNbDec
End Function


L'appel de cette fonction :

 
Sélectionnez
Sub test()
MsgBox myRound(4.333, 1, myRoundup)
MsgBox myRound(4.333, 1, myRoundDown)
End Sub
Créé le 14 octobre 2007  par Tofalu


Une fonction qui peut être utile pour éviter d'imbriquer trop de remplacements.

 
Sélectionnez
Function ReplaceArray(ByVal strExp As String, _
                      ByVal strToFind As Variant, _
                      ByVal strToReplace As Variant) As String
Dim i As Long
                      
If IsArray(strToFind) And IsArray(strToReplace) Then
    If UBound(strToFind) = UBound(strToReplace) Then
        For i = 0 To UBound(strToFind)
            strExp = Replace(strExp, strToFind(i), strToReplace(i))
        Next i
        ReplaceArray = strExp
    Else
        ReplaceArray = vbNullString
    End If
Else
    ReplaceArray = Replace(strExp, strToFind, strToReplace)
End If
End Function


Qui permet de faire :

 
Sélectionnez
replaceArray(Champ, Array("-","/"), Array("",""))
Créé le 14 octobre 2007  par cafeine
Si vous désirez reprendre toutes les données d'un enregistrement dans ce formulaire, et ce afin d'éviter de recopier toutes les données, voici comment faire :
  1. Ouvrez en mode création le formulaire dans lequel vous aurez besoin de copier et coller des données ;
  2. Créez deux boutons. Appelez (par exemple) le premier « Copier » et le second « Coller » ;
  3. Associez pour le bouton « Copier » la procédure sur clic suivante :
 
Sélectionnez
Private Sub Copier_Click()
On Error GoTo GestionErreur
 
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdCopy
 
GestionErreur:
 
Select Case Err.Number
 
Case 2046  MsgBox "Action impossible pour le moment", vbExclamation + vbOKOnly, "Copier"
End Select
 
End Sub

En clair, cela signifie qu'en cliquant sur le bouton "Copier", Access va sélectionner l'enregistrement en cours (celui qui est affiché), pour le copier. Le module de gestion des erreurs prévoit le cas où vous n'auriez pas encore de données dans l'enregistrement en cours. Attention : Access reprendra toutes les données de l'enregistrement !

4. Associez pour le bouton « Coller » la procédure sur clic suivante :

 
Sélectionnez
Private Sub Coller_Click()
 
DoCmd.RunCommand acCmdSelectRecord
DoCmd.RunCommand acCmdPaste
 
End Sub

Lorsque vous cliquerez sur le bouton "Coller", Access collera les données de l'enregistrement que vous aurez copié. Attention ! Il remplacera les données de l'enregistrement dans lequel vous êtes. Vous pouvez aussi coller les données dans un nouvel enregistrement !

Créé le 14 octobre 2007  par damkre

Cette fonction copie le texte du contrôle actif dans le presse-papiers.

 
Sélectionnez
Public Function CopierPressePapiers()
				On Error GoTo Erreur
				' Pour copier, il faut dans un premier temps sélectionner le contenu actuel
				Screen.ActiveForm.Refresh 'Pour s'assurer que le contenu actuel correspond à ce qui est affiché
				Screen.ActiveForm.ActiveControl.SetFocus
				Screen.ActiveForm.ActiveControl.SelStart = 0
				Screen.ActiveForm.ActiveControl.SelLength = Len(Screen.ActiveForm.ActiveControl.Text)
				 ' N.B. ActiveControl.Text pour capter ce qui est affiché à l'écran
				 ' Copier dans le presse-papiers
				DoCmd.RunCommand acCmdCopy
				Exit Function
				Erreur:
				Select Case err.Number
				Case 2465  ' Le champ à copier est vide
				MsgBox "Un champ vide ne peut être copié"
				Case Else
				MsgBox err.Number & "  " & err.Description
				End Select
				End Function
Mis à jour le 15 mai 2011  par ClaudeLELOUP

Lien : Copier le contenu d'un contrôle vers le presse-papiers Windows

Cette fonction colle le contenu du presse-papiers dans le contrôle actif.

 
Sélectionnez
Public Function CollerPressePapiers()
			On Error GoTo Erreur
			' Pour coller, il faut dans un premier temps sélectionner le contenu actuel
			Screen.ActiveForm.ActiveControl.SetFocus
			Screen.ActiveForm.ActiveControl.SelStart = 0
			Screen.ActiveForm.ActiveControl.SelLength = Len(Screen.ActiveForm.ActiveControl.Text)
			 ' N.B. ActiveControl.Text pour capter ce qui est affiché à l'écran
			 ' Le texte est sélectionné, il ne nous reste qu'à le remplacer.
			DoCmd.RunCommand acCmdPaste
			Exit Function
			Erreur:
			MsgBox err.Number & "  " & err.Description
			End Function
Créé le 15 mai 2011  par ClaudeLELOUP

Lien : Copier le contenu d'un contrôle vers le presse-papiers Windows

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2013 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.