ACCESS : Pourquoi Ms Access ?

Si vous entendez quelqu’un vous dire que MS Access est une base de données, c’est que votre interlocuteur ne le connaît pas ou ne s’est jamais aventuré au-delà de l’utilisation des tables et des requêtes. MS Access n’est pas une base de données (SGBDR). Il est plutôt à ranger dans la catégorie des RAD – acronyme de « Rapid Application Development » ou « Système de Développement Rapide d’Application » en Français.

C’est donc un produit qui intègre tous les composants nécessaires à la création « rapide » d’applications. Je mets le terme « rapide » entre guillemets, car bien qu’Access facilite la conception d’applications simples, concevoir une application complexe demande une certaine expertise.

Pourquoi choisir Access ?

Les utilisateurs qui choisissent Access le font généralement pour les bonnes – ou les mauvaises – raisons suivantes :

  • Disponible dans la version d’Office Professionnel ou en produit indépendant,
  • Dispose d’un Runtime
  • Facilité d’installation par rapport à d’autres produits de développement qui demande des compétences système et DBA.
  • Prise en main intuitive de l’interface graphique pour créer des tables, des relations et des requêtes,
  • Possibilité de lier des tables issues d’autres SGBDR,
  • Ensemble d’objets pour aller plus loin qu’une simple base de données,
  • Parfaitement intégré dans le monde Office et Windows.

Parmi les raisons contradictoires certaines sont factuelles, d’autres relèvent d’opinions, au pire des consensus fondés sur une méconnaissance du produit :

  • Édité par Microsoft (donc non libre),
  • Disponible uniquement sous Windows,
  • Base de données fichier (ACE), pas serveur,
  • ACE Limitée à 2 Go par fichier
  • Pas orienté Web
  • Méconnaissance de VBA (vu comme un langage de macros)
  • Confusion avec Excel (alors que ce sont 2 produits incomparables)
  • Mauvaise réputation en France (perçu comme un produit « bureautique »),

Vrai ou faux

Autant Ms Access n’est pas libre autant ce que vous produisez peut l’être, tout dépend de la licence que vous choisissez.

En effet, Access n’est disponible que sous Windows… mais fonctionne parfaitement sur une machine virtuelle.

ACE est une base de données fichier. Elle est très performante et a le mérite d’être parfaitement intégrée à Access. Cependant vous pouvez utiliser la base de données que vous souhaitez. Personnellement, tous mes projets d’envergure s’appuient sur Sql Server, MariaDb, PostgresSQL J’ai également travaillé sur de très grosses applications sur Oracle et Sql Server.

Oui ACE est limité à 2 Go. Mais vous êtes libre de choisir la base de données la plus adaptée.

Access n’est pas WEB. Si vous devez faire un site ou une application WEB ce n’est pas le bon produit. Il m’est arrivé de discuter avec des clients qui souhaitaient absolument une techno WEB… sans savoir pourquoi. En analysant le besoin je me suis rendu compte que ce besoin n’était pas justifié.

VBA est un langage accessible mais qui demande de la rigueur sur des projets professionnels. Ceux qui confondent VBA et macro ne connaissent pas le sujet.

Excel et Access n’ont rien à voir. L’un est un tableur qui manipule des données alors que l’autre est un RAD. Oui on peut parfaitement créer une IHM avec Excel, cependant il ne gérera jamais une base de données.

MS Access et sa mauvaise réputation en France

Cette mauvaise réputation est héritée d’une époque (fin des années 90 – début 2000) où les DSI voyaient Access comme une menace : des utilisateurs métiers créaient leurs propres outils, sans passer par les services informatiques. Ce que les DSI oubliaient c’est que ces utilisateurs :

  • maîtrisaient leur métier,
  • savaient ce dont ils avaient besoin
  • avaient un excellent taux de réactivité

Certes ils péchaient d’un manque d’expérience en développement. Cela donnait des applications parfois bancales… mais toujours utiles puisque 10 ans plus tard elles étaient toujours là.

Ms Access et ses objets

Les objets pour créer une application sont les suivants :

  • Tables (internes ou liées)
  • Requêtes SQL
  • Formulaires (saisie, consultation, suppression, navigation…)
  • Etats d’impression,
  • Macros (automatisation simpliste)
  • Modules pour le langage VBA. (automatisation avancée)

Access et les autres SGBDR

Bien que la plupart des applications utilisent un SGBDR pour la persistance, on peut créer des applications sans jamais avoir besoin d’une base de données. A contrario on peut avoir besoin d’une application standalone, sans aucune IHM et qui fonctionne de manière autonome.
Une application de synchronisation intelligente de données entre SGBDR hétérogènes en est le parfait exemple.
En règle générale Access permet de créer un front-end léger couplé à une base ACE, SQL Server, PostgresSQL, MariaDb.

Le pire côtoie le meilleur

Le pire c’est une appli conçue à la va-vite, sans modèle de données solide. Les adeptes du QDD (Quick & Dirty & Disposable, soit Vite, Sale et Jetable en français) en sont friand. Une fois le « jetable » installé, il est difficile de s’en passer, la réécriture étant couteuse et l’informatique le parent pauvre de l’industrie, on retrouve ces applications 15 ans plus tard pleinement fonctionnelles. Leur maintenance se fait souvent dans la douleur et les larmes et Access est déclaré comme un produit d’amateurs.

Le meilleur s’appuie sur les concepts qui régissent tous les logiciels. Elle s’appuie sur un choix de base de données pertinent, elle est maintenable, évolutive et répondant aux vrais besoins métier.

En résumé

Access est sous-estimé, mal compris, mais redoutablement efficace quand il est bien maîtrisé. Beaucoup ont tenté de migrer des applications Access vers des technos « à la mode » sans retrouver la puissance et l’ergonomie des composants d’Access. L’application est alors vu pas les utilisateurs comme ces livres inutiles qui ornent l’étagère la plus haute des bibliothèques.

VBA : Split()

Split() est une fonction pratique et largement utilisée. A partir d’une chaine de texte elle renvoie un objet Tableau (Array) composé de ses éléments en utilisant le séparateur désigné.

Par exemple :

Dim monTexte as String
Dim monTableau as Variant
montexte = "Bonjour je suis Sam"

monTableau = Split(montexte, " ")

Dans l’exemple ci-dessus le tableau monTableau contiendra :
montableau(0) >> « Bonjour »
montableau(1) >> « je »
montableau(2) >> « suis »
montableau(3) >> « Sam »

On peut donc utiliser un boucle (Do, While, For) pour parcourir le tableau, comme on peut utiliser l’indice comme c’est fait dans la liste précédente. Ci-dessous un exemple avec une boucle For.

Dim i As Long
Dim vArray As Variant
vArray = Split("Bonjour je suis Sam", " ")
For i = 0 To UBound(vArray)
    Debug.Print vArray(i)
Next

Split renvoie un objet tableau, Split() est un tableau

Si Split est un tableau on peut l’utiliser en tant que tel sans l’affecter à une variable.
Dans l’exemple suivant on récupère directement l’item du tableau.

Dim monPrenom as String
monPrenom = Split(montexte, " ")(3)

La variable monPrenom vaudra :
monPrenom >> « Sam »

Le paramètre (3) accolé directement à la fonction Split() peut vous paraitre étrange à première vue pourtant ce n’est ni plus ni moins que l’indice du tableau.

Conclusion

Lorsqu’on veut récupérer une valeur et que l’on connait avec certitude sa position, utiliser cette syntaxe est plus rapide, cependant lorsqu’on veut utiliser plus d’une valeur, l’utilisation classique est plus performante.

ACCESS : Erreur 3010 avec DAO.CreateTableDef()

Ce problème est constaté le 16/01/2023

Le CreateTabledef() de DAO ne fonctionne plus comme avant !
Avec un :

Set td = db.CreateTableDef(tblname, dbAttachSavePWD, tblname, strConnexionOdbc)


On obtient une erreur 3010, la table existe déjà, mais non elle n’existe pas, ni dans la liste des objets, ni dans TableDefs et encore moins dans MsysObjects.

Quand on observe td on peut voir que Name et égal à SourceTableName
Le contournement est possible :

Set td = db.CreateTableDef()
td.Name = strTable
td.SourceTableName = tblname
td.Connect = strConnexionOdbc
td.Attributes = dbAttachSavePWD


       Ou encore :

DoCmd.TransferDatabase acLink, "ODBC Database", strConnexionOdbc, acTable, tblname, strTable, False, False

Ce problème a été constaté avec une application qui fonctionne avec ce code depuis 2016, et sur une fonctionnalité qui est utilisée quotidiennement.

Le pilote ODBC n’est pas en cause, des tests ont été fait dans ce sens.

MS ACCESS et CHATGPT

Puisque c’est la mode de ChatGpt et qu’on peut, au premier contact, lui faire dire ce que l’on veut, j’ai tenté une expérience sur le thème :

MS ACCESS est-il une base de données ?

Et voici l’échange avec ChatGpt :

User
Est-ce que Microsoft Access est une base de données ?
ChatGPT
Oui, Microsoft Access est une application de gestion de base de données relationnelle. Elle fait partie de la suite Microsoft Office et offre un environnement convivial permettant aux utilisateurs de créer, gérer et interroger des bases de données. Access utilise le modèle de base de données relationnelle, où les données sont organisées en tables, et les relations entre ces tables peuvent être définies pour permettre des liens logiques entre les différentes parties de la base de données. Bien que Microsoft Access soit utilisé pour des applications de base de données plus petites ou moins complexes, il peut être une solution pratique pour les utilisateurs qui ont des besoins de gestion de données sans nécessiter une infrastructure de base de données plus robuste.(ChatGpt 3.5 – le 26/01/2024)

La fin est absolument vrai. Ceux qui n’ont pas besoin d’une application robuste et n’ont pas de budget pour une infrastructure, Ms Access reste une bonne solution.

Mais vous pensez bien que cette réponse, plutôt réservée aux néophytes ou aux détracteurs de MS Access ne m’a pas convaincu. J’ai donc poussé plus loin l’expérience.

Ms Access n’est pas qu’une base de données

User
Non MS Access n’est pas une base de données.
ChatGPT
Je comprends que la terminologie peut parfois prêter à confusion. Pour clarifier, Microsoft Access est une application de gestion de base de données relationnelle. Cela signifie qu’Access fournit un environnement pour créer, gérer et interroger des bases de données relationnelles. Les bases de données créées avec Microsoft Access utilisent le modèle relationnel, où les données sont organisées en tables et les relations entre ces tables peuvent être définies.
Cependant, il est vrai que l’on peut parfois entendre des personnes dire que « Microsoft Access n’est pas une base de données » dans le sens où il ne s’agit pas d’un système de gestion de base de données (SGBD) autonome comme MySQL, PostgreSQL, ou Microsoft SQL Server. Access est plutôt une application qui inclut un moteur de base de données intégré.
Donc, selon le contexte, on peut se référer à Microsoft Access comme une application de gestion de base de données ou comme un système de gestion de base de données intégré.(ChatGpt 3.5 – le 26/01/2024)

ChatGPT vient de mettre le doigt sur 2 affirmations qui sont vrais :

  1. Le moteur ACE n’est pas autonome comme MySql, Oracle et autre.
  2. Ms Access inclus un moteur de base de données (ACE).

Rapid Application Development le RAD de Microsoft

Je décide donc d’aller plus loin dans la démonstration et de rentrer un peu plus dans le fond du problème.

User
Mais on peut utiliser MS Access sans se servir de ACE, donc ce n’est pas une base de données mais plutôt un RAD.
ChatGPT
Vous avez raison de souligner que Microsoft Access est souvent utilisé comme un outil de développement rapide d’applications (RAD – Rapid Application Development) plutôt que simplement comme un système de gestion de base de données (SGBD) autonome. Microsoft Access combine un moteur de base de données intégré (Microsoft Jet Database Engine ou ACE Database Engine) avec un environnement de développement qui permet aux utilisateurs de créer rapidement des applications liées à des bases de données.
Dans ce contexte, on peut considérer Microsoft Access comme un outil RAD qui offre une interface conviviale pour créer des applications associées à des bases de données, plutôt qu’un SGBD autonome. L’utilisation de l’ACE Database Engine permet à Access de gérer les données de manière relationnelle.
Il est important de noter que, bien que Microsoft Access puisse être utilisé pour le développement rapide d’applications, il a ses limites en termes de performances et d’évolutivité, ce qui le rend plus adapté à des applications de taille moyenne ou à des tâches spécifiques plutôt qu’à des solutions d’entreprise massives. Pour des applications plus complexes ou des volumes de données importants, des SGBD autonomes peuvent être préférables.(ChatGpt 3.5 – le 26/01/2024)


ChatGPT indique bien que MS Access, utilisé sans son composant ACE (le SGBDR tant décrié), est un RAD.

Ms Access et les applications Massives

Je décide de pousser ChatGPT un peu plus loin sur le thème des applications dites « massives ».

User
Ms Access peut utiliser des SGBD autonomes, il peut donc répondre à une demande d’application massive.
ChatGPT
Vous avez raison. Microsoft Access offre également la possibilité d’utiliser des sources de données externes, y compris des systèmes de gestion de base de données (SGBD) autonomes tels que Microsoft SQL Server, MySQL, ou Oracle. Cela permet d’accéder à des bases de données plus robustes et adaptées à des charges de travail plus importantes.
En utilisant Access comme interface frontale, vous pouvez développer des applications qui exploitent la puissance de SGBD autonomes pour gérer des volumes de données plus importants et offrir des performances optimisées. Cela peut rendre Access plus adapté à des applications plus massives, en tirant parti de la robustesse des SGBD sous-jacents tout en profitant de l’interface de développement rapide d’applications qu’Access offre.
Il est important de choisir la solution en fonction des besoins spécifiques du projet, de la complexité de l’application, des volumes de données anticipés et des exigences de performances. Utiliser Access comme interface frontale avec un SGBD autonome en backend est une approche courante pour tirer parti des avantages des deux mondes.(ChatGpt 3.5 – le 26/01/2024)

Voilà, nous sommes dans le coeur du sujet. Ms Access en frontal peut être utilisé pour répondre à des besoins d’applications massives. Pour moi ce n’est pas nouveau, cela fait plusieurs années que j’ai fait le choix technique d’utiliser Ms Access comme un RAD pour le Front-end et un SGBDR autonome (MySql, Sql Server, Oracle) pour le Back-end.

ChatGPT, Ms Access et le méchant humain

Mais comme je suis un peu obstiné, certains pourraient utiliser le vocable « chiant ». Je poursuis la discussion, car c’est bien d’une discussion qu’il s’agit.

User
En fait tu ne sais pas trop ce que raconte, tu dis tout et son contraire.
ChatGPT
Je m’excuse si mes réponses ont pu sembler contradictoires ou confuses. Permettez-moi de clarifier : Microsoft Access est un outil de gestion de base de données relationnelle qui combine un moteur de base de données intégré avec un environnement de développement. Vous pouvez utiliser Access de différentes manières, que ce soit en tant que système autonome avec son propre moteur de base de données (Jet Database Engine ou ACE Database Engine) ou en connectant Access à des SGBD autonomes externes tels que Microsoft SQL Server.
Cependant, il est important de noter que bien que Microsoft Access puisse être utilisé pour des applications de différentes tailles, il peut avoir des limitations en termes de performances et d’évolutivité par rapport à des SGBD autonomes plus puissants. Pour des applications massives et complexes, il peut être recommandé d’utiliser directement un SGBD autonome.
Encore une fois, je m’excuse pour toute confusion, et j’espère que cela clarifie la situation. Si vous avez des questions plus spécifiques ou des préoccupations, n’hésitez pas à les partager.(ChatGpt 3.5 – le 26/01/2024)

J’avoue que même si je m’adresse à une machine, le fond et la forme de mon affirmation ne sont pas du tout adaptés. J’en suis profondément désolé et m’en excuse. Mais cela permet cependant de voir les comportements intéressants suivants :

  1. ChatGPT a une capacité de synthèse.
  2. ChatGPT sait se remettre en question.
  3. ChatGPT sait s’excuser.
  4. ChatGPT ne semble pas apprendre des prompts.

Les trois premiers points sont vraiment peu courant chez les humains.

Frontend ou Backend là est la question

Je poursuis donc l’expérience pour tenter de lui en faire dire plus.

User
peut-on utiliser MS access en frontal avec un SGBD autonome pour des applications massives ?
ChatGPT
L’utilisation de Microsoft Access en tant qu’interface frontale avec un SGBD autonome en tant que backend est techniquement possible, et cela peut être une approche viable pour certaines applications, y compris celles qui peuvent être considérées comme massives. Cela permet de tirer parti de la convivialité de l’interface de développement rapide d’applications d’Access tout en utilisant un SGBD plus robuste pour stocker et gérer les données.
Voici quelques points à considérer :
Taille et complexité de l’application : Pour des applications massives avec des volumes de données importants et une complexité élevée, il peut être plus approprié d’envisager des SGBD autonomes tels que Microsoft SQL Server, Oracle, ou d’autres solutions.
Performances : Access peut avoir des limitations en termes de performances par rapport à des SGBD autonomes, surtout lorsque la taille des données ou le nombre d’utilisateurs simultanés augmente. Il est important d’évaluer les exigences de performances de votre application.
Sécurité : Lorsque vous utilisez Access avec un SGBD externe, assurez-vous de mettre en place des mécanismes appropriés de sécurité et d’accès aux données pour garantir l’intégrité et la confidentialité.
Évolutivité : Si vous prévoyez une croissance importante de votre application, il est essentiel d’évaluer la capacité d’évolutivité de votre solution. Certains SGBD autonomes offrent de meilleures capacités d’évolutivité que d’autres.
Maintenance : La maintenance d’une application dépend de la complexité de la solution. L’utilisation de SGBD autonomes peut parfois nécessiter des compétences techniques plus avancées pour la gestion et la maintenance.
En résumé, l’utilisation de Microsoft Access en tant qu’interface frontale avec un SGBD autonome en backend peut être une option, mais cela dépend des besoins spécifiques de votre application. Il est recommandé d’évaluer attentivement les caractéristiques et les exigences de votre projet avant de prendre une décision.(ChatGpt 3.5 – le 26/01/2024)


Conclusion

Pour moi ChatGPT s’avère être un bon outil… utilisé dans des mains compétentes. S’attacher à sa première réponse, et je l’ai déjà constaté sur des essais précédents, est loin d’être pertinent, il s’avère dans la majorité des cas comme contre-productif.
Donc n’hésitez pas à creuser, à le contredire et à aller dans les détails (chercher la petite bête). A moins que vous ne poursuiviez le but d’obtenir une réponse partiale, un consensus ou une réponse rapide sans autre forme de procès.

Pour finir voici la copie d’écran de la discussion.

VBA : La recherche et les accents en SQL et VBA.

Rechercher dans une base de données avec l’opérateur Like est assez trivial. Avec quelques jokers on arrive à retrouver ce que l’on souhaite. Cependant lorsque on a affaire à des contenus ayant des caractères accentués il est difficile de récupérer à la fois ceux qui en comporte et ceux qui n’en ont pas.

L’objet de ce billet est d’utiliser VBA pour contourner ce problème.

La première chose à faire est de créer une fonction qui va traiter le mot recherché.

Function ConvertAccForLike(strValue As String) As String
' Fabrice Constans (MVP ACCESS) mars 2016
If InStr(1, strValue, "a") > 0 Then
    strValue = Replace(strValue, "a", "[aàâä]")
End If
If InStr(1, strValue, "e") > 0 Then
    strValue = Replace(strValue, "e", "[eéèêë]")
End If
If InStr(1, strValue, "i") > 0 Then
    strValue = Replace(strValue, "i", "[iîï]")
End If
If InStr(1, strValue, "o") > 0 Then
    strValue = Replace(strValue, "o", "[oôö]")
End If
If InStr(1, strValue, "u") > 0 Then
    strValue = Replace(strValue, "u", "[uùûü]")
End If
ConvertAccForLike = strValue
End Function

Dans cette fonction, on recherche la présence des voyelles, une à une, en commençant par le a, ensuite le e, puis le i, etc. Chaque fois que la voyelle est détectée on la remplace par la syntaxe Contient de l’opérateur Like, soit […]

Pour le mot « eleve », la valeur renvoyée sera :

"[eéèêë]l[eéèêë]v[eéèêë]"

Les mots trouvés seront :

eleve, éleve, élève, élevé…

Vous pouvez l’utiliser directement dans objet requête, une source de formulaire, une clause Where d’un OpenForm ou OpenReport comme dans une requête en VBA.

Voici son utilisation :

SELECT * FROM matable WHERE champ1 LIKE convertAccForLike("eleve");

Évidemment vous pouvez compléter avec les autres jokers.

SELECT * FROM matable WHERE champ1 LIKE convertAccForLike("eleve?");

Dans ce cas la valeur renvoyée sera :

"[eéèêë]l[eéèêë]v[eéèêë]?"

Ce bout de code fonctionne avec des tables liées, cependant lorsque vous utilisez d’autres bases de données comme Sql Server, MariaDB, PostgreSql, il vaut mieux travailler directement sur ces dernières pour des raisons évidentes de performance.

N’hésitez pas à laisser un commentaire.

VBA : Bang ou Dot ?

Lorsque vous développez en VBA, êtes-vous plutôt Bang (!) ou plutôt Dot (.) ou mélangez-vous allégrement les deux formes de syntaxe Dang/Bot ?

Pour savoir où vous vous situez, voici un exemple de chaque syntaxe.

'Bang
Forms!monformulaire!maliste

'Dot
Forms.monformulaire.maliste

'Dang ou Bot :)
Forms.monformulaire!macolonne

Le Bang

C’est la syntaxe originelle de VBA quand il apparut pour la première fois sur Ms Access 1.1. On retrouve de nombreux exemples sur Internet et dans des applications anciennes ou développez à grand coup de copier/coller issu du net, et sans surprise dans le code remonté par les IA.

Le Bang a une signification particulière depuis l’apparition du Dot. Prenons par exemple l’objet Recordset de la bibliothèque DAO (Microsoft Office xx.0 Object Library) dans l’Explorateur d’Objets (F2) de VBE.

On voit dans l’Explorateur d’Objets qu’un élément de la classe bénéficie d’une icône particulière et qu’en le sélectionnant il apparait comme Membre par défaut. Le Bang désigne cet objet (ou propriété) implicitement sans pour autant qu’on spécifie sa nature.

Partant du modèle indiquant que Fields est le membre par défaut de Recordset et que Value est le membre par défaut de Field on crée l’exemple de manipulation Bang/Dot suivant :

Sub test()
Dim rs As DAO.Recordset
Set rs = CurrentDb.OpenRecordset("select * FROM matable", dbOpenSnapshot)

'renvoi le nom de la colonne Nom
Debug.Print rs!nom.Name  'bang/dot
Debug.Print rs.Fields("nom").Name  'équivalent dot

'renvoi la valeur de la colonne Nom
Debug.Print rs!nom    'bang ou Value est le membre par défaut de Field
Debug.Print rs.Fields("nom")  'dot avec bang implicite
Debug.Print rs.Fields("nom").value  'dot explicite

'provoque une erreur
Debug.Print rs!nom!Name     'bang non maitrisé
Debug.Print rs.Fields("nom")!Name  'dot/bang non maitrisé

rs.Close
Set rs = Nothing

End Sub

Alors pourquoi le Dot ? Quels avantages ?

L’utilisation de Dot, même si elle est plus verbeuse, permet l’affichage de l’autocomplétion à la touche du point (Dot) appuyée.

L’autocomplétion pour ceux qui ne sont pas habitués à l’utilisation des EDI (Environnement de Développement Intégré) sont des listes très utiles qui recenses les propriétés, méthodes et objets des classes invoquées.

Outre sont coté pratique d’aide à la saisie, il y a, pour les plus curieux, un tremplin de découverte et d’exploration de classe.

Le côté verbeux de Dot ne doit pas rebuter le développeur car à première lecture du code et sans forcément connaitre la classe utilisée, il n’y a pas de doute sur ce que le concepteur fait.

Conclusion

Si la forme Dot peut remplacer la forme Bang, il faut être vigilant lors de l’utilisation du Bang et le mélange des deux doit être effectué dans la plus grande connaissance de la classe.

Etes-vous Dot, Bang ou Dang/Bot ?
Si vous voyez du Bang, éprouvez-vous le besoin de le transformer en Dot ?
Donnez moi votre point de vue sur le sujet.

Assistant Excel – Powerpoint

Vous créez souvent des slides Powerpoint à partir d’Excel alors cet assistant est fait pour vous.

L’assistant Graphics Extractor vous permet de créer d’un simple clic des slides Powerpoint à partir de zones contenues dans des feuilles Excel.

Sélectionnez les zones Excel que vous souhaitez inclure dans vos slides.

  1. Sélectionnez votre modèle
  2. Sélectionnez la première page d’insertion
  3. Créer votre balise d’extraction
  4. Sélectionnez vos zones à extraire
  5. Cliquez sur Extraire
  6. Le fichier Powerpoint s’ouvre avec les zones Excel extraites.

Une fois les balises incluses dans le fichier Excel vous pourrez recréer les slides Powerpoint à l’infini, en supprimer ou en ajouter.

Vous pouvez envoyer vos slides sans avoir à joindre le fichier Excel, cela garantie la sécurité et la confidentialité des données.

Le gain de temps est notable.

VBA : IsIn() une fonction d’analyse de paramètres

Cette fonction détermine si la valeur (value) passée appartient à la liste (listvalue).

Public Function isIn(value As Variant, listValue As String, _
                     Optional sep As String = ";") As Boolean
'------------------------------------------------------------------------------------
' Procedure : isIn
' Author    : Fabrice CONSTANS (MVP)
' Date      : 10/08/2023
' Purpose   : renvoi VRAI si value transmise fait partie de la liste listValue
' Parameters: listValue est une liste d'éléments séparés par sep
'             value peut être un élément de la liste listValue
' Return    : Boolean
' Copyright : © L'intégralité du code ci-dessous est la propriété de son auteur (Author)
'             
'------------------------------------------------------------------------------------

    Dim tbl As Variant
    Dim i As Long
    If isNullOuVide(value) Then Exit Function

    tbl = Split(listValue, sep)
    For i = 0 To UBound(tbl)
        If tbl(i) = CStr(value) Then
            isIn = True
            Exit Function
        End If
    Next
End Function

2 paramètres obligatoires :

  • value pour la valeur à chercher
  • listvalue pour la liste des valeurs à explorer

1 paramètre facultatif :

  • sep pour le séparateur de la liste à explorer.

On l’utilise de cette manière avec le séparateur par défaut.

If isIn(1,"2;5;8;6") Then
   Msgbox "1 fait bien parti de la liste
Else
   Msgbox "1 ne fait pas parti de la liste"
Endif

Ou encore en précisant le séparateur.

mavar = 1
maliste = "1|2|3|8|94|100|15|50"

If isIn(mavar, maliste, "|") then
   Msgbox "1 fait bien parti de la liste
Else
   Msgbox "1 ne fait pas parti de la liste"
Endif  
 

Cette fonction peut être modifiée pour traiter le Null. J’ai également créé des variantes avec des Array et ParamArray pour le paramètre listvalue.

Vous utilisez une autre méthode ?
Vous souhaitez échanger sur ce sujet ?
N’hésitez pas à laisser un commentaire.