[REF] Wiki 6 de MichelXld (Doublons, Tris, Filtres, Variables, Fichiers fermés, Acces

MichelXld

XLDnaute Barbatruc
Les sujets abordés dans cette page
Les doublons , Les tris et les filtres , Les variables , Piloter les fichiers fermés (Excel , Access ,les fichiers DBF) .​



Les doublons
  • Deux classeurs démo regroupant plusieurs exemples
    Petite modification apportée par Zon pour le fichier DoublonsMacros2 ,onglet: incrémentation1.​
    Car application.transpose a une limite à 5000 et quelques lignes.​
    Voici le code à mettre derrière l'userform Incrémentation : Merci Zon​
    Option Explicit​
    'adapté pour XL97, V2 application.transopose remplacé​
    'Zon le 23.04.2004​
    Option Base 1​
    Const Titre = "Faites votre choix"​
    Const Lab = "Cliquez sur la colonne où se situent les noms des équipements"​
    Dim Tablo(), Tablo2(), Tablo3()​
    Private Sub commandButton1_Click()​
    With listBox1​
    Select Case .listIndex​
    Case -1: Exit Sub​
    Case 0: Insertion (2): Princ "C", 3​
    Case 1: Insertion (1): Princ "C", 3​
    Case Else: Princ Right(.List(.listIndex), 1), .listIndex + 1​
    End Select​
    Unload Me​
    End With​
    End Sub​
    Private Sub userForm_Initialize()​
    Me.Caption = Titre​
    With Label1​
    .Caption = Lab​
    .autoSize = True​
    End With​
    With listBox1​
    .List = Array("Colonne A", "Colonne B", "Colonne C", _​
    Colonne D, "Colonne E", "Colonne F")​
    End With​
    End Sub​
    Sub Princ(K As String, T As Byte)​
    Dim L1&, L2&, C&, Plage As Range​
    On Error Resume Next​
    Application.screenUpdating = False​
    L1 = Range(K & "1").End(xlDown).Row + 1​
    L2 = Range(K & 65536).End(xlUp).Row​
    C = Range("IV" & L1).End(xlToLeft).Column​
    Set Plage = Range(Range("A" & L1), Cells(L2, C))​
    Plage.Columns("A:B").clearContents​
    Tri Plage, T​
    Tablo = transposeGrandTab(Plage.Columns(T).Value)​
    Doublons​
    Plage.Columns(1) = transposeGrandTab(Tablo2)​
    Plage.Columns(2) = transposeGrandTab(Tablo3)​
    On Error goTo 0​
    End Sub​
    Private Function Tri(Plage As Range, C As Byte)​
    With Plage​
    .Sort .Cells(C), xlAscending, , , , , , xlNo​
    End With​
    End Function​
    Private Sub Doublons()​
    Dim I&, J&, K&, L&, Item​
    reDim Tablo2(UBound(Tablo, 2)): reDim Tablo3(UBound(Tablo, 2))​
    J = 1: L = 1: K = 1​
    For I = LBound(Tablo, 2) To UBound(Tablo, 2)​
    If Item = Tablo(1, I) Then​
    J = J + 1: Tablo3(K) = J: K = K + 1​
    Else​
    Item = Tablo(1, I): J = 1​
    Tablo2(K) = L: Tablo3(K) = J​
    L = L + 1: K = K + 1​
    End If​
    Next I​
    End Sub​
    Private Function Insertion(Nb As Byte)​
    Dim I As Byte​
    For I = 1 To Nb​
    Columns(1).Insert​
    Next I​
    End Function​
    Function transposeGrandTab(T) 'Zon​
    'Application.transpose est limité à 5000 et qques jusqu'à XL2002​
    Dim Temp, I&, J&, Z As Byte, Nb As Byte​
    On Error Resume Next​
    Do​
    Nb = Nb + 1​
    Z = UBound(T, Nb + 1)​
    Loop Until Err​
    If Nb = 1 Then​
    reDim Temp(UBound(T), 1 To 1)​
    For I = LBound(T) To UBound(T)​
    Temp(I, 1) = T(I)​
    Next I​
    Else​
    reDim Temp(UBound(T, 2), UBound(T, 1))​
    For I = LBound(T, 2) To UBound(T, 2)​
    For J = LBound(T, 1) To UBound(T, 1)​
    Temp(I, J) = T(J, I)​
    Next J​
    Next I​
    End If​
    transposeGrandTab = Temp​
    End Function​
  • Un questionnaire de satisfaction clients avec gestion des statistques
    Lien supprimé
  • Regrouper les Chiffres d'affaire par ville
    Lien supprimé
  • Une macro complémentaire de myDearFriend pour supprimer les doublons dans une feuille
    Lien supprimé
  • La méthode rowDifferences :
    Lister toutes les cellules d'une ligne , dont le contenu est différent de celui de la cellule de comparaison (la cellule D1 dans l'exemple)​
    Sub Test()​
    Dim Cible As Range, Cell As Range​
    Dim Resultat As String​
    Set Cible = Rows(1).rowDifferences(Comparison:=Range("D1"))​
    For Each Cell In Cible​
    Resultat = Resultat & Cell & vbLf​
    Next Cell​
    msgBox Resultat​
    End Sub​
    Utiliser la méthode columnDifferences pour effectuer la meme recherche dans une colonne​
  • Empecher la saisie de doublons dans une plage de cellules ( exemple A1:A10)
    Sélectionnes la plage de cellules concernées​
    menu Données​
    Validation​
    onglet "Options"​
    Sélectionnes "Personnalisé" dans la liste de choix​
    Saisis la formule est : =NB.SI($A$1:$A$10;A1)<2​
    Dans l'onglet "Alerte d'erreur" tu peux ensuite personnaliser le message d'alerte​
    cliques sur OK pour valider​
  • Extraire les données de la cellule A1 séparées par une virgule , et les réinsérer dans la cellule B1 sans les doublons
    Sub extraireDonneesCellule_A1()​
    Dim Tableau() As String​
    Dim i As Byte​
    Dim Un As New Collection​
    'découpage en fonction du séparateur ","​
    Tableau = Split(Range("A1"), ",")​
    'filtre doublons​
    On Error Resume Next​
    For i = 0 To UBound(Tableau)​
    Un.Add Tableau(i), Tableau(i)​
    Next i​
    On Error goTo 0​
    'réinsertion des donnees dans la cellule B1 sans doublons​
    For i = 1 To Un.Count​
    Range("B1") = Range("B1") & Un(i) & ","​
    Next i​
    Range("B1") = Left(Range("B1"), Len(Range("B1")) - 1)​
    End Sub​
  • Etre averti lors de la saisie des doublons dans la plage A1:A5000
    Procédure à placer au niveau de la feuille en utilisant l'evenement "Change"​
    Private Sub Worksheet_Change(byVal Target As Excel.Range)​
    If Target.Column = 1 Then​
    If Application.worksheetFunction.countIf(Range("A1:A5000"), Target.Value) > 1 Then msgBox "ce nom existe déja"​
    End If​
    End Sub​
Les tris et les filtres
  • Des information générales sur les filtres automatiques
  • Extraire les donnees d'une cellule et les trier par ordre alphabetique
  • Compter le nombre de lignes visibles aprés l'application d'un filtre automatique
  • Afficher tous les critères des filtres actifs , dans une feuille
  • Effectuer une somme sur un filtre automatique
    Application.worksheetFunction.Subtotal(9, Range(maPlage))​
  • Nommer des cellules non adjacentes , issues d'un filtre automatique
    Sub nommerZoneFiltree()​
    activeWorkbook.Names.Add Name:="Zone1", _​
    refersTo:="=Feuil1!" & Feuil1.autoFilter.Range.specialCells(xlCellTypeVisible).Address​
    End Sub​
  • Appliquer un filtre dans le 4eme champ
    Range("A1").autoFilter Field:=4, Criteria1:="mot cible"​
  • Appliquer l'opérateur "différent de" dans un filtre automatique
    Exemple : Afficher les données differentes de la valeur 100 dans le 1er champ du filtre automatique​
    Range("A1").autoFilter Field:=1, Criteria1:="<>100"​
  • Appliquer l'opérateur "contient" dans un filtre automatique
    Exemple : Afficher les données contenant la donnée "XLD" dans le 1er champ du filtre​
    Range("A1").autoFilter Field:=1, Criteria1:=" = * XLD * "​
  • Colorier uniquement les cellules visibles apres l'application d'un filtre automatique
    Range("A1:F" & Range("F65536").End(xlUp).Row). _​
    specialCells(xlVisible).Interior.colorIndex = 6​
  • Vérifier si les flèches du menu déroulant du filtre automatique sont affichées ( Vrai / Faux )
    msgBox Worksheets(1).autoFilterMode​
  • Enlever les flèches du menu déroulant d'un filtre automatique
    Worksheets(1).autoFilterMode = False​
  • Filtrer une Date dans un filtre automatique
    Dans cet exemple les dates sont dans la colonne A , à partir de la cellule A2 . La date à filtrer est issue d'une Lisbox​
    ATTENTION :​
    Les cellules à filtrer doivent toutes etre du meme format (identique à la cellule A2)​
    Private Sub listBox1_Click()​
    Range("A1").autoFilter 1, Format(listBox, Range("A2").numberFormat)​
    End Sub​
  • Exporter des données de façon conditionnelle vers plusieurs classeurs
    Lien supprimé
Les variables

Les variables servent à enregistrer temporairement des données dans une macro .​

par exemple affecter un texte (coucou le forum xld ! ) à une variable (maVariable) ,​

et l'afficher dans un Msgbox :​


Option Explicit​

Sub afficherMessage()​

Dim maVariable As String​

maVariable = "coucou le forum xld ! "​

msgBox maVariable​

End Sub​


Les données peuvent etre modifiées pendant l'execution de la macro .​

par exemple affecter un nombre à une variable , l'afficher dans une Msgbox ,​

ajouter la valeur de la cellule A1 à cette variable , puis afficher le nouveau resultat :​


Sub afficherValeur()​

Dim maVariable As Integer​

maVariable = 10​

msgBox maVariable​

maVariable = maVariable + Range("A1")​

msgBox maVariable​

End Sub​


Une variable possede :​

un nom qui permet d'acceder aux donnees qu'elle contient :"maVariable"​

et un type de données : String et Integer dans les exemples ci dessus​

Le type de données doit etre défini en fonction de la valeur prise par la variable .​

Chaque type de donnée utilise un espace mémoire ( de 1 octet pour les types de données Byte jusqu'à 22 octets et plus , pour les types de données Variant ) . Il est donc important de définir le bon type de données pour libérer de l'espace mémoire et ne pas ralentir inutilement le traitement de la macro .​


  • Les types de données ( informations issues de l'aide en ligne Excel )
    Byte :​
    utilisé pour stocker des nombres entiers positifs compris entre 0 et 255.​
    Les variables de type Byte sont stockées sous la forme de nombres uniques​
    codés sur 8 bits (1 octet), sans signe .​
    Boolean :​
    données pouvant prendre exclusivement les valeurs True (-1) et False (0).​
    Les variables Boolean sont stockées sous la forme de nombres codés sur 16 bits (2 octets).​
    Integer :​
    données contenant des nombres entiers stockés sous forme d'entiers de 2 octets compris entre -32 768 et 32 767.​
    Le type de données Integer permet également de représenter des valeurs énumérées.​
    Dans Visual Basic, le signe % est le caractère de déclaration du type Integer .​
    Remarque :​
    Si vous écrivez "Dim X As Integer" , alors que la valeur est décimale ( par exemple X=5,9 ) , la valeur renvoyée sera égale à 6​
    Long :​
    Nombre entier codé sur 4 octets (32 bits) et dont la valeur est comprise entre -2 147 483 648 et 2 147 483 647.​
    Dans Visual Basic, le signe et commercial (&) est le caractère de déclaration du type Long.​
    Currency :​
    données dont la plage de valeurs s'étend de -922 337 203 685 477,5808 à 922 337 203 685 477,5807.​
    Ce type de données est utilisé dans les calculs monétaires ou dans les calculs à virgule fixe pour​
    lesquels une grande précision est requise. Le signe @ est le caractère de déclaration du type Currency.​
    Single :​
    Type de données qui regroupe des variables à virgule flottante en simple précision​
    sous forme de nombres à virgule flottante codés sur 32 bits (4 octets),​
    dont la valeur est comprise entre -3,402823E38 et -1,401298E-45 pour les valeurs négatives ,​
    et entre 1,401298E-45 et 3,402823E38 pour les valeurs positives.​
    Dans Visual Basic, le point d'exclamation (!) est le caractère de déclaration du type Single.​
    Double :​
    Type de données stockant sur 64 bits les nombres à virgule flottante en double précision​
    compris entre -1,79769313486231E308 et -4,94065645841247E-324 pour les valeurs négatives,​
    et entre 4,94065645841247E-324 et 1,79769313486232E308 pour les valeurs positives.​
    Dans Visual Basic, le signe dièse (#) est le caractère de déclaration du type Double.​
    Date :​
    Type de données utilisé pour stocker les dates et les heures sous la forme​
    d'un nombre réel codé sur 64 bits (8 octets). La partie située à​
    gauche du séparateur décimal représente la date, et la partie droite l'heure.​
    String :​
    Type de données composé d'une séquence de caractères contigus interprétés en tant que caractères​
    et non en tant que valeurs numériques.​
    Une donnée de type String peut inclure lettres, nombres, espaces et signes de ponctuation.​
    Le type de données String peut stocker des chaînes de longueur fixe dont la longueur est comprise entre​
    0 et environ 63 Ko de caractères et des chaînes dynamiques dont la longueur est comprise entre​
    0 et environ 2 milliards de caractères.​
    Dans Visual Basic, le signe dollar ($) est le caractère de déclaration du type String.​
    Object :​
    Type de données représentant toute référence Object. Les variables Object sont stockées​
    sous forme d'adresses codées sur 32 bits (4 octets) faisant référence à des objets. L'instruction Set permet d'attribuer une référence d'objet à la variable.​
    Un exemple pour utiliser une variable Object :​
    Dim appWrd As Object​
    Set appWrd = createObject("Word.Application")​
    Pour libérer l'espace mémoire d'une variable Object en fin de procédure , utilisez :​
    Set appWrd = Nothing​

    Range :​
    Variant :​
    Type de données particulier pouvant contenir des données numériques, des chaînes ou des dates,​
    des types définis par l'utilisateur ainsi que les valeurs spéciales Empty et Null.​
    Le type de données Variant est doté d'une taille de stockage numérique de 16 octets et peut​
    contenir la même plage de données que le type Decimal, ou d'une taille de stockage de​
    caractère de 22 octets (plus la longueur de la chaîne) ; dans ce dernier cas, il peut stocker tout texte.​
    IMPORTANT : Toutes les variables sont converties en type Variant si aucun autre type de données​
    n'est explicitement déclaré.​
    TRES IMPORTANT : En cas de déclaration de plusieurs variables avec le meme Dim , il faut indiquer le type de donnee pour chaque variable .​
    Exemple :​
    Si pour définir 3 variables des type String (Var1,Var2 et Var3) vous écrivez :​
    Dim Xld1 , Xld2 , Xld3 As String​
    Dans ce cas Xld1 et Xld2 seront de type Variant . Pour y remédier Il faut écrire :​
    Dim Xld1 As String , Xld2 As String , Xld3 As String​
  • Option Explicit
    Insérez l'instruction Option Explicit en tout début de procédure .​
    Grâce à cette instruction, vous aurez un message d’erreur qui identifiera toute variable non définie, ou mal orthographiée.​
    Il est conseillé d'avoir une majuscule dans la variable déclarée : Ensuite lors de la saisie de la variable dans​
    la macro , celle-ci reprendra automatiquement la majuscule : cela permet de vérifier les fautes d'orthographe​
    éventuelles .​
    Pour qu'Option Explicit s'insère automatiquement dans chaque nouveau classeur :​
    Allez dans l'éditeur de macros​
    Menu Outils​
    Options​
    Dans l'onglet Editeur , cochez l'option "Déclaration Explicite des variables" ou "Déclaration des variables obligatoire" (en fonction des versions d'Office)​
  • Byref
    Moyen permettant de passer à une procédure l'adresse d'un argument plutôt que sa valeur. La procédure agit directement sur la valeur de la variable. La procédure peut ainsi accéder à la variable proprement dite. La valeur réelle de cette dernière peut, de ce fait, être modifiée par la procédure à laquelle elle a été passée. Par défaut, tous les arguments spécifiés dans une procédure sont de type Byref.​
    Si la procédure appelée change la valeur de ces variables, elle changeront au retour dans la procédure appelante.​
  • Byval
    Moyen permettant de passer à une procédure la valeur d'un argument plutôt que son adresse. La procédure créée une copie de la variable , cette copie étant supprimée en fin de la procédure. La variable originale n'est donc pas modifiée par la procédure à laquelle elle est passée.​
    Si la procédure appelée change les valeurs des variables , elles ne changeront pas dans la procédure appelante​
    L'utilisation de byVal implique un temps de calcul plus long et nécessite un espace mémoire plus important.​
  • Les niveaux de variables
    Une Variable déclarée à l'interieur d'une macro ne sera utilisable qu'à l'intérieur de celle-ci :​
    Sub Test()​
    Dim Xld As String​
    Xld= "Coucou ! "​
    Msgbox Xld​
    End Sub​
    Pour que la variable soit utilisable dans toutes macros du module ,​
    celle-ci doit etre déclarée avant le Sub :​
    Dim Xld As String​
    Sub Test()​
    …​
    End Sub​
    Pour que la variable soit utilisable pour toutes les macros du projet il faut utiliser l'instruction Public :​
    (La variable doit etre placée dans un module standard)​
    Public Xld As String​
    Sub Test()​
    …​
    End Sub​
  • L'instruction Const : Déclaration de constantes
    Une constante est un élément nommé conservant une valeur constante pendant toute l'exécution d'un programme. Il peut s'agir d'une chaîne, d'un littéral numérique, d'une autre constante ou d'une combinaison contenant des opérateurs logiques ou arithmétiques à l'exception de Is et de l'opérateur d'élévation à une puissance. Des constantes supplémentaires peuvent être définies par l'utilisateur via l'instruction Const. Les constantes peuvent remplacer des valeurs réelles partout dans votre code.​
    Il y a plusieurs avantages à utiliser une constante dans votre projet :​
    Eviter de saisir plusieurs fois des textes identiques dans une macro , et donc éviter les erreurs de saisie .​
    Si le texte doit etre modifié dans une macro complexe, vous n'avez plus besoin de parcourir toute la procédure pour la retrouver : il suffit de modifier la constante .​
    Les constantes permettent aussi d'améliorer la lisibilité d'une macro​
  • Les fonctions de conversion des types de données
    CBool(expression)​
    CByte(expression)​
    CCur(expression)​
    CDate(expression)​
    CDbl(expression)​
    CDec(expression)​
    CInt(expression)​
    CLng(expression)​
    CSng(expression)​
    CStr(expression)​
    CVar(expression)​
    Consultez l'aide en ligne Excel pour obtenir plus d'informations sur chacune de ces fonctions .​
  • Des informations sur les variables Objet Collection
  • La fonction typeName : afficher des informations sur une variable.
    (Informations issues de l'aide en ligne Excel)​
    typeName(varname)​
    L'argument varname est une valeur de type Variant pouvant contenir toute variable à l'exception d'une variable de type défini par l'utilisateur.​
    La fonction typeName peut renvoyer l'une des chaînes suivantes :​
    Byte , Integer , Long , Single , Double , Currency , Decimal , Date , String , Boolean , Error , Empty , Null , Unknown , Nothing​
    Si l'argument est un tableau, la chaîne renvoyée peut être n'importe laquelle des chaînes possibles (ou Variant) suivie de parenthèses vides. Par exemple, si l'argument varname est un tableau de nombres entiers, la fonction typeName renvoie la valeur "Integer()".​
    Quelques exemples d'utilisation :​
    Dim nullVar, myType, strVar As String, intVar As Integer, curVar As Currency​
    Dim arrayVar (1 To 5) As Integer​
    nullVar = Null ' Affectation d'une valeur Null.​
    myType = typeName(strVar) ' Renvoie "String".​
    myType = typeName(intVar) ' Renvoie "Integer".​
    myType = typeName(curVar) ' Renvoie "Currency".​
    myType = typeName(nullVar)' Renvoie "Null".​
    myType = typeName(arrayVar)' Renvoie "Integer()".​

    'Boucler sur les contrôles d'un userForm et vérifier s'il s'agit d'un Textbox​
    Dim Ctrl As Control​
    For Each Ctrl In userform1.Controls​
    If typeName(Ctrl) = "textBox" Then​
    '.........​
    End If​
    Next Ctrl​

    'Vérifier si la variable Nb est de type Integer​
    If typeName(Nb) = "integer" Then​
    'Vérifier le type de donnée contenu dans la cellule A1​
    msgBox typeName(Range("A1").Value)​

  • La fonction varType: contrôler le type de variable qui est appliqué dans la procédure .
    (Informations issues de l'aide en ligne Excel)​
    varType(varname)​
    L'argument varname est une valeur de type Variant pouvant contenir toute variable à l'exception d'une variable de type défini par l'utilisateur.​
    Constante - Valeur - Description​
    vbEmpty - 0 - Empty (non initialisée)​
    vbNull - 1 - Null (aucune donnée valide)​
    vbInteger - 2 - Entier​
    vbLong - 3 - Entier long​
    vbSingle - 4 - Nombre à virgule flottante en simple précision​
    vbDouble - 5 - Nombre à virgule flottante en double précision​
    vbCurrency - 6 - Valeur monétaire​
    vbDate - 7 - Valeur de date​
    vbString - 8 - Chaîne​
    vbObject - 9 - Objet​
    vbError - 10 - Valeur d'erreur​
    vbBoolean - 11 - Valeur booléenne​
    vbVariant - 12 - Variant (utilisée seulement avec des tableaux de variants)​
    vbDataObject - 13 - Objet d'accès aux données​
    vbDecimal - 14 - Valeur décimale​
    vbByte - 17 - Octet​
    vbUserDefinedType - 36 - Variant contenant des types définis par l'utilisateur​
    vbArray - 8192 - Tableau​

    Les constantes mentionnées dans ce tableau sont spécifiées par Visual Basic pour Applications. Vous pouvez par conséquent utiliser leur nom n'importe où dans votre code à la place des valeurs réelles correspondantes.​
    Remarque :​
    La fonction varType ne renvoie jamais la valeur pour la constante vbArray elle-même. Elle est toujours ajoutée à une autre valeur pour indiquer un tableau d'un type particulier. La constante vbVariant n'est renvoyée que lorsqu'elle est associée à vbArray pour indiquer que l'argument de la fonction varType est un tableau de type Variant. Par exemple, la valeur renvoyée pour un tableau de nombres entiers est le résultat de vbInteger + vbArray, ou 8194. Si un objet possède une propriété par défaut, varType (object) renvoie le type de celle-ci.​
    Quelques exemples​
    'Intercepter l'utilisation du bouton "Annuler" et la croix de fermeture d'un Inputbox​
    Dim Reponse​
    Reponse = Application.inputBox("Saisissez vos données")​
    If varType(Reponse) = vbBoolean Then msgBox " opération annulée"​
    'Vérifier si la cellule A1 est vide​
    If varType(Range("A1")) = 0 Then msgBox "La cellule est vide"​
    If varType(Range("A1")) = vbEmpty Then msgBox "La cellule est vide"​

  • If typeOf End If : Contrôler vers quel objet de l'application pointe la variable.
    Quelques exemples :​
    'Retrouver le nom de toutes les feuilles graphiques dans le classeur actif​
    Dim Sh As Object​
    For Each Sh In activeWorkbook.Sheets​
    If typeOf Sh Is Chart Then msgBox Sh.Name​
    Next​
    'Vérifier si une cellule est sélectionnée dans la feuille​
    If typeOf Selection Is Range Then​
    'Boucler sur les checkBoxes d'un Userform et leur attribuer la valeur Vrai​
    Dim Ctrl As Control​
    For Each Ctrl In Me.Controls​
    If typeOf Ctrl Is MSForms.checkBox Then Ctrl.Value = True​
    Next​
  • Les types de données définis par l'utilisateur .
    Vous pouvez utiliser l'instruction Type afin de déclarer un type de variable personnalisé .​
    Les types de données définis par l'utilisateur peuvent contenir un ou plusieurs éléments de n'importe quel type de données .Il est possible de créer des types adaptés à un projet pour en faciliter le traitement .​
    Les types définis par l'utilisateur placés dans un module standard sont Public par défaut. Ils peuvent etre redéfinis en Private. Les types utilisés dans les modules de classe sont toujours Private et ne peuvent pas être modifiés en Public.​
    'Ces lignes sont sont à placer tout en haut du module​
    Type Voiture​
    Couleur As String​
    Cylindree As Long​
    anneeAchat (1 to 5) As Date​
    End Type​
    Sub testVariable()​
    Dim X As Voiture 'Déclaration de la variable personnalisée​
    X.Couleur = "Rouge" 'Ecriture dans les variables​
    X.Cylindree = 2000​
    msgBox "Cette voiture " & X.Couleur & " a une cylindrée de " & X.Cylindree & " cc" 'lecture variable​
    End Sub​
    Il est possible de déclarer un tableau multi-dimensionnel :​
    Dim Tableau(1 to 5, 1 to 10) As Voiture​
    et ensuite, d'écrire ou lire chaque information en utilisant la synthaxe :​
    Tableau(1,5).Couleur​
  • Passer une information Excel dans une Variable Word
    'La procédure dans Excel​
    'nécessite d'activer la reference Microsoft Word xx.x Object Library​
    Private Sub commandButton1_Click()​
    'utilisation de la methode Run depuis Excel ,​
    'pour déclencher une macro Word contenant un paramètre​
    Dim wordApp As Word.Application​
    Dim wordDoc As Word.Document​
    Dim monParametreVB As String​
    Set wordApp = createObject("Word.Application")​
    wordApp.Visible = True​
    Set wordDoc = wordApp.Documents.Open("C:\monDocument.doc") 'ouverture doc Word​
    monParametreVB = "azerty"​
    'déclenchement de la macro Word​
    'Remarque : la macro Word doit etre placée au niveau de thisDocument​
    wordDoc.laMacro monParametreVB​
    End Sub​
    'La procédure dans Word, à placer au niveau de thisDocument​
    Option Explicit​
    Sub laMacro(maVariableWord As String)​
    thisDocument.Range.Text = maVariableWord​
    End Sub​
Utiliser la saisie semi automatique des variables (une astuce donnée par Denis)

Dans les variables, un petit truc pour éviter les erreurs, après les premiers caractères de la variable, faire Ctrl et Espace, donne soit la variable, soit un choix dans la liste des variables .​

Définir un groupe de constantes liées : Utiliser l'instruction ENUM pour créer une énumeration .

Public Enum Coeff​

Coeff_2 = 2​

Coeff_3 = 3​

Coeff_4 = 4​

End Enum​


Sub Test()​

msgBox 500 * Coeff.Coeff_2 'résultat = 1000​

End Sub​


La saisie de Coeff. Lors de l'écriture d'une macro , permet d'afficher rapidement la liste des coefficients disponibles​



Piloter les fichiers fermés (Excel , Access ,les fichiers DBF)
  • Lister tous les classeurs d'un répertoire et récupérer les données de la cellule A1 dans chaque fichier sans l'ouvrir
  • Un autre exemple
    Lien supprimé
  • Recherche dans des classeurs fermés , avec choix de l'onglet et affichage des résultats multicolonnes dans un USF
  • Piloter une base Access en utilisant l'ActiveX Data Objects (ADO)
    Lister les tables de la base Access​
    Lister les champs d'une table​
    Créer une nouvelle table dans la base Access​
    Afficher les données d'une table , dans une listBox​
    Effectuer une jointure entre 2 tables​
    Afficher la liste des métaDonnées de la base Acces​
    Lien supprimé
  • Additionner les tableaux de plusieurs classeurs fermés
    Lien supprimé
  • Vérifier si une valeur existe dans le champ "numeroRemorque" , d'une table Access "Remorque"
    Sub controleValeurTable()​
    Dim Conn As ADODB.Connection​
    Dim rsT As ADODB.Recordset​
    Dim Fichier As String, rSQL As String​
    Dim Valeur As Integer​
    Fichier = "C:\maBase.mdb"​
    Valeur = inputBox("Saisir le numero à rechercher dans la table")​
    Set Conn = New ADODB.Connection​
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _​
    Fichier & ";"​
    rSQL = "SELECT Remorque.numeroRemorque" & _​
    " FROM Remorque" & _​
    " WHERE numeroRemorque="​
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Conn​
    .Open rSQL & Valeur, , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
    If rsT.EOF Then​
    msgBox "Le numéro " & Valeur & " n'existe pas dans la table Remorque . "​
    Else​
    msgBox "Le numéro " & Valeur & " existe la table Remorque . "​
    End If​
    rsT.Close​
    Conn.Close​
    End Sub​
  • Extraire la valeur Maxi ( ou Mini) dans le champ "nbHeuresAstreinte" de la Table2 , d'une base Access
    Sub extraireValeurMaxTableAccess()​
    Dim cn As ADODB.Connection​
    Dim Rs As ADODB.Recordset​
    Dim Fichier As String​
    Fichier = thisWorkbook.Path & "\maBase_V01.mdb"​
    Set cn = New ADODB.Connection​
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _​
    Fichier & ";"​
    Set Rs = New ADODB.Recordset​
    With Rs​
    .activeConnection = cn​
    .Open "SELECT max(nbHeuresAstreinte) FROM Table2", , adOpenStatic, adLockOptimistic, adCmdText​
    '.Open "SELECT min(nbHeuresAstreinte) FROM Table2", , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
    msgBox Rs(0)​
    Rs.Close​
    Set Rs = Nothing​
    cn.Close​
    Set cn = Nothing​
    End Sub​
  • Lister les éléments du champ "Matricule" d'une table nommée "Table2" , sans afficher de doublons
    Sub listeElementsChamp_sansDoublon()​
    Dim Conn As ADODB.Connection​
    Dim rsT As ADODB.Recordset​
    Dim Fichier As String, rSQL As String​
    Fichier = thisWorkbook.Path & "\maBase_V01.mdb"​
    Set Conn = New ADODB.Connection​
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _​
    Fichier & ";"​
    rSQL = "SELECT DISTINCT Matricule" & _​
    "FROM Table2 "​
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Conn​
    .Open rSQL, , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
    If rsT.EOF Then​
    rsT.Close​
    Conn.Close​
    Exit Sub​
    End If​
    Feuil1.Range("A1").copyFromRecordset rsT​
    rsT.Close​
    Conn.Close​
    End Sub​
  • Exporter la Feuil1 d'un classeur fermé , dans un fichier texte
    Sub excelVersFichierTexte()​
    Dim Rs As New ADODB.Recordset​
    Dim Fichier As String, Feuille As String​
    Dim xConnect As String, xSql As String​
    Fichier = "C:\Documents and Settings\michel\monClasseur.xls"​
    Feuille = "Feuil1"​
    xConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier & ";" & _​
    "Extended Properties=Excel 8.0;"​
    xSql = "SELECT * FROM [" & Feuille & "$];"​
    Set Rs = New ADODB.Recordset​
    Rs.Open xSql, xConnect, adOpenForwardOnly, adLockReadOnly, adCmdText​
    Open "C:\Documents and Settings\michel\essai.txt" For Output As #1​
    Do Until Rs.EOF​
    Print #1, Rs.getString(, 600, ";", vbCrLf, ""); 'exemple avec séparateur ";" (point virgule)​
    Loop​
    Close #1​
    End Sub​
    Les 5 arguments de la la methode getString:​
    1. adClipString définit le format du recordset :le format est de type chaîne de cararacteres.​
    2. le nombre d'enregistrements à récupérer .Par défaut tous les enregistrements sont récupérés .​
    3. le délimiteur de colonnes.​
    4. le délimiteur d'enregistrements.​
    5. indique comment représenter des valeurs nulles .​

  • Les bonnes pratiques lors de la création des noms de champs :
    Nom le plus court possible​
    Pas d'espace​
    Pas d'accent​
    Pas de caractères spéciaux​
  • Lister les éléments du champ "Matricule" de la "Table1" qui n'existent pas dans le champ "Matricule" de la "Table2"
    Sub listeElementsChamp_InexistantsDans2emeTable()​
    Dim Conn As ADODB.Connection​
    Dim rsT As ADODB.Recordset​
    Dim Fichier As String, rSQL As String​
    Fichier = "C:\maBase_V01.mdb"​
    Set Conn = New ADODB.Connection​
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _​
    Fichier & ";"​
    rSQL = "SELECT Table1.Matricule,Table1.Nom" & _​
    " FROM Table1 WHERE Table1.Matricule NOT IN (SELECT Table2.Matricule" & _​
    " FROM Table2 )"​
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Conn​
    .Open rSQL, , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
    If rsT.EOF Then​
    rsT.Close​
    Conn.Close​
    Exit Sub​
    End If​
    Feuil1.Range("A1").copyFromRecordset rsT​
    rsT.Close​
    Conn.Close​
    End Sub​
  • Récupérer les informations d'un classeur corrompu
    Une autre possibilité sans macro ( à partir d'Excel2000 ?)​
    menu Fichier​
    Ouvrir​
    Sélectionnes le classeur qui pose probleme dans la boite de dialogue​
    cliques sur la droite du bouton "Ouvrir" , en bas dans la boite de dialogue​
    Sélectionnes l'option "Ouvrir et réparer"​
    Tu peux aussi essayer d'ouvrir ton classeur avec Open Office​
    Il est parfois possible d'ouvrir les classeurs corrompus grace à cette suite bureautique​
    D'autres informations issues de l'aide en ligne Microsoft​
  • Récupérer les macros dans un classeur corrompu
  • Créer une nouvelle base Access
    Sub creerNouvelleBaseDeDonnees()​
    'activer la reference microsoft ADO ext x.x for DLL and Security​
    Dim Cat As ADOX.Catalog​
    Set Cat = createObject("ADOX.Catalog")​
    Cat.Create _​
    "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\maNouvelleBase.mdb"​
    End Sub​
    Deux autres Démos de michel_M qui permettent de créer et gérer une base de données Access , sans avoir MS Access d'installé​
    Lien supprimé
    Lien supprimé
    Lien supprimé
  • Remplacer les constantes par leur valeur lors de la création d'une table Acces , en VBA
  • Ecrire dans un classeur fermé , en insérant les données à la suite des valeurs existantes
    Lien supprimé
  • Afficher la deuxieme valeur la plus elevee du champ ""nbHeuresAstreinte" de la table "Table2"
    Sub deuxiemeValeurPlusElevee()​
    'Afficher la 2eme valeur la plus élevée dans​
    'le champ "nbHeuresAstreinte" de la table "Table2"​
    Dim Conn As ADODB.Connection​
    Dim rsT As ADODB.Recordset​
    Dim Fichier As String, rSQL As String​
    Fichier = thisWorkbook.Path & "\maBase_V01.mdb"​
    Set Conn = New ADODB.Connection​
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _​
    Fichier & ";"​
    rSQL = "SELECT MAX(nbHeuresAstreinte) AS nbHeuresAstreinte FROM Table2" & _​
    " WHERE(nbHeuresAstreinte <(SELECT MAX(nbHeuresAstreinte) AS nbHeuresAstreinte FROM Table2))"​
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Conn​
    .Open rSQL, , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
    msgBox rsT.Fields(0).Value​
    rsT.Close​
    Conn.Close​
    End Sub​
  • Compacter une base Access
    Sub compacterBaseAccess()​
    'necessite d'activer la reference Microsoft Jet and Replication Objects 2.6 Library​
    Dim bdCompact As String, Fichier As String​
    Dim Source As String, Destination As String​
    Dim jtEng As JRO.jetEngine​
    Fichier = "C:\Documents and Settings\michel\maBase_V01.mdb" 'la base existante​
    bdCompact = "C:\Documents and Settings\michel\maBaseCompactee.mdb" 'la nouvelle base créée​
    Source = "Data Source=" & Fichier​
    Destination = "Data Source=" & bdCompact & ";" & "Jet OLEDB:Encrypt Database=True"​
    Set jtEng = New JRO.jetEngine​
    jtEng.compactDatabase Source, Destination​
    Set jtEng = Nothing​
    End Sub​
  • Ecrire dans une cellule spécifique d'un classeur fermé ( exemple dans la cellule A1 de la Feuil1 )
    Sub exportDonneeDansCellule()​
    Dim Cn As ADODB.Connection​
    Dim Cd As ADODB.Command​
    Dim Rst As ADODB.Recordset​
    Dim Fichier As String​
    Fichier = "C:\dossier\monClasseur.xls" 'adapter le chemin des fichiers fermés​
    Set Cn = New ADODB.Connection​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _​
    "Data Source=" & Fichier & ";" & _​
    "Extended Properties=""Excel 8.0;HDR=No;"";"​
    Set Cd = New ADODB.Command​
    Cd.activeConnection = Cn​
    Cd.commandText = "SELECT * from Feuil1$A1:A1"​
    Set Rst = New ADODB.Recordset​
    Rst.Open Cd, , adOpenKeyset, adLockOptimistic​
    Rst(0).Value = " donnée test"​
    Rst.Update​
    Cn.Close​
    Set Cn = Nothing​
    Set Cd = Nothing​
    Set Rst = Nothing​
    End Sub​
  • Lire une cellule spécifique d'un classeur fermé
  • Extraire uniquement les données de la colonne A , d'un classeur fermé
    Private Sub userForm_Initialize()​
    'nécessite d'activer la référence Microsoft activeX Data Object 2.x Library​
    Dim Rs As ADODB.Recordset​
    Dim Cn As String​
    Dim Cible As String​
    Dim Fichier As String​
    Fichier = "C:\Fichier.xls"​
    Cn = "DRIVER={Microsoft Excel Driver (*.xls)};" & _​
    "readOnly=1;DBQ=" & Fichier​
    Cible = "SELECT * FROM [Feuil1$];"​
    Set Rs = New ADODB.Recordset​
    Rs.Open Cible, Cn, adOpenForwardOnly, adLockReadOnly, adCmdText​
    'les données à récuperer sont dans la colonne A​
    If Not Rs.EOF Then​
    comboBox1.addItem Rs.Fields(0).Name 'entete​
    Do While Not Rs.EOF​
    comboBox1.addItem Rs.Fields(0).Value​
    Rs.moveNext​
    Loop​
    End If​
    Rs.Close​
    Set Rs = Nothing​
    End Sub​
  • Ajouter un enregistrement dans une table Access
    Sub exportDonnees_Excel_Vers_Access()​
    'ajouter un enregistrement dans une table Access​
    'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library​
    Dim Conn As New ADODB.Connection​
    Dim rsT As New ADODB.Recordset​
    Dim maTable As String​
    maTable = "Table1"​
    With Conn​
    .Provider = "Microsoft.JET.OLEDB.4.0"​
    .Open "C:\Documents and Settings\michel\Excel\maBase_V01.mdb"​
    End With​
    With rsT​
    .activeConnection = Conn​
    .Open maTable, lockType:=adLockOptimistic​
    End With​
    With rsT​
    .addNew​
    .Fields("Nom").Value = Range("A1")​
    .Fields("prixUnit").Value = Range("B1")​
    .Fields("Matricule").Value = Range("C1")​
    .Update​
    End With​
    rsT.Close​
    Conn.Close​
    End Sub​
  • Suppression conditionnelle d'enregistrements , dans une table Access
    Sub suppressionEnregistrementTable()​
    Dim Cn As ADODB.Connection​
    Dim Rst As ADODB.Recordset​
    Dim Requete As String, maTable As String, Donnee As String​
    Dim Valeur As Integer​
    Set Cn = New ADODB.Connection​
    Set Rst = New ADODB.Recordset​
    Cn.Provider = "Microsoft.Jet.Oledb.4.0"​
    Cn.connectionString = "C:\maBase_V02.mdb"​
    Cn.Open​
    maTable = "lesPoints"​
    '​
    '*pour des valeurs numeriques *
    'suppression des enregistrements si le champ "nbPoints" est égal à 5 , dans la table "lesPoints"​
    '​
    Valeur = 5​
    Requete = "DELETE * FROM " & maTable & " WHERE nbPoints=" & Valeur​
    '​
    '** pour des données texte **
    'suppression des lignes si le champ "Nom" est égal à "Nom03" , dans la table "lesPoints"​
    'Donnee = "Nom03"​
    'Requete = "DELETE * FROM " & maTable & " WHERE ?[Nom]='" & Donnee & "'"​
    '****
    Cn.Execute Requete​
    Cn.Close​
    End Sub​
  • Importer les donnees de tous les onglets d'un classeur fermé , vers la feuille active
  • Quelques exemples actions dans des classeurs fermés et des bases Access
    Boucler sur tous les classeurs fermés d'un répertoire , et importer les données de cellules discontinues​
    Importer dans la feuille active les données de tous les onglets d'un classeur fermé​
    Ajouter un nouvel onglet dans un classeur fermé , et y insérer des données​
    Transférer une Table Access dans un classeur fermé​
    Lien supprimé
  • Créer une nouvelle feuille dans un classeur fermé et y exporter les données de la feuille active
    Sub Export_versNouvelleFeuille_classeurExcelFerme()​
    'transférer la feuille "devis" dans un nouvel onglet d'un classeur fermé​
    Dim oRS As ADODB.Recordset​
    Dim oConn As ADODB.Connection​
    Dim maFeuille As String, prepaTable As String​
    Dim j As Integer, i As Integer​
    'nom(sans espace!) de la feuille Excel qui va etre créée dans le classeur fermé​
    maFeuille = "archiveDevis001"​
    Set oConn = New ADODB.Connection oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _​
    "Data Source=C:\classeur1_Fermé.xls;" & _​
    "Extended Properties=""Excel 8.0;HDR=NO;"""​
    For i = 1 To 10 'nombre de colonnes à transférer​
    'paramétrage entêtes de colonnes et types de données​
    prepaTable = prepaTable & "Colonne" & i & " Memo ," 'adapter les types de données​
    Next i​
    prepaTable = Left(prepaTable, Len(prepaTable) - 1)​
    'creation nouvelle Feuille Excel​
    oConn.Execute "create table " & maFeuille & "(" & prepaTable & ")"​
    Set oRS = New ADODB.Recordset​
    oRS.Open "Select * from " & maFeuille, oConn, adOpenKeyset, adLockOptimistic​
    For j = 1 To 40 'nombre de lignes à transferer​
    oRS.addNew​
    For i = 1 To 10 'nombre de colonnes à transférer​
    oRS.Fields(i - 1) = activeSheet.Cells(j, i)​
    Next i​
    oRS.Update​
    Next j​
    oRS.Close​
    oConn.Close​
    End Sub​
  • Importer les feuilles complètes de plusieurs classeurs fermés
    Lien supprimé
  • Modifier un champ d'une table Access
    'Rechercher la valeur de la cellule A1 dans le champ "Matricule" de la table "maTable" , et modifier le champ "leChamp"​
    Sub test()​
    Dim Conn As ADODB.Connection​
    Dim rsT As ADODB.Recordset​
    Dim fld As ADODB.Field​
    Set Conn = New ADODB.Connection​
    With Conn​
    ' Définition du fournisseur OleDB pour la connexion​
    .Provider = "Microsoft.JET.OLEDB.4.0"​
    ' Ouverture d'une connexion​
    .Open thisWorkbook.Path & "\maBase_V01.mdb"​
    End With​
    Set rsT = New ADODB.Recordset​
    'table nommée "maTable"​
    rsT.Open "maTable", Conn, adOpenKeyset, adLockOptimistic​
    With rsT​
    .moveFirst​
    'recherche la valeur de la cellule A1 dans champ "Matricule"​
    .Find ("Matricule=" & Cells(1, 1))​
    'quand la valeur est trouvée , on modifie le champ "leChamp"​
    .Fields("leChamp") = "xxxx"​
    .Update​
    End With​
    Conn.Close​
    End Sub​
  • Requète dans un classeur fermé : Additionner les valeurs d'un champ avec critères filtres
    Lien supprimé
  • Ajouter une colonne dans une table Access existante
    Sub ajoutColonne_tableAccessExistante()​
    Dim Cnn As New ADODB.Connection​
    Dim Cat As New ADOX.Catalog​
    Dim Rst As New Recordset​
    Dim Reponse As String, Fichier As String​
    On Error goTo Fin​
    Fichier = "C:\maBase_V02.mdb"​
    Cnn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _​
    Data Source= ' & Fichier & "';"​
    Set Cat.activeConnection = Cnn​
    Cat.Tables("lesPoints").Columns.Append "nouveauChamp", adWChar, 50​
    Rst.Open "lesPoints", Cnn, adOpenKeyset, adLockOptimistic, adCmdTable​
    Fin:​
    Cnn.Close​
    Set Rst = Nothing​
    Set Cat = Nothing​
    Set nouvelleColonne = Nothing​
    Set Cnn = Nothing​
    End Sub​
  • Effectuer un tri croissant dans le champ "Nom" d'une table Access
    Sub tri_Croissant_Champ_baseAccess()​
    'effectuer un tri croissant dans la colonne "Nom" de la table "lesPoints"​
    Dim Cnn As New ADODB.Connection​
    Dim Cat As New ADOX.Catalog​
    Dim indexTri As New ADOX.Index​
    Dim Rst As New ADODB.Recordset​
    Dim Fichier As String​
    On Error goTo Fin​
    Fichier = "C:\maBase_V03.mdb"​
    Cnn.Open "Provider='Microsoft.Jet.OLEDB.4.0';" & _​
    Data Source=' & Fichier & "';"​
    Set Cat.activeConnection = Cnn​
    With indexTri​
    .Columns.Append "Nom"​
    .Columns("Nom").sortOrder = adSortAscending 'tri croissant​
    .Name = "Ascending"​
    '.Columns("Nom").sortOrder = adSortDescending 'pour les tris décroissants​
    '.Name = "Descending"​
    .indexNulls = adIndexNullsAllow​
    End With​
    'ajout d'un index pour la table "lesPoints"​
    'attention : renvoie une erreur si un index existe déjà​
    Cat.Tables("lesPoints").Indexes.Append indexTri​
    Rst.Index = indexTri.Name​
    Rst.Open "lesPoints", Cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect​
    'import dans la feuille Excel des données triées​
    Feuil1.Range("A1").copyFromRecordset Rst​
    Cat.Tables("lesPoints").Indexes.Delete indexTri.Name 'suppression index​
    Fin:​
    Cnn.Close​
    Set Cat = Nothing​
    Set indexTri = Nothing​
    Set Rst = Nothing​
    Set Cnn = Nothing​
    End Sub​
  • Lister les utilisateurs connectés à une base Access
    Sub listerConnectesBaseAccess()​
    Dim Cible As String​
    Dim Fso As Object​
    Cible = "J:\maBase.ldb"​
    Set Fso = createObject("Scripting.fileSystemObject")​
    If Fso.fileExists(Cible) = False Then Exit Sub​
    Open Cible For Input As #1​
    Input #1, Cible​
    Close #1​
    msgBox Cible​
    End Sub​
    Une autre solution​
    Sub listerConnectesBaseAccess_V02()​
    Const JET_SCHEMA_USERROSTER = "{947bb102-5d43-11d1-bdbf-00c04fb92675}"​
    Dim Cnn As New ADODB.Connection​
    Dim Rst As ADODB.Recordset​
    Dim Fichier As String​
    Fichier = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"​
    Cnn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _​
    Data Source= & Fichier & ";"​
    Set Rst = Cnn.openSchema(adSchemaProviderSpecific, , JET_SCHEMA_USERROSTER)​
    Debug.Print Rst.getString​
    Cnn.Close​
    End Sub​
  • Lister le nom des feuilles d'un classeur fermé
    Remarque :​
    Si vous avez des plages de cellules nommées dans les classeurs fermés , il est possible de les filtrer (elles ne possèdent pas le symbole $ dans leur nom )​
  • Créer des liens hypertextes vers chaque onglet de classeurs fermés
    Cet exemple boucle sur tous les classeurs fermés d'un repertoire , pour lister le nom des feuilles et créer un lien hypertexte vers chacun des onglets​
    Lien supprimé
  • Récupérer des plages de cellules précises dans plusieurs classeurs fermés ( une démo de @+Thierry )
    Lien supprimé
    Une adaptation de michel_M pour les versions d'office antérieures​
    Lien supprimé
    Une nouvelle version de @+Thierry qui permet d'importer plusieurs plages de cellules Discontinues​
    Lien supprimé
  • Exporter des images dans une base Access puis les réimporter dans un userForm Excel
    Lien supprimé
    Un autre exemple qui utilise l'objet Stream (uniquement disponible à partir de la version ADO 2.5)​
    Lien supprimé
  • Exporter une image placée dans une Feuille , vers une base Access
  • Supprimer les enregistrements d'une table Access , si le champ "cityName" est vide
    Sub supprimerEnregistrements_siChampVide()​
    Dim Cn As ADODB.Connection​
    Dim Rst As ADODB.Recordset​
    Dim Requete As String, maTable As String​
    Set Cn = New ADODB.Connection​
    Set Rst = New ADODB.Recordset​
    Cn.Provider = "Microsoft.Jet.Oledb.4.0"​
    Cn.connectionString = "C:\maBase.mdb"​
    Cn.Open​
    maTable = "Table1"​
    'supprime l'enregistrement si le champ "cityName" est vide​
    Requete = "DELETE * FROM " & maTable & " WHERE cityName IS NULL"​
    Cn.Execute Requete​
    Cn.Close​
    End Sub​
  • Afficher la version MDAC du poste ( Microsoft Data Access Components )
    Sub VersionMDAC()​
    Dim Cn As ADODB.Connection​
    Set Cn = createObject("ADODB.Connection")​
    msgBox "Version MDAC : " & Cn.Version​
    Set Cn = Nothing​
    End Sub​
  • Les limitations d'Excel , utilisé comme une base de données
    Il n'est pas possible de supprimer les lignes complétes dans un classeur fermé (enregistrements )​
    Vous obtiendrez un message d'erreur "La suppression des données dans un table attachée n'est pas géré par le pilote ISAM"​
    Vous pourrez uniquement vider les cellules​
    Vous ne pourrez pas supprimer les lignes vides qui contenaient les données supprimées et les requetes continueront d'afficher l'es enregistrements vides correspondant à ces lignes vides.​
    Il n'est pas possible de supprimer une cellule contenant une formule :​
    Vous aurez un message d'erreur "L'opération demandée n'est pas autorisée dans ce contexte"​
    Excel ne peut pas gérer les connections multiples et simultanées à un meme classeur​
    Les requetes répétées peuvent entrainer des problemes de mémoire disponible dans Excel​
    Il n'est pas possible d'utiliser un classeur protégé par un mot de passe​
    Il n'est pas possible d'utiliser le classeur si la feuille contenant les données est protégée​
    La gestion des tables :​
    Les onglets ( les tables ) contiennent le symbole $ en fin de nom , ce qui n'est pas le cas des plages de cellules nommées ( pourtant aussi considérées comme des tables lors des requetes )​
    Par contre si vous avez ajouté une table dynamiquement dans un classeur ( en utilisant par exemple "Create Table" ou "SELECT INTO" ) , 2 noms différents sont renvoyés pour cette nouvelle table : avec et sans $​
    En fait si vous ouvrez le classeur manuellement vous constaterez que l'onglet est bien ajouté mais aussi une plage de cellules nommées correspondant à la plage de données insérées dynamiquement ( voir Insertion/nom/definir ) :par exemple =maNouvelleFeuille!$A$1:$C$1265​
    Nota :​
    Lors des requètes pour lister le nom des onglets d'un classeur fermé , par ADOX ou ADO(méthode openSchema) , les noms sont renvoyés par ordre alphabétique​
    Par défaut , le pilote ODBC analyse uniquement les 8 premieres lignes du classeur fermé pour déterminer le type de données dans chaque colonne.​
    Cela peut entrainer 2 types de problemes :​
    1. Dans certains cas particuliers , les données exportées vers un classeur fermé peuvent etre tronquées . Si , par exemple , les 8 premiers enregistrements d'un champ contiennent des données texte inférieur ou égal à 255 caractères , le champ sera considéré de type Texte . Si ensuite vous ajoutez des enregistrements de longueur plus importante ils seront tronqués .​
    2. Si vous voulez importer les informations d'une colonne qui contient à la fois des données numériques et texte , c'est le type majoritaire dans les 8 premiere lignes qui définira le type de données à récupérer : les autres données de la colonnes seront considérées comme NULL (vide)​
    Si la colonne contient 4 valeurs numériques et 4 valeurs texte , la requete renvoie 4 nombres et 4 valeurs NULL.​
    La seule solution consiste à activer l'option d'importation "IMEX=1" ( exemple : "extended properties=""Excel 8.0;IMEX=1""" ) . Les données numériques seront importées comme du texte .​
    Je n'ai pas vérifié le point suivant , mais l'aide MSDN indique :​
    Avertissement concernant la modification de données Excel à l'aide d'ADO : Lorsque vous insérez des données texte , la valeur de texte est précédée d'une apostrophe. Ceci peut provoquer des problèmes par la suite lors du travail avec les nouvelles données.​
  • Publipostage ciblé Word Excel
    Cette démo de michel_M permet d'effectuer un publipostage ciblé avec plusieurs options de filtre​
    Lien supprimé
  • Insérer des formules de liaison dans un classeur fermé
    Une démo de michel_M​
    Lien supprimé
  • Information sur la propriété HDR , pour la connection à un classeur fermé
    par exemple : "Extended Properties=""Excel 8.0;HDR=Yes"""​
    si HDR =No , la premiere ligne est considérée comme un enregistrement​
    si HDR=Yes , la premiere ligne est considérée comme un entête​
  • Supprimer une table dans une base Access
    Sub supprimerTableAccess()​
    Dim Cn As New ADODB.Connection​
    Dim maBase As String​
    maBase = "C:\Documents and Settings\michel\dossier\maBase.mdb"​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & maBase​
    Cn.Execute "DROP TABLE laTable"​
    Cn.Close​
    Set Cn = Nothing​
    End Sub​
  • Requête filtrée sur des dates , des nombres ou du texte
    Lien supprimé
  • Filtrer une plage de valeurs à importer : Récupérer les données comprises entre 3 et 5
    exemple : récupérer uniquement les valeurs entre 3 et 5 dans le champ "numeroType" de la Table1​
    rSQL = "SELECT * FROM Table1 WHERE numeroType BETWEEN 3 AND 5"​
  • Lister les enregistrements si le champ "nomVille" contient les données Vienne, Condrieu ou xldCity
    Sub requeteFiltreSurListeDonnees()​
    Dim Cn As ADODB.Connection​
    Dim rsT As ADODB.Recordset​
    Dim Fichier As String, rSQL As String​
    Fichier = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"​
    Set Cn = New ADODB.Connection​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Fichier & ";"​
    rSQL = "SELECT * FROM Table1 WHERE nomVille IN ('Vienne','Condrieu','xldCity')"​
    Set rsT = New ADODB.Recordset​
    rsT.Open rSQL, Cn, adOpenForwardOnly, adLockReadOnly, adCmdText​
    If Not rsT.EOF Then Range("A1").copyFromRecordset rsT​
    rsT.Close​
    Cn.Close​
    End Sub​
  • Et inversement , pour lister les enregistrements qui ne sont pas compris dans la liste de données
    rSQL = "SELECT * FROM Table1 WHERE nomVille NOT IN ('Vienne','Condrieu','xldCity')"​
  • Des informations sur l'opérateur LIKE
    Le lien vers l'aide en ligne Microsoft
  • Une autre méthode pour ajouter un enregistrement dans une table Access
    Sub ajoutEnregistrementTableAccess()​
    'source : K Dales​
    Dim Cn As ADODB.Connection​
    Dim xSQL As String​
    Set Cn = New ADODB.Connection​
    Cn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; " & _​
    "DBQ=C:\Documents and Settings\michel\dossier\general\excel\Database.mdb"​
    xSQL = "INSERT INTO maTable " _​
    & "VALUES ('" & Range("A1").Value & "', '" & Range("A2").Value & "', '" _​
    & Range("A3").Value & "', '" & Range("A4").Value & "')"​
    Cn.Execute xSQL​
    Cn.Close​
    Set Cn = Nothing​
    End Sub​
  • Comparer 2 colonnes dans des feuilles différentes , et lister les données communes
    La Feuil1 contient une colonne dont l'entete s'appelle numeroPeriode1 .La Feuil2 contient une colonne dont l'entete s'appelle numeroPeriode2​
    L'objectif est de comparer les 2 colonnes , puis de lister les données de la Feuil2 qui apparaissent aussi dans la Feuil1​
    Sub requeteControleDoublons()​
    Dim Source As ADODB.Connection​
    Dim Requete As ADODB.Recordset​
    Dim Fichier As String, xSQL As String​
    Dim i As Long​
    Fichier = "C:\maBase.xls"​
    Set Source = New ADODB.Connection​
    Source.Open "Provider = Microsoft.Jet.OLEDB.4.0;" & _​
    "data source=" & Fichier & ";" & _​
    "extended properties=""Excel 8.0;HDR=Yes"""​
    xSQL = "SELECT DISTINCT Feuil2$.numeroPeriode2 " & _​
    "FROM [Feuil2$] " & _​
    "INNER JOIN [Feuil1$] ON Feuil2$.numeroPeriode2 = Feuil1$.numeroPeriode1"​
    Set Requete = New ADODB.Recordset​
    Set Requete = Source.Execute(xSQL)​
    If Requete.EOF Then​
    msgBox "Il n'y a pas de doublons"​
    Else​
    'msgBox "il y a des doublons ."​
    Range("A1").copyFromRecordset Requete​
    End If​
    Requete.Close​
    Source.Close​
    End Sub​
  • Vérifier si la table "Table1" existe dans une base Access
    Sub verifierSiTableAccessExiste()​
    Dim Cat As ADOX.Catalog​
    Dim Table As ADOX.Table​
    Dim Fichier As String, xConnect As String​
    Dim Cn As ADODB.Connection​
    Fichier = ("C:\Documents and Settings\michel\dossier\dataBase.mdb")​
    Set Cn = New Connection​
    With Cn​
    .Provider = "Microsoft.Jet.OLEDB.4.0"​
    .Open Fichier​
    End With​
    Set Cat = createObject("ADOX.Catalog")​
    Set Cat.activeConnection = Cn​
    On Error Resume Next​
    Set Table = Cat.tables("Table1")​
    If Table Is Nothing Then​
    msgBox "La table n'existe pas ."​
    Else​
    msgBox "La table existe ."​
    End If​
    Set Cn = Nothing​
    Set Cat = Nothing​
    End Sub​
    Une autre méthode , en bouclant sur toutes les tables​
  • Compter le nombre d'enregistrements total dans la table "Table1"
    Sub nombreEnregistrementsTotal_dansTable()​
    Dim Cn As New ADODB.Connection​
    Dim Rs As ADODB.Recordset​
    Dim maBase As String​
    maBase = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & maBase​
    Set Rs = Cn.Execute("SELECT COUNT(*)FROM Table1")​
    msgBox Rs(0)​
    Cn.Close​
    Set Cn = Nothing​
    End Sub​
  • Compter le nombre d'enregistrements conditionnel
    (Exemple : le nombre d'enregistrements dont le champ "nombreHeures" est superieur ou égal à 7)​
    Set Rs = Cn.Execute("SELECT COUNT(*)FROM Table1 WHERE nombreHeures >= " & 7)​
  • Importer un fichier texte par la methode ADO
    Sub importFichierTexte_ADO()​
    Dim Rc As ADODB.Recordset​
    Dim cn As String, Chemin As String, Fichier As String​
    Dim i As Long​
    Chemin = "C:\Documents and Settings\michel\dossier\general\excel"​
    Fichier = "monFichier.txt"​
    cn = "Driver={Microsoft Text Driver (*.txt; *.csv)};" & _​
    "Dbq=" & Chemin & ";Extensions=asc,csv,tab,txt"​
    Set Rc = New ADODB.Recordset​
    Rc.Open Source:="SELECT * FROM " & Fichier, activeConnection:=cn​
    If Not Rc.EOF Then​
    For i = 0 To Rc.Fields.Count - 1 'recuperation entetes​
    Cells(1, 1).Offset(0, i) = Rc.Fields(i).Name​
    Next​
    Range("A2").copyFromRecordset Rc​
    End If​
    Rc.Close​
    End Sub​
  • Comment piloter un fichier DBase (.dbf) depuis Excel
    Sub piloterDBase_ajoutEnregistrement()​
    'necessite d'activer la reference Microsoft ActiveX Data Objects x.x Library​
    Dim Cn As ADODB.Connection​
    Dim Rs As ADODB.Recordset​
    Dim Chemin As String, Cible As String, laBase As String​
    Chemin = "C:\Documents and Settings\michel\dossier"​
    laBase = "maBase.dbf"​
    Set Cn = New ADODB.Connection​
    Cn.Open _​
    "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _​
    Chemin & ";"​
    Cible = "SELECT * FROM " & laBase & ";"​
    Set Rs = New Recordset​
    Rs.Open Cible, Cn, adOpenKeyset, adLockOptimistic​
    With Rs​
    .addNew​
    .Fields(0) = "Texte"​
    .Fields(1) = CDate("2005-07-04")​
    .Fields(2) = 10001​
    .Fields(3) = "un commentaire"​
    .Update​
    End With​
    Rs.Close​
    Cn.Close​
    End Sub​
  • Importer dans Excel les données contenues dans un champ d'une base type Dbase
    Lien supprimé
  • Effectuer une jointure entre 2 fichiers DBase (.dbf)
  • Créer un fichier DBF par macro .
    Dim Cn As ADODB.Connection​
    Dim Fichier As String, Chemin As String​
    Chemin = "C:\Documents and Settings\michel\dossier\general\excel"​
    Fichier = "maBase"​
    Set Cn = New ADODB.Connection​
    Cn.Open "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=" & _​
    Chemin & ";"​
    Cn.Execute "Create Table " & Fichier & " (champTexte TEXT(30), champNum INTEGER)"​
    Cn.Execute "Insert Into " & Fichier & " (champTexte, champNum) Values ('Donnee01', 1004599)"​
    Cn.Execute "Insert Into " & Fichier & " (champTexte, champNum) Values ('Donnee02', 435455)"​
    Cn.Close​
    Set Cn = Nothing​
  • Gérer les apostrophes contenus dans les enregistrements lors d'une requete
    'l'apostrophe du mot à rechercher dans la table doit etre doublé​
    donneeCible = "'Saint Jean D''Angely'"​
    Fichier = "C:\dataBase.mdb"​
    Set Conn = New ADODB.Connection​
    Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Fichier & ";"​
    rSQL = "SELECT codePostal FROM Table1 WHERE nomVille="​
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Conn​
    .Open rSQL & donneeCible, , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
  • Gérer des noms de tables et des noms de champs qui contiennent des espaces
    Pour que les requetes fonctionnent , il faut encadrer les noms par des crochets​
    Lien supprimé
    Remarque:​
    Il est tout de meme préférable d'utiliser des noms de champs sans espace, quand cela est possible​
  • Vérifier l'état de la connection à une base de données
  • Mettre à jour un enregistrement dans une table Access
    Sub miseAJour_Enregistrement_tableAccess()​
    Dim Cn As ADODB.Connection​
    Dim Requete As String​
    Set Cn = New ADODB.Connection​
    Cn.Provider = "Microsoft.Jet.Oledb.4.0"​
    Cn.connectionString = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"​
    Cn.Open​
    Requete = "UPDATE Table1 Set nombrePieces = laValeur, nomUser = 'leNom', laDate = #10/11/2005# WHERE numSerie = 8"​
    Cn.Execute Requete​
    Cn.Close​
    End Sub​
  • Copier les données du champ "Origine" vers le champ "Destination" , dans la Table1 d'une base Access
    Sub modificationChampTableAccess()​
    Dim Cn As ADODB.Connection​
    Dim Requete As String​
    Set Cn = New ADODB.Connection​
    Cn.Provider = "Microsoft.Jet.Oledb.4.0"​
    Cn.connectionString = "C:\Documents and Settings\michel\dossier\dataBase.mdb"​
    Cn.Open​
    Requete = "UPDATE Table1 SET Table1.Origine = Table1.Destination"​
    Cn.Execute Requete​
    Cn.Close​
    End Sub​
  • Transposer les données des Champ1 et Champ2 , dans la Table1 d'une base Access
    Sub transposerDonnees_deuxChamps_tableAccess()​
    Dim Cn As ADODB.Connection​
    Dim Requete As String​
    Set Cn = New ADODB.Connection​
    Cn.Provider = "Microsoft.Jet.Oledb.4.0"​
    Cn.connectionString = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"​
    Cn.Open​
    Requete = "UPDATE Table1 SET Table1.Champ1 = Table1.Champ2 , " & _​
    "Table1.Champ2 = Table1.Champ1"​
    Cn.Execute Requete​
    Cn.Close​
    End Sub​
  • Informations sur l'utilisation de la propriété recordCount
  • Récupérer uniquement les 10 premiers enregistrements
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Cn​
    .Open "SELECT TOP 10 * FROM maTable"​
    End With​
  • Récupérer uniquement 50 % des premiers enregistrements
    Set rsT = New ADODB.Recordset​
    With rsT​
    .activeConnection = Cn​
    .Open "SELECT TOP 50 PERCENT * FROM maTable"​
    End With​
  • Gérer les retours à la lignes dans les enregistrements lors des imports / exports entre Excel et Access
  • Effectuer une jointure entre 3 tables d'une base Access
    Lien supprimé
  • Parametrer les colonnes d'une table Access pour qu'elles acceptent des enregistrements Vides / Null
    Dim tbl As ADOX.Table​
    Cat.activeConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _​
    "Data Source=C:\dataBase.mdb;"​
    Set Tbl = Cat.Tables("nomTable")​
    For j = 0 To Tbl.Columns.Count - 1​
    Tbl.Columns(j).Attributes = adColNullable​
    Next j​
    Une démo de @+Thierry pour exporter une plage de données contenant des cellules vides d'Excel vers une Base Access​
    La procedure montre aussi comment parametrer les types de données ( Numerique ) de certains champs , lors de la creation d'une nouvelle table​
    Lien supprimé
  • Se connecter à une base Access protégée par un mot de passe
    Dim Conn As New ADODB.Connection​
    Const Path As String = "C:\maBase.mdb"​
    With Conn​
    .Provider = "Microsoft.JET.OLEDB.4.0"​
    .Properties("Jet OLEDB:Database Password") = "monMotDePasse"​
    .Open Path​
    End With​
  • Afficher la date de la derniere modification effectuée dans une table Access
    Sub dateDerniereModificationTable_baseAccess()​
    Dim Cat As ADOX.Catalog​
    Dim laTable As ADOX.Table​
    Dim Fichier As String​
    Dim Cn As ADODB.Connection​
    Set Cn = New Connection​
    With Cn​
    .Provider = "Microsoft.Jet.OLEDB.4.0"​
    .Open Fichier​
    End With​
    Set Cat = createObject("ADOX.Catalog")​
    Set Cat.activeConnection = Cn​
    Set laTable = Cat.Tables("nomTable")​
    msgBox laTable.dateModified​
    Cn.Close​
    Set Cn = Nothing​
    Set Cat = Nothing​
    End Sub​
  • Transférer des enregistrements entre 2 classeurs fermés
    "Classeur1_Fermé.xls" est le classeur source . toutes les données de la Feuil1 sont récuperees dans la requete​
    Classeur2_Fermé.xls" est le classeur destination . les données recuperees sont ajoutées a la suite des enregistrements existants​
    Le classeur contenant la macro et les 2 classeurs fermés sont dans le meme repertoire​
    Sub tranfertEntreClasseursFermes()​
    Dim Cn As New ADODB.Connection​
    Dim oProdRS As New ADODB.Recordset, oRS As ADODB.Recordset​
    Dim oConn As ADODB.Connection​
    Dim j As Integer​
    '------------------------------------------------------------------​
    ' "Classeur1_Fermé.xls" est le classeur source​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _​
    "Data Source=" & thisWorkbook.Path & "\Classeur1_Fermé.xls;" & _​
    "Extended Properties=""Excel 8.0;HDR=NO;"""​
    'les donnees sources sont dans la Feuil1 du classeur "Classeur1_Fermé.xls"​
    oProdRS.Open "SELECT * FROM [Feuil1$]", Cn, adOpenStatic​
    '------------------------------------------------------------------​
    ' "Classeur2_Fermé.xls" est le classeur destination​
    Set oConn = New ADODB.Connection​
    oConn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _​
    "Data Source=" & thisWorkbook.Path & "\Classeur2_Fermé.xls;" & _​
    "Extended Properties=""Excel 8.0;HDR=NO;"""​
    'les donnees sont à placer dans la Feuil1 du classeur "Classeur2_Fermé.xls"​
    Set oRS = New ADODB.Recordset​
    oRS.Open "Select * from [Feuil1$]", oConn, adOpenKeyset, adLockOptimistic​
    '------------------------------------------------------------------​
    'transfert des données​
    Do While Not (oProdRS.EOF)​
    oRS.addNew​
    For j = 0 To oRS.Fields.Count - 1​
    oRS.Fields(j) = oProdRS.Fields(j).Value​
    Next j​
    oRS.Update​
    oProdRS.moveNext​
    Loop​
    oProdRS.Close​
    Cn.Close​
    oRS.Close​
    oConn.Close​
    End Sub​
    Lien supprimé
  • Exporter une table Access au format XML
    Vous trouverez un exemple qui réimporte le fichier XML vers la base Access dans la WikiPage9 : MichelXldPageNeuf
    Sub exportTableAccess_XML()​
    Dim Cn As ADODB.Connection​
    Dim Rs As ADODB.Recordset​
    Dim Fichier As String​
    Fichier = "C:\Documents and Settings\michel\dossier\general\excel\dataBase.mdb"​
    Set Cn = New ADODB.Connection​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & _​
    Fichier & ";"​
    Set Rs = New ADODB.Recordset​
    With Rs​
    .activeConnection = Cn​
    .Open "SELECT * FROM Table1", , adOpenStatic, adLockOptimistic, adCmdText​
    End With​
    Rs.Save "C:\exportTableTemporaire.xml", adPersistXML​
    'autre possibilité​
    'Rs.Save "C:\tableTemporaire.xls", adPersistXML​
    Cn.Close​
    End Sub​
  • Concaténer les données de 2 colonnes ( Champ1 et Champ2 ) vers une 3eme (Champ3) , dans un classeur fermé
    Private Sub concatenationDeuxColonnesClasseurFerme()​
    Dim Conn As ADODB.Connection​
    Dim Fichier As String, Direction As String, rSQL As String​
    Direction = thisWorkbook.Path​
    Fichier = "monClasseur.xls"​
    Application.screenUpdating = False​
    Set Conn = New ADODB.Connection​
    With Conn​
    .Provider = "Microsoft.Jet.OLEDB.4.0"​
    .connectionString = "Data Source=" & Direction & "\" & Fichier & _​
    ";Extended Properties=Excel 8.0;"​
    .Open​
    End With​
    rSQL = "UPDATE [Feuil1$] SET Champ3 = Champ1 + Champ2"​
    Conn.Execute Rsql​
    Conn.Close​
    Application.screenUpdating = True​
    End Sub​
  • Utiliser l'opérateur LIKE et les signes génériques .
    Lien supprimé
  • Créer une page HTML qui affiche le résultat d'une requete ADO
    Ce lien n'existe plus
  • Créer une table liée
    Sub creerTableLiee()​
    Dim Cat As ADOX.Catalog​
    Dim Tbl As ADOX.Table​
    Dim Cn As ADODB.Connection​
    Dim Fichier As String​
    'nom de la 1ere base contenant la table à lier​
    Fichier = "C:\Documents and Settings\michel\dossier\dataBase.mdb"​
    Set Cn = New ADODB.Connection​
    Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Fichier​
    Set Cat = New ADOX.Catalog​
    Set Tbl = New ADOX.Table​
    Cat.activeConnection = Cn​
    Tbl.Name = "tableLiee" 'nom de la table à lier​
    Set Tbl.parentCatalog = Cat​
    'Parametres de la 2eme base et la table qui vont etre liées​
    Tbl.Properties("Jet OLEDB:Link Datasource") = "C:\dataBase_V02.mdb"​
    Tbl.Properties("Jet OLEDB:Remote Table Name") = "Table1"​
    Tbl.Properties("Jet OLEDB:Create Link") = True​
    Cat.Tables.Append Tbl​
    Set Cat = Nothing​
    Cn.Close​
    Set Cn = Nothing​
    End Sub​
  • Compiler et trier les données de plusieurs fichier textes .txt
    Ce lien n'existe plus
  • Executer une macro Access depuis Excel: une solution donnée par Chris
Effectuer une importation d'Access de plus de 65536 lignes: une solution donnée par Chris



Si vous constatez des erreurs dans la page n'hesitez pas à m'en faire part .
Toutes vos idees sont les bienvenues .
Michel , Mise à jour le 25 Novembre 2006
 
Dernière modification par un modérateur:

Discussions similaires

Statistiques des forums

Discussions
311 709
Messages
2 081 754
Membres
101 812
dernier inscrit
trufu