VBA - Débutant à Ninja - Série intermédiaire (A) | Andrew Jarick | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

VBA - Débutant à Ninja - Série intermédiaire (A)

teacher avatar Andrew Jarick, Intelligent Automation Specialist

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      01 - Leçon 8 de VBA - Intro de contenu intermédiaire

      1:56

    • 2.

      02 - Leçon de VBA 9 - Plus de fonctions de classeur

      20:53

    • 3.

      03 - Leçon VBA 10 - Boîtes de dialogue de fichiers

      19:23

    • 4.

      04 - Leçon de VBA 11 - Courir sur des événements

      20:04

    • 5.

      05 - Leçon de VBA 12 - Traiter les données

      27:47

    • 6.

      06 - Leçon VBA 13 - Tableaux

      32:15

    • 7.

      07 - Leçon de VBA 14 - Dates

      25:07

    • 8.

      08 - Leçon VBA 15 - Formulaires d'utilisateur et expérience utilisateur

      21:36

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

206

apprenants

--

projet

À propos de ce cours

VBA Beginner To Ninja vous apprend à devenir un programmeur ninja Visual Basic compétent pour les applications. Le cours est divisé en trois séries, débutantes, intermédiaires et avancées. La série débutante se concentre sur les fondamentaux de la VBA et vous fournit les connaissances nécessaires pour commencer à programmer vos propres macros de la VBA. Au fur et à mesure que vous progressez, les cours de séries Intermédiaire et Avancé, se concentrent davantage sur les fonctionnalités spécifiques que vous rencontrerez dans le monde réel, vous fournissant tous les outils dont vous aurez besoin pour pouvoir s'attaquer aux tâches les plus complexes.

Contrairement aux autres cours VBA, VBA Beginner To Ninja aussi :

  • Met en évidence les erreurs courantes auxquelles les développeurs VBA sont souvent entrés, et offre l'approche alternative aux meilleures pratiques.
  • Vous apprend à fabriquer le code le plus efficace, minimisant les ressources informatiques pendant l'exécution du code.
  • Vous apprend à construire des applications robustes qui sont supportables et plus résistantes aux erreurs de changement et d'utilisateurs.
  • Vous disposez des connaissances et des outils pour pouvoir programmer vous-même, limitant la quantité de googling que vous devrez faire tout en programmant pour résoudre des problèmes.
  • Montre comment intégrer le VBA à d'autres technologies, telles que les navigateurs Web, le HTML, le XML et le SQL
  • Vous montre comment écrire des programmes VBA qui évitent d'automatiser l'interface utilisateur MS Office et comment s'intégrer programmatically à ces objets directement et virtuellement.
  • Détails sur la façon d'adopter l'UX (expérience utilisateur) et de créer de belles interfaces utilisateur fonctionnelles que les utilisateurs apprécieront réellement de l'utiliser.

Rencontrez votre enseignant·e

Teacher Profile Image

Andrew Jarick

Intelligent Automation Specialist

Enseignant·e

Hello, I'm Andrew.

Voir le profil complet

Level: Intermediate

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

Transcription

1. 01 - Leçon VBA 8 - Introduction intermédiaire du contenu: Bienvenue dans la prochaine phase de devenir un ninja musta Visual Basic. Je m'appelle Andrew Derek et je serai votre instructeur. Si vous êtes nouveau à VBA, je vous suggère de commencer par mon début, bien sûr, parce que nous sommes sur le point de sauter directement dans certains sujets qui nécessiteront des connaissances préalables. Reportez-vous simplement à ma page de profil de partage de compétences pour trouver le lien vers le cours de débutant. Pour ceux d'entre vous qui sont prêts, obtenez à l'aise Excel ouvert sur votre ordinateur. Et commençons. Je commencerai par dire que la structure du contenu intermédiaire changera légèrement par rapport au cours débutant. Commencez bien sûr avec structuré de manière à couvrir les bases ainsi que du contenu supplémentaire dans chaque leçon pour assurer une bonne compréhension large des fondamentaux de VB I. Avec les principes fondamentaux couverts, le contenu intermédiaire sera étendu sur plusieurs cours. Comme vous pouvez l'imaginer, il y a beaucoup à couvrir. Bien que je vous recommande d'apprendre et de comprendre tous les sujets abordés, cette approche vous donne la possibilité d'apprendre ce que vous voulez de manière sélective. Cela peut être dû au fait que vous êtes confronté à un problème particulier sur le lieu de travail ou par curiosité ou désir de maîtrise. Comme au début, bien sûr, je vais continuer à aborder les erreurs courantes que les développeurs de VB I font et ce que les meilleures méthodes de pratique devraient raser le résultat souhaité. En fin de compte, je veux aider à rendre votre code efficace, robuste et à fournir à votre fin utilise une expérience convaincante. Dans ce cours, nous allons couvrir les fonctions de classeur plus critiques, avait une boîte de dialogue Créer un fichier. Comment faire fonctionner le code sur des événements spécifiques, parlera de traiter des jeux de données. Et je vais vous présenter l'une des fonctions les plus puissantes de VBA. Les tableaux couvriront également plusieurs façons de traiter les dates et commenceront à approfondir les formulaires utilisateur et l'expérience utilisateur. Maintenant, commençons. Je te vois dans la prochaine vidéo. 2. 02 - Leçon VBA 9 - Plus de fonctions de livre d'exercices: Bienvenue à la leçon 9, plus de fonctions de classeur. Dans le monde réel, vous aurez besoin de connaître ces fonctions critiques de classeur VBA. Dans cette leçon, vous découvrirez comment ouvrir, fermer et enregistrer des classeurs par programme, créer un chemin de fichier complet lorsqu'il est connu à partir de la logique métier et des hypothèses basées sur des scénarios. Vous apprendrez à gérer les messages contextuels lorsque vous ouvrez un classeur par programme et que vous écrivez du code pour ouvrir des classeurs protégés par mot de passe. Vous apprendrez à charger des fichiers énormes instantanément. Et je vais expliquer les arguments facultatifs pour la commande d'ouverture du classeur. Allons passer à autre chose. Considérons ce scénario. Vous êtes invité à écrire une macro qui nécessite des données provenant d'une source externe. Les données sont automatiquement produites chaque jour à une heure spécifique et sont déposées dans un répertoire spécifique. Donc c'est un connu, c'est une constante qui ne va pas changer. Le fichier sera toujours déposé dans ce dossier tous les jours. L' automne qui est généré automatiquement a une convention de dénomination spécifique, c'est-à-dire l'année, le mois, jour et l'année étant caractère complet année de deux caractères mois à Caractère Jour sur le point de conversion de devise scolaire csv. Et ce type de convention de dénomination est en fait assez commun avec ces tâches automatiques qui créent des fichiers. Et c'est pour éviter que la chute soit écrasée par le prochain fichier dies. Et il y a en fait les utilisations qui utilisent ces fichiers. Donc ça veut dire deux ou trois choses. Cela signifie que nous ne pouvons pas modifier le fichier ou le supprimer. Nous ne pouvons pas le déplacer et nous ne devrions pas garder le suivi trop longtemps juste au cas où cela verrouillerait d'autres personnes hors du fichier. Enfin, l'équipe dans laquelle vous êtes a aussi besoin d'une copie de l'automne pour ses propres besoins. On doit faire une copie de ce dossier. Jetons donc rapidement un coup d'oeil à la question de dépôt. Je ramènerai mes documents ici. D' accord. Donc c'est le dossier. Je vais ouvrir si vite. Ok, on y va. Comme nous pouvons le voir, c'est un fichier assez simple. Ce n'est que trois colonnes. On doit sortir avec un pays et on a des valeurs. Il s'agit de valeurs de conversion de devise. Vous pouvez également remarquer que le type de fichier est un CSV ou une valeur séparée par des virgules. Les fichiers CSV ne sont en fait que des fichiers texte. Cependant, ils peuvent être ouverts dans Excel car il fichier CSV stocke essentiellement une table de données. Je vais juste fermer rapidement ceci et l'ouvrir dans le Bloc-notes juste pour montrer que vous n'avez pas enregistré. Je ramène ça ici, clic droit ouvert avec. Donc, c'est à quoi ressemble le fichier, ouvrant dans le bloc-notes. Donc, au premier rang contient nos frappeurs. Et comme vous pouvez le voir, la valeur h est séparée par une virgule tout au long. Je vais fermer ça. Donc, le premier problème que nous devons penser est que le nom de fichier change tous les jours. Cependant, nous avons fourni suffisamment d'informations pour pouvoir créer dynamiquement ce nom de fichier et ouvrir le fichier à condition qu'il ait été créé automatiquement à la date et à l'heure spécifiques. Normalement dans le lieu de travail avec ces types de travaux, les chutes sont déposées sur un lecteur de partage réseau. Cependant, dans ce cas, il va juste être sur mon disque local dans mon dossier de documents. Mais c'est très bien. Le concept est toujours le même. Donc, je vais juste commencer par une constante parce que nous savons que le fichier va apparaître dans un répertoire tous les jours dans un répertoire spécifique et ce répertoire ne va pas changer. Donc c'est juste mon dossier de documents. Comme je l'ai déjà dit, ils sont généralement sur des disques partagés réseau, mais le concept est le même. Donc, le but de l'utilisation de variables pour créer un nom de fichier est de sorte que nous pouvons concaténer ces chaînes ensemble pour créer le chemin complet et le nom de fichier afin que nous puissions l'ouvrir. En tant que tel, il est important de considérer à quoi ressemblera l'homme d'automne une fois que vous aurez concaténé toutes ces cordes ensemble. Ce que je veux dire par là est de chercher ces barres obliques inverses de répertoire et de s'assurer que vous avez réellement des barres obliques inverses où ils devraient être un. Donc, la constante suivante que je veux créer est cette partie du nom de fichier, car nous pouvons créer dynamiquement ceci en fonction de la date actuelle. Je vais juste l'utiliser dans une constante parce que cette partie ne va pas changer. Aussi. On va copier ça. Bon, alors définissons notre sous-routine. Je l'appelle juste un fichier de données ouvert. Et pensons à certaines des variables dont nous allons avoir besoin. Donc, nous allons certainement avoir besoin d'un objet classeur, particulier le classeur que nous allons ouvrir. Nous allons également avoir besoin du classeur actuel parce que nous pourrions retirer les données de l'ouverture à sens unique et les déposer dans celui-ci. De plus, nous allons avoir besoin des objets de feuille de calcul pour le classeur que nous allons ouvrir et le classeur dans lequel nous allons écrire les données. Alors maintenant, nous allons travailler sur la façon dont nous allons créer le nom de fichier, que nous nous attendons à ce qu'il ait ce format de date. Ainsi, l'année en caractères complets, mois en caractères, jour en caractères. Comment nous pouvons faire pour générer cela afin que nous puissions créer un chemin de fichier complet et un nom de fichier. Je vais juste traîner jusqu'à la fenêtre immédiate pendant une seconde. Vba a des fonctions intégrées qui peuvent nous renvoyer la date et l'heure actuelles. Généralement, utilisez la fonction now. Laisse-moi interroger cette fonction. Comme vous pouvez le voir, la fonction NOW a renvoyé des dés et l'horodatage actuel. Ce n'est pas exactement dans le même format que nous avons fait. Cependant, vous pouvez réellement l'utiliser et le forcer dans le format dont nous avons besoin. Et laissez-moi vous montrer comment faire ça. Donc je vais juste supprimer cette ligne. Alors. Nous pouvons utiliser la fonction de format. Et comme vous pouvez le voir, il nous demande de fournir un document qui est une expression. Donc, la chose que je veux lui fournir est l'expression maintenant, qui va retourner la date que nous venons de voir auparavant. Et l'argument suivant est le format. C' est donc très similaire à la structure de formatage des cellules Excel. Nous pouvons simplement spécifier le format dans lequel nous voulons que la hauteur soit renvoyée. Donc je, c'est pourquoi, pourquoi, pourquoi, pourquoi m, m d, mais proche élevé et frappé entrée. Vous verrez qu'il nous a fourni la date dans le format que nous avons besoin. Donc l'année, le mois, et le jour, vous faites glisser ça vers le bas. Ok, donc nous avons assez d'informations pour ouvrir le classeur que nous voulons ouvrir. Donc, la façon dont nous avons ouvert un classeur est, tout d' abord, la collection de classeurs. Et la collection de classeurs a une méthode enfant. Ouvert à froid. Et puis vous pouvez fournir un tas d'arguments. Mais nous sommes en fait capables d'ouvrir le classeur et même temps d'asseoir cet objet sur un objet que nous avons défini ici. Et nous allons juste l'utiliser dans une déclaration définie. Fermez comme des crochets, donc ce n'est pas contrarié avec nous. Donc essentiellement la syntaxe de ceci est que nous définissons l'objet et en spécifiant quels objets nous parlons. Et c'est celui que nous allons ouvrir. Alors maintenant, nous allons fournir le nom du fichier, qui sera le chemin d'accès complet du fichier, la date et le nom du fichier. Et nous utilisons des chaînes de concaténation d'esperluette. Et maintenant j'ai besoin de la date, alors moment. Et maintenant j'ai besoin du reste du nom du fichier. Maintenant, comme vous pouvez le voir, le nom du fichier est le premier document et il y a beaucoup d'autres arguments après cela, et les arguments qui sont ensuite entre crochets. Ce que cela signifie, c'est qu'ils sont en fait des arguments facultatifs, et je vais entrer dans ce que ces arguments clés sont plus tard dans la leçon. Alors ce que je veux faire, c'est prendre ce cahier que nous venons d'ouvrir, et je veux en citer ma propre copie. Donc, maintenant que j'ai mon objet classeur, je peux utiliser l'une des méthodes de cet objet pour enregistrer et enregistrer sous. Et je vais juste le mettre au même endroit. Donc, dans le même répertoire que nous venons de le prendre, Normalement, je veux dire, vous auriez probablement cela dans un répertoire différent, mais juste pour des raisons de démonstration. Donc, je vais juste l'utiliser à nouveau. Et je vais enregistrer le fichier dans un format différent de celui que nous avons ouvert. Donc c'est un CSV avec cette convention de nommage. Donc je vais changer le nom, la convention et le type de chute. Donc tout d'abord, je veux le rendez-vous dans l'autre sens. Donc di, di mois, mois, année, année, année, année. Et maintenant, nous devons également spécifier le format de fichier. Et je peux le faire en tapant le classeur Excel par défaut ou le classeur Excel normal. Je vais utiliser la valeur par défaut. Et c'est tout. Alors faisons ça pour voir comment on va. Si l'ajout à travers cela s'est soudainement passé, si je frappe FI une fois de plus. D' accord. Et je produis fini. Alors parlons de l'automne explorer pour voir ce qui se passe. Donc, nous pouvons voir que nous avons SI tomber ici, ce qui est génial, qui est le format et le nom de fichier que nous avons désigné. Ouvrons ça pour jeter un coup d'oeil. C' est déjà ouvert. On a oublié de le fermer. On y va. Nous avons donc ouvert le fichier et nous avons changé ce format de fichier en un livre XLS x whip. Permettez-moi juste d'ouvrir aussi la conversion de la monnaie c est v, afin que nous puissions les comparer côte à côte. C' est parfait. Pour que je puisse aller de l'avant et les fermer. Il y a une autre chose que je veux faire est de fermer le classeur après site Web, ça change faux. Alors réexécutons ça et voyons ce qui va se passer. Si nous avons un classeur qui existe déjà avec ce nom de fichier qui a gagné une sauvegarde comme au-dessus de lui. Alors je l'ai ouvert. Jetons un coup d'oeil. Oui, c'est le CSV. Et maintenant, nous allons sauver comme. Donc, il nous a fourni une boîte de message d'erreur. Et il nous demande, Voulons-nous écraser la note de côté pour l'instant, ce qui nous a donné une zone de débogage parce qu'il n'était pas capable de sauver, ce qui va finir dans cela et la fermer à nouveau. Donc, évidemment, ce n'est pas idéal en termes d'automatisation VBA car ces fenêtres contextuelles contiendront l'exécution de votre macro et nécessiteront une intervention de l'utilisateur pour les rejeter. Heureusement, nous sommes en mesure de supprimer ces types de pop-ups. Et la façon dont nous le faisons est de définir la propriété d'affichage qui appartient à l'objet d'application. Objet application étant l'instance d'Excel, qui est le parent de l'objet de collection de classeurs. Donc, si je tape application et puis affiche des alertes, vous pouvez dire que la méthode apparaît là est égale à false. Ce que cela signifie, c'est que pendant l'exécution du code, il supprimera les alertes de l'affichage. Et il sélectionnera automatiquement l'option par défaut. Mais n'oubliez pas de toujours définir la valeur true après que vous avez fini de courir. Essayons de nouveau maintenant pour voir si nous avons supprimé cette boîte pop-up. Donc, comme vous pouvez le voir, nous avons fini d'exécuter le code et nous n'avons pas vu de popup, ce qui est génial. Et si je viens d'ouvrir l'Explorateur de fichiers, nous pouvons voir que nous avons un nouveau fichier, donc il est sauvegardé au-dessus de l'automne existant qui était là. Ce qui est génial. Donc je vais juste sauter dans notre code. Ok, donc maintenant passons en revue certains des arguments supplémentaires que nous pouvons envoyer le classeur ouvert et classeurs Enregistrer sous commande. Maintenant, je ne vais pas les parcourir tous et en quelque sorte passer par ceux que je trouve essentiels à savoir, ce qui peut être utile pour supprimer davantage les alertes qui sont affichées lors d'une commande ouverte ou de sauvegarde. Tout cela peut être utile dans l'automatisation en général. Donc, tout d'abord, après la méthode ouverte, nous avons nos crochets d'ouverture et ensuite nous avons nos arguments à qui nous pouvons l'envoyer. Le premier est évidemment le nom de fichier, et c'est obligatoire. Vous devez spécifier quoi, quel livre vous souhaitez ouvrir. Et nous séparons les arguments par des virgules. Donc, comme vous pouvez le voir, lorsque je commence à taper des virgules, l'argument auquel nous faisons référence devient audacieux dans intellisense. Donc, c'est un donné que nous devons séparer nos arguments par des virgules. Donc, disons par exemple, je voulais définir l'argument charge corrompue. Une façon de le faire serait de frapper le coma jusqu'à ce que la charge corrompue soit en gras, ce qui est là. Ou ce que je pourrais faire est que je pourrais juste dire, tout d'abord, séparé par une virgule et ensuite effectivement enseigné l'argument de charge corrompu. Ensuite, avec un deux-points et un égal, et vous verrez que maintenant l'argument de charge corrompu est en gras dans IntelliSense, ce qui signifie que tout ce que je tape ici est pour l'argument charge corrompue. Ainsi, vous pouvez réellement spécifier l'ordre des arguments, ou vous pouvez simplement utiliser l'option virgule pour spécifier l'argument que vous souhaitez fournir. Donc, le premier est les liens de mise à jour. Maintenant, si vous avez ouvert un classeur dans le lieu de travail et qu'il contient des liens vers des sources externes, qu'il s'agisse d'un autre classeur ou d'un ensemble de données. Vous pouvez voir ce message apparaître qui dit, souhaitez-vous mettre à jour les liens vers ces données ? Maintenant, évidemment, j'ouvre un classeur par programme et il contient des liens. Il va afficher ce message, qui va contenir ma macro et je ne veux pas le faire. Ainsi, vous pouvez réellement spécifier false, ce qui empêchera cette boîte de message d'apparaître. L' argument suivant est en lecture seule. Ce que cela fait, c'est que nous avons ouvert le classeur en mode lecture seule, ce qui est assez explicite. Et cela peut être utile spécifiquement pour le scénario que nous venons construire dans lequel nous ne voulons pas éditer le fichier que nous ouvrons. Nous voulons juste extraire des données et les fermer rapidement. Et peut également empêcher le verrouillage de chute, ce qui peut être un problème dans l'environnement de travail avec plusieurs utilisateurs utilisant le même fichier. Le suivant est le format. Et cela est utilisé lorsque nous ouvrons un fichier texte tel qu'un CSV. Mais nous voulons spécifier que le délimiteur de fichier ou le caractère qui spécifie la séparation du champ h est différent d'une virgule. Il pourrait donc s'agir d'un onglet, d'un espace, d'un point-virgule ou d'un caractère habitué. Et c'est une liste énumérée, ce qui signifie que vous devez fournir un numéro et vous pouvez en fait juste Google quel numéro vous devez spécifier pour le haut de l'ouverture défectueuse, mais je vais juste passer rapidement par eux. Donc, on est pour le délimiteur séparé par des tabulations est un délimiteur séparé par des virgules, qui est la valeur par défaut. Trois est pour l'espace, quatre pour les point-virgules, cinq est rien, et six est le caractère personnalisé, que vous devrez spécifier la chute du délimiteur. Le suivant est le mot de passe. Encore une fois, dans le lieu de travail, qui peut avoir ouvert un classeur qui demande un mot de passe lorsque vous ouvrez le classeur. Et évidemment, c'est un autre point d'échec pour l'automatisation car il invite l'utilisateur à spécifier un mot de passe. Maintenant, vous pouvez réellement fournir ce mot de passe. Sauvegardons le mot de passe est juste mot de passe. Vous pouvez simplement spécifier cela comme une chaîne dans cet argument. Donc, si votre classeur contient un mot de passe, il est conseillé de simplement spécifier que dans une constante, similaire à la façon dont nous avons utilisé les constantes pour le chemin d'accès du fichier et pour le nom du fichier, afin que vous n'ayez pas à parler cela à chaque fois que vous ouvrez ou fermez le classeur, le suivant dont je veux parler est délimité. Donc, si nous avons spécifié qu'il s'agit d'un délimiteur personnalisé dans l'argument de format, nous devons spécifier ce que c'est. Ça pourrait être un manque, une double citation ou n'importe quoi. C' est juste le caractère utilisé dans ce fichier qui spécifie qu'il s'agit d'un délimiteur pour le champ suivant. Et le prochain dont je veux parler est la charge corrompue. C' est donc extrêmement utile. Et dans le lieu de travail tombe un communément stocké sur les serveurs de fichiers, même votre propre dossier Mes documents. Et si votre lieu de travail a de nombreuses utilisations et que vous traitez avec de gros fichiers Excel, cela peut évidemment causer des problèmes. D' après mon expérience, j'ai vu des classeurs prendre de deux à cinq minutes pour ouvrir. Et c'est dû à une ou deux choses. Tout d'abord, c'est dû à la bande passante réseau. Donc, si vous avez beaucoup d'utilisateurs sur votre réseau, il n'y a pas assez de bande passante pour fournir le fichier rapidement. Mais le principal coupable des fichiers de chargement lent autres que bande passante sur le réseau est le formatage inutile. J' ai remarqué que certains utilisateurs aiment remplir la mise en forme à travers un tableau entier ou même à la dernière ligne du classeur. Et cela rend non seulement le classeur incroyablement volumineux, mais il rend l'ouverture du classeur très lente car Excel a besoin d'effectuer beaucoup de tâches avant de présenter une ouverture du fichier. Donc, ce que peut faire la charge corrompue pour nous dans le cas où nous avons un classeur qui prend beaucoup de temps à ouvrir, ce que je vais faire est que je vais spécifier que c'est uniquement radar, mais je vais également spécifier des données d'extraction Excel dans l'argument de chargement corrompu. Et ce que cela fait, il ignorera tout formatage et nous ouvrirons l'automne aussi vite que possible à partir de la source du fichier, ce qui signifie que aussi vite qu'il peut être lu à partir du réseau, il sera ouvert. Et il ignorera tout le formatage et il suffit de l' ouvrir afin que vous puissiez rapidement y sauter, extraire des données et sauter. Ok, donc je vais juste les supprimer maintenant. Et maintenant, parlons des arguments que nous pouvons envoyer à la commande Enregistrer sous. Donc, le premier est le nom de fichier, ce qui est assez évident. C' est juste le nom de fichier que nous spécifions que nous voulons enregistrer le fichier sous. Et le suivant est le format de fichier, que nous avons rapidement couvert. Il y a de nombreuses options disponibles ici. Donc, si vous avez une exigence spécifique pour qu'un fichier soit enregistré dans un format particulier, alors il suffit de google l'énumération du format de fichier XML et vous verrez une liste complète des formats de fichier vers lesquels vous pouvez exporter le fichier. Les clés ici cependant, classeur Excel à défaut, qui est XLS X, vous pouvez également utiliser XML CSV. Un autre très commun, au moins dans mon expérience, est la feuille Excel XL, qui est pour la compatibilité descendante avec Excel 2003 retour aux classeurs 2007. C' est donc juste le format de fichier point XLS. Et le prochain dont je veux parler est la résolution des conflits. C' est donc ce qui se passe si nous avons plusieurs utilisations dans le même fichier. Et il spécifie quelles modifications doivent être priorisées pour être enregistrées. conséquent, la résolution par défaut est Excel USA, ce qui n'est pas idéal dans l'automatisation car elle demande à l'utilisateur de résoudre les conflits d'enregistrement. L' autre option est les modifications de session locale XL. Donc, ce que cela signifie est qu'Excel priorisera les changements d' utilisations locales par rapport aux modifications d'utilisations distantes. Et l'autre est les changements de session Excel. Donc c'est le contraire de celui que nous venons de couvrir. Ce qui signifie qu'Excel priorisera les autres changements d' utilisation par rapport aux nôtres dans cette session locale. Et cela résume les arguments clés que je voulais aborder dans cette leçon. Donc, ça se termine écouter neuf. Dans cette leçon que vous avez apprise sur l'ouverture, la fermeture et l'enregistrement des classeurs par programme, je vous ai montré comment créer un chemin de fichier complet pour un fichier basé sur la logique métier et les hypothèses, nous avons appris à supprimer lors de l'exécution du code, et comment ouvrir un classeur protégé par mot de passe. Je vous ai montré comment charger rapidement des fichiers qui prennent normalement beaucoup de temps à charger. Et j'ai expliqué les arguments optionnels clés pour la commande classeurs dot open. Merci d'avoir regardé, et je te verrai dans la prochaine vidéo. 3. 03 - Leçon VBA 10 - Boîtes de dialogue de fichiers: Bienvenue dans la leçon 10, boîtes de dialogue Fichier. Une boîte de dialogue Fichier est une fonctionnalité intégrée des applications Office. En bref, il s'agit essentiellement d'une fenêtre qui présente à l'utilisateur avec une vue du système de fichiers afin que l'utilisateur puisse sélectionner un fichier ou un répertoire le but spécifié par l'application qui le froident. Un exemple de boîte de dialogue de fichier est la fenêtre que vous verrez lorsque vous sélectionnez Fichier et ouvrez à partir de n'importe quelle application bureautique. Dans cette leçon, je vais vous apprendre à créer des boîtes de dialogue Fichier. Je vais expliquer les différentes propriétés que nous sommes en mesure d' asseoir pour personnaliser notre boîte de dialogue de fichier. Je vais vous montrer comment faire face à la réponse retournée des États-Unis. Le contenu supplémentaire que nous allons couvrir comprend avec des instructions, la fonction VBA DIR intégrée et la fonction VBA LAN intégrée. Allons le coup d'envoi. Les boîtes de dialogue de fichiers sont quelque chose que j'utilise souvent lors de la construction d'applications VBA. Le but de ceci est essentiellement d'inviter l'utilisateur à localiser un fichier ou un dossier. Juste quelques scénarios où vous pouvez utiliser. On pourrait demander à l'utilisateur de localiser un fichier dont vous allez extraire des données ou où l'utilisateur veut enregistrer un fichier, comment et où leurs utilisations vraiment jusqu'à votre propre imagination en utilisant le scénario de la dernière leçon comme un exemple, qui ouvre et enregistre une copie d'un classeur externe, vous pouvez essayer de localiser automatiquement le fichier comme nous connaissons le répertoire dans lequel il est censé se trouver et la convention de dénomination de ce nom de fichier. Et si elle échoue, invitez l'utilisateur à localiser le fichier manquant. Essayons donc d'y arriver. En regardant la routine de la dernière leçon, nous voulons essayer d'ouvrir le fichier en utilisant la logique que nous avons déjà définie. Et si cela échoue, présentez à l'utilisateur un sélecteur de fichiers. Il y a plusieurs façons de le faire si le fichier n'existe pas et que VBA tente de l'ouvrir, ce qui forcerait VBA à une erreur d'exécution. Dans ce cas, nous aurions besoin d'écrire un gestionnaire d'erreurs pour que le VBA sache quoi faire lorsque cette erreur spécifique est rencontrée. Cependant, nous couvrirons la gestion des erreurs dans une session en treillis. Et aussi, j'ai l'impression qu'il y a une meilleure façon d'y parvenir, au lieu d'essayer simplement d'ouvrir un fichier qui peut ou non exister, ce qui provoquerait une ère. Nous pourrions d'abord tester pour voir si le fichier existe réellement avant même de tenter de l'ouvrir. De cette façon, nous empêchons une ère d'exécution de se produire et la nécessité de répondre à cette époque. Donc, en résumé, ce que nous essayons de faire, c'est que nous essayons d'ouvrir le fichier automatiquement. Et si ce fichier n'existe pas, alors nous demanderons à l'utilisateur de sélectionner le fichier à ouvrir. Parlons maintenant de la façon de déterminer si un fichier existe ou non. Vba a une fonction que nous pouvons utiliser pour y arriver et ça s'appelle D. Laisse-moi monter la fenêtre immédiate. Donc, la fonction DIR, nous allons tester pour voir si un répertoire existe. Et s'il existe, il va retourner le nom du fichier sous forme de chaîne. Et si elle n'existe pas, elle retournera une chaîne de longueur 0. Donc, le fichier que nous avons utilisé dans le premier exemple, je viens de copier le chemin du fichier et je vais juste le fournir sous forme de chaîne. Et nous savons qu'il existe parce que nous l'avons utilisé dans la dernière leçon. Donc, si on appuie sur Entrée, on peut voir qu'il nous a fourni le nom du fichier. Maintenant, si je devais juste changer un personnage ici. Je sais que ce fichier n'existe pas, et si j'appuie sur Entrée, vous verrez qu'il nous a fourni une chaîne de longueur 0. Par conséquent, nous sommes en mesure d'utiliser la fonction DIR pour déterminer si le fichier existe ou non. Parce que si elle existe, elle retournera une chaîne supérieure à 0, ou la longueur de cette chaîne est supérieure à 0. Et si elle n'existe pas, elle retournera une chaîne qui a la longueur de 0. Il suffit de sortir la fenêtre immédiate du chemin. Commençons. Donc, afin de valider ce que la fonction DIR renvoie, je vais juste utiliser une instruction if de base. Attendez une minute. Je ramènerai la fenêtre immédiate à nouveau. Je vais juste le souligner pendant 1 seconde, et je vais juste vous montrer l'instruction length aussi. Donc, si j'enroule cette fonction dans une autre fonction qui nous indique la longueur d'une chaîne, et cette fonction est appelée Lin. Il est compté 31. Cela signifie donc qu'à l'intérieur de cette chaîne il y a 31 caractères. Maintenant, si je change cela pour qu'il n'existe pas, le fichier n'existe pas. Il nous a donné une longueur de 0 caractères. Donc, à l'intérieur de cette instruction if, nous sommes capables d'utiliser cette fonction len et enveloppé à l'intérieur de la fonction len est la fonction. Et si le fichier n'existe pas, nous allons obtenir 0. Et si le fichier existe, on aura quelque chose de plus grand que 0. Donc je vais sortir ça de la route à nouveau. Dé-commenter ceci. Si, donc, si la longueur de D et le chemin est le, ok, donc c'est comme ça que nous avons écrit cette déclaration if. Donc, la première fonction il y a la longueur, qui est ceci, tout à l'intérieur de ces crochets. Et si nous frappons des épices ici, ça nous montrera l'expression au milieu. Et l'expression au milieu est celle-ci. Donc, si la longueur de ce qui est retourné de D, si cette longueur est supérieure à 0, alors nous pouvons aller de l'avant et ouvrir le classeur. Donc je vais juste copier cette copie. Alors je devrais le dire. Et je vais mettre ça ici. Sinon, faites quelque chose. Que voulons-nous faire si le fichier n'existe pas ? Nous voulons inviter l'utilisateur à sélectionner le fichier. Donc, pour ce faire, nous allons avoir besoin d'une boîte de dialogue de fichier. Nous allons avoir besoin d'une variable pour ça. Donc c'est, c'est sur le dessus, ce qui est un pot de bureau ou il est intégré à Office, je dois dire. Ils vont dans la boîte de dialogue Fichier. Maintenant, c'est juste un objet générique qui est clignotant. Par conséquent, nous devons définir cet objet. Alors je vais le faire maintenant. Maintenant, la boîte de dialogue Fichier est un enfant de l'objet application. Et comme je l'ai mentionné dans la dernière leçon, l'application est apparente de la collection de classeurs et des objets classeurs. Donc j'ai besoin d'application, j'ai renversé cela incorrectement. dialogue Dot fichier. Il existe plusieurs types de dialogue de fichiers différents. Et heureusement, il nous dit quels sont ceux que nous avons à notre disposition. Donc on veut un sélecteur de fichiers. Mais les autres types que nous avons là, il y a un sélecteur de fichiers, euh, dossier pika, et un dialogue ouvert et une boîte de dialogue Enregistrer sous. Mais je veux un sélecteur de fichiers. Donc, une fois que le code a exécuté cette ligne, il a placé l'objet vide de celui-ci dans une fenêtre de dialogue de fichier qui appartient à l'application. Et en haut de ce dialogue de fichier se trouve une boîte de dialogue de fichier, file pika. Il y a quelques autres propriétés que je veux m'asseoir. Par exemple, je ne veux pas autoriser l'utilisateur à sélectionner plus d'un fichier. Je ne veux pas qu'ils sélectionnent un fichier qui n'est pas le bon type de fichier. Et je veux aussi aider l'utilisateur en commençant à regarder dans un dossier particulier. Donc, pour ce faire, nous devons asseoir plus de propriétés de cet objet de dialogue de fichier. Et pour ce faire, je vais utiliser une instruction width. Donc, fondamentalement, une instruction with vous permet d'asseoir plusieurs propriétés en même temps. Donc je vais juste mettre ça en place. Et similaire à une instruction if, l'instruction width a besoin d'une instruction end. Maintenant, à l'intérieur de cette déclaration de largeur, nous pouvons asseoir plusieurs propriétés à la fois. Une autre chose aussi est qu'à l'intérieur de ceux-ci avec des déclarations, nous n'avons pas besoin de déclarer à nouveau quelle variable qui parle. Par exemple, si je veux définir un filtre, qui filtre quel type de fichiers peut être sélectionné par cette boîte de dialogue Fichier. Je n'ai pas à dire d'abord le nom de l'objet, puis la propriété. Je peux juste commencer avec la propriété ou le point à la première propriété que je modifie toujours quand je suis assis une boîte de dialogue de fichier est que j'ai nettoyé les filtres. Donc, je sens que c'est une propriété enfant de l'objet de dialogue de fichier, et clear est une méthode enfant de la propriété filters. Et donc la raison pour laquelle je fais cela est parce que les filtres pour ces objets sont stockés dans le cache. Ce qui signifie que si je suis assis un tas de filtres, puis je cache cette boîte de dialogue et puis j'ai montré nouveau les filtres de la dernière fois que j'ai montré la boîte de dialogue présente dans la nouvelle. C' est donc toujours une bonne pratique d'effacer les filtres. Et le prochain à ajouter est d'ajouter un filtre afin que nous puissions sélectionner un fichier CSV. Encore une fois, nous utilisons la propriété filters. Mais cette fois, je veux en ajouter un. Il y a donc la méthode add. Maintenant, il nous dit ce que nous devons fournir. Nous devons donc fournir une description sous forme de chaîne et étendre une chaîne et une position. Donc, la description est assez simple. C' est une chaîne que vous pouvez taper juste pour décrire ce que vous leur permettant de sélectionner. Les extensions sont les extensions de fichier ou les caractères qui apparaissent après le point. Et la position est si vous en avez plus d'un, quelle position dans cette liste devrait-elle cet élément de liste B ? Commençons donc par les fichiers CSV, la description et l'extension. Je vais utiliser un caractère générique ici. Je vous expliquerai pourquoi dans une seconde. Donc, ce qu'un caractère générique fait est qu'il indique à Windows que j'accepte n'importe quel caractère avant ce caractère. Donc, ce qu'il va faire, c'est chercher le brevet de n'importe quel personnage ou de n'importe quel personnage, puis pointer CSV, qui signifie qu'il va filtrer tout ce qui n'est pas un fichier CSV. Je veux également empêcher l'utilisateur de pouvoir sélectionner plusieurs fichiers, même s'ils peuvent théoriquement sélectionner plusieurs fichiers dans ce cas, je ne veux pas qu'ils le fassent, je veux seulement leur permettre de sélectionner un fichier. Donc, ça l'est. Multi-sélection false. Donc, je le mets à faux. Et pour aider l'utilisateur, je veux m' assurer qu'il n'a pas à chasser trop longtemps. Donc, j'ai une supposition instruite que ça va être dans mon dossier de documents. Par conséquent, je veux qu'ils commencent à chercher dans ce dossier. Et pour ce faire, je peux dire que le nom de fichier initial est égal et je vais juste fournir cette constante. Donc, ce que cela fera, c'est qu'il ouvrira la fenêtre et qu'il sera dans ce dossier. Et donc la dernière propriété serait des points show, que nous présenterons la boîte de dialogue de fichier à l'utilisateur. Donc il y a un piège ici. Le catch est que le formulaire qui est affiché, qui est la boîte de dialogue de fichier, est une forme modale. Donc, ce que cela signifie, c'est quand le formulaire est affiché et présent à l'écran, cela signifie qu'aucun code ne peut s'exécuter. Mais c'est bon. On peut l'utiliser à notre avantage. Donc, ce que je vais faire est que je vais mettre cette propriété dot show dans une instruction if. Donc, ce que cela signifie, c'est quand il évalue cette ligne, il va réellement montrer la boîte de dialogue du fichier à l'utilisateur, mais il n'a pas continué parce qu'il ne peut pas, c'est modal. Par conséquent, aucun code n'est en cours d'exécution en arrière-plan. Cependant, une fois qu'ils ont sélectionné un fichier et la chaleur, ok, tant qu'il dépasse cette ligne, cela signifie qu'ils ont non seulement vu le formulaire, qu'ils ont sélectionné un coup tombé OK. Et si Afficher est égal à false, cela signifie qu'ils ont effectivement appuyé sur Annuler et ont rejeté cette boîte de dialogue de fichier. Nous avons donc deux conditions ici. Nous avons si ils ont sélectionné un fichier ou un cinquième coup OK. Et s'ils ont annulé de cette boîte de dialogue de fichier, s'ils ont sélectionné un folic et aller de l'avant et arpanet comme nous l'avons fait ici. Donc je vais juste copier cette ligne. Probablement plus facile de le couronner encore parce que je vais le changer, mais c'est bon. Et je vais supprimer toutes les choses à l'intérieur des crochets des arguments ouverts. Maintenant, qu'est-ce que je veux fournir ? Je veux fournir les éléments qu'ils ont sélectionnés. Donc, c'est point des éléments sélectionnés. Maintenant, parce que la boîte de dialogue de police peut potentiellement permettre plusieurs sélections, cet objet ici sera cette propriété est une liste, donc, j'ai besoin de fournir l'index. Et à cause de leur permis d'en sélectionner un, l'index ne sera jamais un. Mais s'il y avait, par exemple, plusieurs, vous devrez alors les parcourir et effectuer une action sur eux un par un. Donc c'est bien. Si le spectacle est vrai, ça veut dire qu'ils l'ont vu, ils ont bien frappé. Par conséquent, je veux que vous ouvrez le fichier si sélectionné. Sinon, s'ils ont frappé escape ou cancel, je veux présenter une boîte de message. Pas vraiment passer un bon moment avec son clavier Mac. Et je veux aussi quitter le sous-marin. Donc, Exit Sub est un peu différent de N sub. N sous étant le point de terminaison final de toute la routine. Et Exit Sub est juste un point où vous pouvez arriver à ça, nous dirons, d'accord, j'en ai assez. Je vais quitter le sous-marin gracieusement. Donc, cela signifie que si nous avons dépassé cette instruction if, cela signifie que le fichier existe et que nous l'avons ouvert, ou que le fichier a été sélectionné et que nous l'avons également ouvert. Nous ne serons pas en mesure d'arriver à ce point par d'autres moyens parce que nous avons quitté le sous-marin avant qu'il puisse atteindre cette ligne de code. Donc, cela signifie que nous pouvons effectuer les mêmes actions que nous faisions auparavant, qui était l'erreur de sauvegarde dans la version. Fermez le classeur, puis réactivez les alertes d'affichage. Ok, donc on est presque prêts à tester ça. Ce que je vais d'abord faire, c'est que je vais sauter dans mon dossier Documents et je vais juste changer le nom du fichier pour qu'il n'existe certainement pas. Donc je vais juste en ajouter un au début. Je pourrais aussi bien aussi le faire pour celui-ci aussi. De toute façon. Alors testons ce code. Je vais le franchir en utilisant F8. J' ai donc désactivé les alertes et le fichier n'existe pas parce que j'ai changé le nom du fichier. Donc maintenant ça va sauter de ce côté de la déclaration if, la condition else, ça va rester cet objet. Maintenant, nous allons dire que l'objet a été défini. C' est une boîte de dialogue Fichier et c'est une boîte de dialogue de fichier, un sélecteur de fichiers. Donc, la ligne suivante entre dans l'instruction width. Donc on va effacer les filtres. On n'a pas encore vu la fenêtre parce qu'on n'a pas frappé les points. Et on va ajouter le filtre de fichiers CSV. Nous allons désactiver la sélection multiple. Nous allons définir le chemin d'accès initial au dossier afin qu'il apparaisse dans mon dossier OneDrive, Mes documents. Et maintenant, après avoir frappé F8, il va nous montrer la boîte de dialogue de fichier ou j'espère. Ok, on y va. Donc, et c'est dans le dossier Mes documents. Ils allaient entrer. C'est le fichier que je viens de renommer. Donc je vais juste les sélectionner. Frappez OK. Donc maintenant, j'ai un côté ottoman, l'index des éléments sélectionnés d'un. Et je vais asseoir cet objet ouvert WB en utilisant la commande classeurs dot open, qui va ouvrir le fichier que nous avons sélectionné dans cette boîte de dialogue de fichier. Donc, si frappez F8 une fois de plus. Oh, d'accord, donc le code a sauté jusqu'à la fin, donc nous ne le traversons plus. Mais je peux confirmer qu'il est terminé parce que nous avons le fichier que nous venons de sauvegarder. Donc nous avons eu le parce que nous l'avons renommé. Rappelez-vous, nous en avons mis un en face, de retour, dans l'Explorateur de fichiers, mais nous venons de créer il y a du bon à l'heure actuelle ici. Donc c'est terminé, mais c'est juste une sorte de fuir de nous. Le code s'est enfui de nous. Maintenant, c'est quelque chose dont vous devez être prudent lorsque vous déboguez et parcourez votre code. Que parfois le code peut s'échapper de vous et il peut simplement commencer à s'exécuter à pleine vitesse. qui est évidemment un idéal, surtout quand vous déboguez, vous essayez de vous assurer que les choses ne sont pas cassées avant de l'exécuter au rythme. Et la raison pour laquelle cela se produit est un peu inconnue, mais nous connaissons certaines conditions qui le rendent possible. Et ces conditions lorsqu'un appel de procédure distante se produit, qui ouvre ce classeur, et il revient à ce module de code pour continuer avec le code. Donc, dans ce cas, ce qui s'est passé, c'est qu'il est ouvert ce classeur, qui est envoyé à partir d'un appel de procédure pour ouvrir ce classeur. Et puis au fur et à mesure que c'est fini, cette commande, elle revient directement dans ce code et elle est juste exécutée à plein rythme. Maintenant, ce que vous pouvez faire pour contourner qui est de jeter votre code avec des points d'arrêt. Et la raison pour laquelle vous faites cela est que s'il s'éteint et fait son appel de procédure à distance et qu'il revient et qu'il l'exécute à plein rythme. Ça va s'arrêter au prochain point d'arrêt. Essayons encore une fois. Je vais frapper F5 et on devrait immédiatement voir la boîte de dialogue s'afficher. Mais une fois que nous sélectionnons un fichier, il s'arrêtera à cet endif ou à cet endif. Et je frapperais OK. Boom, donc il s'est arrêté au premier point d'arrêt après la ligne ouverte du classeur. Et je peux continuer. Ok, donc cela résume cet exemple pratique. Donc, en résumé, ce que nous avons fait c'est que nous sommes tout d'abord désactivés les alertes. Nous avons ensuite testé pour voir si le fichier existe et nous le faisons en utilisant la fonction. Et cela va nous renvoyer un nom de fichier si le fichier existe dans ce répertoire, et si ce n'est pas le cas, il ne nous retournera rien. Donc, nous allons tester la longueur de la chaîne. Si la fonction retourne et si le fichier existe, nous allons juste sauter directement et ouvrir ce fichier vers le haut. Mais si le fichier n'existe pas, si nous ne pouvons pas trouver automatiquement, alors nous allons demander à l'utilisateur via une boîte de dialogue Fichier. Nous nous asseyons ensuite plusieurs propriétés à la fois. Et alors que nous sommes à l'intérieur de cette déclaration de largeur, nous avons aussi eu une déclaration if qui a profité du fait que la boîte du dollar d'automne le montre modalement, nous permettant essentiellement de faire une pause sur cette ligne et White pour le pour sélectionner un fichier ou cliquer sur Annuler, puis exécuter le code en conséquence. Donc, soit on ouvre la faute qu'ils ont sélectionnée, soit on annule et on quitte le sous-marin. Nous continuons ensuite comme d'habitude, ce qui est d'enregistrer la version Erin du fichier et de fermer le fichier sans enregistrer. Ça termine cette leçon. En résumé, aujourd'hui, nous avons appris comment créer des boîtes de dialogue Fichier. Comment personnaliser notre boîte de dialogue. Par exemple, créer un dossier ou un sélecteur de fichiers, permettre à l'utilisateur de sélectionner plusieurs fichiers, obtenir la fenêtre pour démarrer à un dossier particulier et filtrer les fichiers par extension de fichier. Nous avons appris comment gérer la réponse renvoyée des États-Unis à la fin que je vous ai présentée avec des déclarations. En outre, les fonctions VBA intégrées que nous avons couvertes étaient la fonction DIR et la fonction LEN. J' espère que vous avez apprécié cette vidéo et je vous verrai dans la prochaine. 4. 04 - Leçon VBA 11 - Courir sur les événements: Bienvenue à la leçon 11, courir sur les événements. En VBA. Nous sommes en mesure d'attraper certains événements qui sont déclenchés par le code utilisateur ou d'autres raisons environnementales. Juste quelques exemples de certains événements. Cliquez sur un bouton lorsqu'une feuille est ajoutée à un classeur ou lorsqu'une modification est apportée à une feuille de calcul. capture d'événements peut être très utile pour nous assurer que nos applications VBA fonctionnent de la manière que nous voulons les faire. Dans cette leçon, nous allons répondre à la question, quels sont les événements ? Nous parlerons des différents types d'événements et de la portée des événements. Et nous allons faire quelques exemples pratiques d'utilisation d'événements dans notre code. Nous parlerons également de la fonction VBA intégrée appelée gauche. Parlons un peu plus en détail de ce que sont réellement les événements. Événements ou simplement une action ou un déclencheur qui s'est produit. Un événement peut être initié par un utilisateur par programme ou par date ou heure. Il existe de nombreux événements ou déclencheurs que nous pouvons utiliser dans VBA que vous pouvez attraper et ensuite exécuter immédiatement le code dès que l'événement est détecté. Afin de rendre nos applications VBA aussi robustes que possible. Parfois, nous avons besoin d'attraper des événements pour être en mesure d'assurer une expérience utilisateur cohérente. Ma philosophie en rendant applications VBA cohérentes fonctionnelles est de contrôler un verrouillage autant que possible, et en même temps, attraper les actions de l'utilisateur et les gérer d'une manière que je spécifie ce que cela fait supprime autant de variance environnementale que possible, ce qui peut causer des problèmes inattendus avec les applications que nous avons créées. Un exemple simple de ceci peut être si un utilisateur inexpérimenté ouvre mon classeur ou mon application VBA et qu'il n'active pas les macros. Ils peuvent percevoir que l'application que j'ai conçue pour être cassée, et c'est parce qu'elle ne fait pas ce qu'ils s'attendent à ce qu'elle fasse, croyez-le ou non, c'est un problème assez courant que j'ai rencontré en milieu de travail. Ce que nous sommes capables de faire pour contourner cela est de mettre en place un classeur dans un état verrouillé par défaut et d'appliquer une logique dans l'événement ouvert du classeur, ce qui implique que la macro a été activée, puis exécuter le code qui initialise le et la déverrouille. Je vais vous montrer exactement comment le faire plus tard dans la leçon. Parlons de la portée de l'événement, similaire à la hiérarchie du modèle d'objet du classeur comme discuté en détail dans mon cours de débutant, il existe plusieurs niveaux ou types d'événements. Ce sont les événements de feuille de calcul, événements de classeur, les événements d'application, les événements d' utilisation du formulaire, le chat , les événements, les événements temporels et les événements clés. Fondamentalement, ce sont les événements qui se produisent à ces niveaux discrets de l'application. Par exemple, la modification d'une cellule serait un événement de feuille de calcul. Ajouter une nouvelle feuille de calcul à un classeur serait un événement de classeur dans la fenêtre, réduire, agrandir ou redimensionner. Ce serait un événement d'application. En cliquant sur un bouton sur un formulaire utilisateur que nous avons créé serait un événement de formulaire utilisateur sur le changement d'une série de graphiques ou de graphique re-taille serait un événement de graphique. Lorsqu' une heure spécifique se produit est un événement à l'heure. Et lorsque des touches spécifiques sont pressées sur le clavier serait un OnKeyEvent. Veuillez garder à l'esprit que cette liste n'est pas une liste exhaustive d'événements. Maintenant, passons à l'utilisation des événements dans notre code. Dans cet exemple pratique, je veux m'assurer que l'utilisateur active les macros. Et pour ce faire, ce que je veux faire est de changer l'état par défaut du classeur. Ce que je veux dire par là, c'est que je veux cacher toutes les feuilles de cahier par une. Et celui qui a démasqué contiendra un message invitant l'utilisateur à activer les macros et à rouvrir le classeur. Quand ils activent ensuite les macros et ouvrent le classeur, je vais attraper l'événement de l'ouverture du classeur, ce qui signifie qu'ils ont définitivement activé les macros, puis afficher ces feuilles cachées et masquer le message leur demandant d'activer macros. Parce que nous voulons attraper des événements qui appartiennent au classeur. Je vais entrer dans le, cet objet classeur. Et je veux attirer votre attention sur ces vraies boîtes déroulantes en haut de l'IDE. Donc, celui de gauche nous montre l'objet dont nous parlons dans ce cas, nous voulons parler d'un classeur, qui est le classeur. Et l'autre côté peut nous montrer tous les événements qui ont pu attraper dans cet objet classeur. Comme vous pouvez le voir, il y en a pas mal. Donc, ce qui est fait, je ne suis pas sûr si cela est visible à l'écran, mais ce que je vais faire est juste de le copier et de le coller. Ce que cela a fait a automatiquement créé cette sous-forêt. Et c'est un sous-marin privé, qui signifie qu'il appartient à cet objet classeur. Et il n'est pas visible à partir de toutes les autres feuilles ou modules de code sauf si nous faisons explicitement référence à cet objet de classeur en premier. Donc, ce sous-alinéa va automatiquement s'exécuter lorsque le classeur s'ouvre. n'y a rien d'autre que nous devons faire pour nous assurer que ce sous-programme s'exécute sur le classeur ouvert. Mis à part, bien sûr, s'assurer que les macros sont activées sur le classeur lui-même. Donc, dans cette conservation, ce que je veux faire, c'est que je veux parcourir les feuilles de calcul et que je veux masquer une feuille de calcul particulière. Donc, je vais commencer par ajouter une nouvelle feuille, et je vais mettre un message sur cette feuille qui dit, s'il vous plaît activer les macros. Voici notre cahier d'exercices. Je vais ajouter une nouvelle feuille, et je vais appeler celle-ci active la feuille. Et je vais le faire et nous allons asseoir ce fond en blanc. Donc tu ne dis pas ces grilles. Et je vais aussi cacher tout ce qui est en dessous. Et de ce côté, je vais m'assurer que cette cellule est assez grande. Et je vais rendre ça rouge. Et nous allons juste le rendre audacieux juste pour qu'il se démarque sur un pourrait réellement augmenter la taille. Et puis juste ouais, cool. Donc, l'intention est que quand ils ont ouvert le classeur et qu'ils n'ont pas activé les macros ou qu'ils vont voir, est-ce que cette feuille, la feuille d'activation, toutes les autres seront cachées et il leur dira clairement ce qu'ils doivent faire pour que cette macro fonctionne. Donc, je vais juste aller de l'avant et rapidement cacher les autres feuilles de calcul. Donc, nous avons celui-ci activé maintenant, donc c'est ce qu'ils verront quand ils ouvriront le classeur s'ils n'activent pas les macros. Donc, nous allons revenir dans l'IDE. Et nous allons travailler sur ce classeur, ouvrez conserver. En pensant aux objets dont nous allons avoir besoin. Nous allons avoir besoin d'un objet classeur, qui est le classeur que nous examinons actuellement. Nous allons également avoir besoin d'un objet de feuille de calcul. Et ce que je veux faire, c'est que je veux parcourir chacune des feuilles du classeur et que je veux afficher ou masquer le classeur en fonction du nom. Donc je sais que celui-ci va être visible et que le reste va être caché. Par conséquent, je peux juste regarder cette propriété de nom et je peux déterminer si je veux afficher ou masquer ce classeur. Nous avons donc fait cela au début, bien sûr, en passant par chacune des feuilles de travail. Donc je vais juste faire ça rapidement. Donc, nous avons demandé boucle. Cela va donc parcourir chaque feuille de calcul de la collection de nuances de classeur. Mais avant de continuer, je veux expliquer quelque chose car nous allons parcourir arbitrairement ces feuilles de travail. S' il n'y a qu'une seule feuille visible, ce que nous avons. Et la première forme que nous rencontrons dans cette boucle est celle que nous voulons cacher, qui va se briser. Nous ne pouvons pas masquer toutes les feuilles de calcul du classeur qui doivent avoir au moins une forme visible. Donc ce que je vais faire, c'est que je vais faire ça en deux boucles séparées. Le premier étant sûr de ceux qu'on veut montrer, puis le second étant cacher ceux qu'on veut cacher. Donc, je vais interroger le nom de la feuille de calcul et il est active feuille. Maintenant, parce que c'est celui que nous voulons montrer, nous voulons le rejet de cela. Nous ne sommes intéressés que par les feuilles de calcul qui n'ont pas ce nom. Par conséquent, je vais juste ajouter 11 chose, ce qui ne l'est pas. Donc, il va seulement entrer cette instruction if. Si le nom n'est pas feuille active, alors et nous allons nommé argument pour cela et nous voulons le rendre XL visible. Et si elle disparaît sur vous venez de frapper l'espace de contrôle et il ramène le point de retour x0, xo faisable. Cool. Maintenant, la boucle suivante, il va copier et coller. Je vais me débarrasser de ça et non, et je vais changer celle-là. Rends-le caché. Donc, je vais enregistrer maintenant et cela va préserver les états visibles de chacune des feuilles et a également écho à une autre chose qui pourrait déclencher des erreurs ou des erreurs est l'état protégé de la feuille ou du classeur. Ainsi, vous pourriez avoir une protection en forme qui permet seulement à l'utilisateur d'éditer certaines cellules. Dans ce cas, ce que vous voudrez faire, c'est que vous vouliez désélectionner la feuille avant de le montrer ou que vous le faites comme ça. Et c'est là que vous devez également fournir un mot de passe si vous en avez inclus un, c'est une bonne idée si vous avez un mot de passe pour stocker cela comme une constante, assurez-vous qu'après avoir défini la propriété visible pour le protéger à nouveau, c'est si vous avez un qui est protégée. Mais dans ce cas, nous ne le faisons pas. Je vais juste supprimer ça. Encore la même chose pour le classeur. Si vous avez un classeur protégé et qu'il est et qu'il est actuellement protégé, vous pouvez simplement le faire en dehors du folate juste avant qu'il entre dans la boucle complète. Comme ce classeur n'est pas protégé, je vais juste le supprimer. Nous pouvons maintenant exécuter ce code pour tester ce qui se passe lorsqu'un utilisateur ouvre le classeur sans avoir besoin de le fermer et de le rouvrir. Alors je vais le faire maintenant. On va passer à travers si je oh, donc on va courir l'ère. Variable d'objet ou avec variable de bloc non définie. C' est bien. Je suis heureux que nous ayons une erreur d'exécution, donc nous allons juste le déboguer. C' est sur cette ligne. Donc pour chaque feuille de calcul, donc il n'y a rien. Tu sais ce qu'on n'a pas fait ? Nous n'avons pas défini l'objet qui est classeur. Donc je vais juste changer ça rapidement. Parce que ce classeur, juste ajouter cette ligne ne fait rien parce que le code est déjà adopté cette loi. Et donc ce que je vais faire est que je vais juste le faire glisser ici pour qu'il définisse cet objet. Et disons maintenant, oui, ok, cela fonctionne lorsque maintenant interroger le nom de la feuille de calcul et nous voulons seulement entrer cette instruction if si le nom n'est pas la forme active et la feuille de calcul actuelle avec regarder dans cette boucle est en fait activer la forme. Donc, ça saute les diplômés. Et la feuille actuelle est custdata. Donc, nous voulons que celui-ci soit visible. parent un est la sortie, qui est là. Oui, super. Ok, y aller. Je vais attendre qu'on arrive à la prochaine boucle. Ok, donc maintenant on est dans la deuxième boucle et c'est celle qui va cacher les draps qu'on veut cacher. Et le courant est activer la feuille. Et c'est caché. Ce quart donné ne l'a pas encore fait, et il ne s'est plus caché. Donc maintenant, si nous minimisons cela, je m'assure juste que ce code est terminé en cours d'exécution. Je vais minimiser cela et faire apparaître Excel. Donc, je vois que le message d'activation de la macro a disparu. Toute cette feuille a disparu, et elle a montré toutes les autres feuilles que nous voulons montrer. Que se passe-t-il si nous voulons que plusieurs feuilles soient cachées ? Nous pouvons ajouter des critères supplémentaires ou bien si est à cette instruction if qui est à l'intérieur de la boucle qui est destinée à masquer les formes. Mais cela peut devenir un peu hors de contrôle, surtout si vous avez beaucoup de feuilles de calcul dans le classeur, il y a un moyen plus facile. Retour dans Excel. Je vais juste ajouter une nouvelle feuille de calcul et je vais vous montrer comment. J' ai donc ajouté une nouvelle forme qui s'appelle maintenant SHA-2. Ce que je fais est d'utiliser une convention de dénomination dans le nom de la feuille. Donc, je m'assure que les sept premiers caractères sont cachés un trait de soulignement, et il pourrait y avoir de nombreuses raisons pour lesquelles vous voulez cacher des feuilles, pourrait être que vous avez un ensemble de données que vous voulez cacher à l'utilisateur. Ou il se peut que vous ayez un tas de paramètres sur une forme à partir de laquelle vous lisez, à partir du code. C' est essentiellement tout ce que vous ne voulez pas de montage. Alors allons de l'avant et ajoutons ceci à notre condition si. Laissez-moi d'abord vous montrer dans la fenêtre immédiate comment je vais utiliser cette convention de nommage. Nous allons donc utiliser une fonction VBA intégrée qui est appelée gauche. Et ce que l'ascenseur fait, c'est qu'il nous renvoie un certain nombre de caractères du côté gauche de la chaîne. Et nous spécifions le nombre de caractères que nous voulons du côté gauche de la chaîne. Donc, je vais juste taper à gauche et vous verrez les arguments que nous avons faits. Donc nous avons une chaîne et une chaîne, je vais juste la taper. C' est donc la forme que nous venons d'ajouter au classeur. Et je vais frapper la virgule, et c'est les sept premiers caractères. Donc, je veux qu'il retourne les sept premiers caractères de ce nom de feuille. Et comme vous pouvez le voir, il a renvoyé les sept premiers caractères qui sont cachés sur l'école, car nous avons maintenant renvoyé les sept premiers caractères du nom de la feuille de calcul. Nous pouvons utiliser cette logique dans notre déclaration if. Donc, je vais juste sauter dans le bloc if LCF parce que nous avons la première condition if là-bas et ce n'est pas un autre, C'est un autre. Si on a une autre condition, on veut tester. A gauche comme nous venons d'apprendre, de la chaîne, qui est le nom de la feuille de calcul. Et ce sont les sept premiers caractères qui correspondent à un trait de soulignement caché. Alors. Et je veux aussi faire la même chose. Une autre façon que nous pouvons y parvenir est également d'ajouter une condition all dans notre déclaration if. Donc je vais te montrer rapidement ou puis on peut juste copier ça. Donc, nous pouvons réellement ajouter deux conditions à cette déclaration if. Mais je vais juste supprimer celui-là. Donc, nous pouvons maintenant exécuter ceci et juste tester pour voir si cette feuille de calcul disparaît. D' accord ? Et nous avons testé ici. Donc, si nous sélectionnons la feuille, nous pouvons dire que la propriété de la feuille est déjà cachée, en forme cachée, mais je vais juste les déplacer hors du chemin. Oui, la feuille que j'ai créée qui était cachée, les données soulignées, a disparu du classeur. Lorsque vous construisez en testant ce type de fonctionnalité qui fonctionne sur open et UNCLOS, il est préférable de vous construire une routine qui réinitialise l'état afin que vous puissiez le tester à nouveau rapidement afin que vous n'ayez pas à passer manuellement chaque des feuilles de calcul et sélectionnez la propriété visible. Donc je vais le faire rapidement maintenant. Et puis je vais vous montrer ce que vous pouvez utiliser d'autre cette chute. Et je vais le faire dans un nouveau module de code, Insérer Module, module 3. Ok. Donc je refroidisse le classeur de réinitialisation que je peux charbon à tout moment. Et cela va le ramener à l'état où le classeur devrait être dans quand il est ouvert. Je vais nommer mes variables. Encore une fois. Je vais avoir besoin de deux pour les boucles. Et la première boucle sera pour les auditeurs que nous voulons montrer. Et la deuxième boucle sera quatre éléments que nous voulons cachés. Donc, celui que nous voulons montrer est celui qui est activer Xite parce que c'est la seule feuille que nous voulons activer lorsque le classeur est ouvert. Et je veux aussi ajouter le LCA pour le caché sous l'école. Ok, donc nous pouvons maintenant l'utiliser pour réinitialiser notre classeur à l'état où il devrait être quand il est ouvert. Je vais juste tester ça maintenant avec F5. Oh bien, on doit parler de l'inadéquation. Et je suis heureux que nous obtenons ces erreurs d'exécution parce que cela nous aide vraiment à apprendre. Donc, si hit debug, il nous dit ce qui ne va pas. Donc, si ce n'est pas la feuille de calcul 0.9c et le nom du point de la feuille de calcul actuelle est feuille active. C' est une ficelle. Ok, vous pouvez voir ici que j'ai un moins au lieu d'un égal. C' est donc juste un exemple de débogage de votre code et de test de votre code pour vous assurer qu'il fonctionne et robuste. Alors frappez à nouveau F5. Et je retournerai à mon livre ici. Et comme vous pouvez le voir, seule cette feuille est visible. Donc une autre façon que je veux utiliser cette routine est quand le classeur est fermé. Donc, disons par exemple, un utilisateur l'utilise et ils ont des macros activées, puis toutes les feuilles sont démasquées, mais ils enregistrent le classeur, puis utilisent un vrai vient le long. les macros n'ont pas été activées car cet utilisateur a déjà enregistré le classeur et les feuilles ne sont pas masquées. Je veux m'assurer que chaque fois que le classeur est fermé, ces feuilles sont masquées et que le message qui leur indique d'activer les macros est visible. Donc je vais juste copier ce sous-nom et je vais revenir dans le module de code de ce classeur. Et je vais juste regarder à travers ces événements pour en trouver un qui va attraper l'utilisateur fermant le classeur. Donc, je suis capable de définir la propriété visible de la forme à ce que je veux qu'elle soit. Il partirait avant de s'approcher. Et il a créé une routine qui va attraper l'événement de fermeture du classeur et nous permettre d'exécuter du code avant que le classeur ne ferme réellement. Donc ce que je vais faire, c'est que je vais maintenant appeler une macro déjà construite. Donc, en résumé, cette routine ici va attraper l'événement de l'utilisateur fermant le classeur. Et avant que le classeur ne ferme réellement, il va appeler la routine de réinitialisation du classeur. Et l'autre chose que je veux faire est également d'enregistrer le classeur, ce qui permettra d'enregistrer les états visibles de chacune des feuilles de calcul. Donc je vais juste faire ça rapidement. Ok, on y va. Ok les gars, c'est tout pour l'instant. Dans cette leçon, nous avons appris quels événements et nous avons rayé la surface de la façon dont nous pouvons les utiliser. Nous avons parlé de la portée de l'événement, IA, à quel niveau de l'application, des événements qui ont déclenché ou capturé. Et nous avons terminé quelques exemples pratiques de capture sur les événements d' ouverture de classeur et de fermeture de classeur et d'exécution de code dès que l'événement est détecté. Nous avons également appris sur la fonction VBA intégrée appelée lift, qui renvoie le nombre spécifié de caractères à partir de la gauche de la chaîne. D' autres choses qui sont apparues dans cette leçon étaient de tester votre code. Nous avons rencontré quelques erreurs d'exécution. C' était une bonne chose. Il est préférable pour nous de trouver ces erreurs que vos utilisateurs. Nous avons également abordé le contrôle de l'expérience utilisateur, ce qui était tout à fait le sujet des exemples pratiques. Et enfin, nous avons appris à appeler une macro à partir d'une autre macro. Je m'appelle Andrew, merci d'avoir regardé, et je te verrai dans la prochaine vidéo. 5. 05 - Leçon VBA 12 - Traiter les données: Bienvenue de retour. C'est moins de 12 pour ce qui est des données. J' ai réalisé que traiter les données est un titre assez vague et large pour ce sujet car il existe d'innombrables façons de traiter les données dans VBA. Ce titre sera donc récurrent sur le reste de mes cours pour le contenu intermédiaire et avancé. Dans cette leçon, nous allons apprendre comment importer des données dans notre classeur à partir de différentes sources. Nous allons en apprendre davantage sur la connexion à des bases de données externes et l'exécution requêtes SQL de base pour récupérer des données et les renvoyer à Excel. Nous allons faire cette leçon en deux parties. La première partie que nous allons importer des données à partir du fichier CSV que nous avons ouvert dans la leçon précédente. Et la deuxième partie, nous allons nous connecter à une base de données et extraire toutes les données d'une table dans cette base de données. Et dans les deux exemples, nous allons remplir une feuille dans ce classeur avec les données extraites du fichier ou de la base de données. Donc, dans ce premier exemple, nous allons construire des fonctionnalités supplémentaires dans ce sous-programme que nous avons construit au cours des deux dernières leçons. Et comme un résumé, ce que cette routine fait est qu'elle cherche d'abord un fichier pour voir s'il existe et l'ouvre s'il le fait, sinon, elle demande à l'utilisateur de localiser ce fichier. Donc, l'étape suivante est que nous voulons extraire les données de la feuille de calcul que nous avons ouverte, les remplir dans une feuille de ce classeur, puis continuer de la même manière. Donc, nous allons dire leur propre copie du cahier de travail et nous allons le fermer. Donc, nous allons commencer à coder ici. C' est le point où le classeur sera ouvert car la macro l'ouvrira automatiquement. Et s'il ne trouve pas ce fichier, il demandera à l'utilisateur de localiser ce fichier. Donc encore une fois, si nous arrivons à ce module ici, ça veut dire que nous avons le classeur ouvert. Et non seulement il est ouvert, il est défini sur cet objet ouvert WB. La première chose que je vais faire est de définir l'objet de classeur actuel. Donc, c'est le classeur est en train d'exécuter le code. Et maintenant, nous allons changer de parler de ce classeur actuel. Je vais définir une feuille de calcul et dans ce cas, ce que nous allons faire est d'utiliser la feuille un objet qui est ici. Et c'est là que nous allons déposer les données. Maintenant, je vais définir l'objet feuille de calcul à partir du classeur que nous avons ouvert, qui est le fichier CSV. Maintenant, CSV est un document très basique. C' est juste un document texte. Un CSV ne peut également contenir qu'une seule feuille. Par conséquent, je n'ai pas besoin de spécifier un nom ici. Je peux juste fournir un index qui est un, parce qu'il n'y aura jamais qu'une seule feuille dans un document CSV. Une fois que le code atteint ce point ici, nous aurons les deux classeurs ouverts. Nous aurons également les deux objets de feuille de calcul définis. Maintenant, nous pouvons aller de l'avant et commencer à retirer les données la feuille de calcul du classeur que nous venons d'ouvrir. Je trouve que le moyen le plus rapide de le faire est avec l'utilisation de gammes. Et c'est parce que je peux simplement utiliser la propriété de valeur de plage et cela contiendra toutes les informations qui se trouvent dans cette plage. Et puis je peux attribuer la valeur d'une plage à une autre plage. Donc, pour ce faire, je vais avoir besoin de quelques objets de portée. L' un spécifiant une plage du classeur que nous avons ouvert et l'autre spécifiant une plage du classeur actif. Définissons d'abord la plage du classeur que nous venons d'ouvrir, qui est R et G ouvert. Il y a une astuce petite astuce que nous pouvons employer ici pour obtenir Excel pour nous dire quelle est la plage utilisée de cette feuille de calcul. Ia, Excel nous dira toutes les colonnes et les lignes qui contiennent des données. Il est important de se rappeler que cela n'est utile que lorsque nous parlons d'une table. Donc, une feuille qui ne contient qu'une seule table pour utiliser la propriété de plage identifie s'il y a plus d'une table sur une feuille et il inclura simplement les deux par défaut. C' est donc aussi simple que nous utilisons l' objet worksheet et nous spécifions la plage utilisée. Maintenant, je peux asseoir l'autre objet de plage en fonction de la taille de cet objet de plage. Parce que nous déplaçons les valeurs d'une plage à une autre, nous avons besoin que ces plages soient de la même taille. Laisse-moi te montrer comment faire ça. Donc, ce que nous faisons ici, c'est que nous sommes assis un nouvel objet de plage, qui se trouve dans le classeur actuel de la feuille de calcul actuelle, qui est la feuille 1. Et avec la définition de cette plage pour être de la même taille que les objets ouverts de la plage. Et la façon dont nous faisons cela est d'utiliser la propriété address de l'objet open range. La propriété address nous indiquera la cellule supérieure gauche et la cellule inférieure droite de la table. Donc, maintenant que nous avons tous les deux de notre ensemble d'objets de gamme, nous pouvons simplement définir la valeur de l'un à la valeur de l'autre. Et c'est tout. La raison pour laquelle je préfère cette méthode est qu'elle est extrêmement efficace. Nous n'avons pas eu à passer du temps à déterminer manuellement la taille des plages, parce que nous utilisons une fonction Excel intégrée pour le faire. Nous n'utilisons pas non plus l'interface utilisateur, ce qui signifie que nous ne sélectionnons pas de feuilles, ne sélectionnons pas de classeurs ou de plages. Nous n'utilisons pas de copier-coller qui copie les données dans le presse-papiers en utilisant simplement les propriétés et les méthodes qui sont à notre disposition dans ces objets. Alors essayons de lancer ça. Je vais juste à F5 à travers la première pop en utilisant la conversion de devises CSV. D' accord. Nous sommes maintenant assis sur l'objet de classeur actuel et nous définissons l'objet de feuille de calcul actuel. Et j'étais assis un deuxième objet de feuille de calcul qui provient du classeur que nous venons d'ouvrir. Lorsque vous utilisez maintenant la propriété range utilisée de cet objet feuille de calcul pour asseoir les dimensions de plage. Maintenant, vite va juste faire apparaître la fenêtre immédiate après que nous avons défini cet objet. Et je vais voir quelle est l'adresse de cette vaste gamme. Donc, je vais retourner l'adresse. Maintenant, il est retourné I1 pour voir 805. Donc, si je viens d'évoquer notre conversion de devises, csv, nous pouvons dire que le coin supérieur gauche est I1. Et nous devrions dire que le coin inférieur droit est C 805, que nous avons 805. C' est donc un moyen très rapide et facile d'obtenir Excel pour vous dire combien de lignes et de colonnes sont utilisées sur cette feuille de calcul. Donc je suis juste en train de sauter ici pour faire tomber la fenêtre des minutes. Donc maintenant je suis assis arranger sur une feuille de calcul qui est dans le classeur actuel pour avoir exactement la même taille que la plage que nous venons de prendre du classeur que nous avons ouvert. Maintenant, je prends la valeur de la plage dans le classeur que nous venons d'ouvrir. Et je mets cela comme la valeur de la plage dans le classeur actuel. Et laissez-moi vous montrer rapidement un classeur actuel que nous avons sur la feuille 1. Je vais juste parler de ça. Sur la feuille 1. On a I1 pour voir 805. Et c'était instantané, ce qui est objectivement plus rapide que l'utilisation de copier-coller. Minimisons ça. Maintenant, continuez comme d'habitude. Nous allons juste sauver, fermer et mettre fin à la routine. Passons maintenant à l'exemple suivant. Dans cet exemple, nous allons nous connecter à une base de données Microsoft Access et extraire toutes les données d'une table et remplir sur une nouvelle feuille de calcul dans ce classeur. Avant de continuer, je veux juste vous montrer la base de données excédentaire. Donc je vais juste en parler ici. Si vous suivez ces vidéos, la base de données et le fichier CSV seront disponibles pour téléchargement dans la section projet de ce cours. Donc nous allons juste ouvrir cette base de données. Comme vous pouvez le voir, nous avons deux tables ici. Nous avons la table de conversion de devises et nous avons un titre de test. Mais pour le moment, tout ce qui nous préoccupe, c'est ce tableau ici, TBL souligne la conversion monétaire. Et si j'ouvre cette table, vous verrez qu'elle contient les mêmes informations que dans le fichier CSV. Ok, donc je vais fermer ça maintenant. Et commençons. Je vais créer de l'espace ici. Donc je vais commencer par définir notre sous-routine. Je l'appelle juste se connecter à deux dB. Réfléchissons à ce dont nous allons avoir besoin ici. Nous allons donc certainement avoir besoin d'un livre Outlook et d'un objet de feuille de calcul car nous allons remplir les données de la base de données dans ce classeur actuel sur une feuille de calcul. Je pourrais aussi bien aller de l'avant et asseoir cet objet classeur. Donc, pour se connecter à une base de données et en extraire des données, nous allons avoir besoin de deux choses. Nous allons avoir besoin d'un record et nous allons avoir besoin d'une connexion. Pensez à un jeu d'enregistrements comme une feuille de calcul. Il s'agit essentiellement d'une table des enregistrements que nous renvoyons de la base de données. Et la connexion est le lien entre Visual Basic ou Excel et la base de données elle-même. Comme toujours avec VBA, il existe de nombreuses façons de se connecter à une base de données. Dans cet exemple, je vais utiliser IDEO DB ou des objets x-dot actifs. Et c'est parce que nous pouvons utiliser cette méthode pour plusieurs types de bases de données différents. Donc, afin de pouvoir utiliser un objet x-dot actif, nous allons avoir besoin d'ajouter cette référence dans notre classeur. Et pour ce faire, nous allons sélectionner des outils et nous allons sélectionner des références. Et je vais juste en parler ici. Et nous allons devoir rechercher la bibliothèque d'objets Microsoft Active X dot. Donc, je vais juste faire défiler ici jusqu'à ce qu'on arrive à Microsoft. Et vous voulez sélectionner la plus à jour sur votre machine ? Sur ma machine qui est 6.1 et appuyez bien, une fois que nous avons ajouté cette bibliothèque de référence, nous sommes en mesure d'asseoir les variables de ces types. Donc, nous allons commencer avec un objet de jeu d'enregistrements. Ça va appeler ça ma RS. Ensuite, je vais déclarer l'objet de connexion. Maintenant que j'ai déclaré ces objets, je vais les asseoir en tant que nouvelles versions vierges génériques de ces objets. Ainsi, l'étape suivante consistera à établir une connexion entre Excel et la base de données Microsoft Access phi, cet objet de connexion DB. Et pour ce faire, nous allons devoir configurer une chaîne de connexion. Donc, je vais avoir besoin d'une variable de plus. Je vais juste ajouter ça ici. Et maintenant, je vais créer une chaîne de connexion. La chaîne de connexion nécessite une syntaxe spécifique, mais la syntaxe diffère selon le type de base de données à laquelle vous vous connectez. Il existe d'excellentes ressources en ligne qui peuvent vous aider à créer une chaîne de connexion pour la base de données à laquelle vous essayez de vous connecter dans la chaîne de connexion. Dans cet exemple, nous devons fournir quelques choses. La première chose est le fournisseur et la deuxième chose est la source de données. Le fournisseur dit juste à VBA quel mécanisme utilisons-nous pour se connecter à cette base de données ? Et le fournisseur que nous allons utiliser dans cet exemple est un mécanisme Microsoft glace OLA DB par défaut et sa version 12. Et nous allons séparer les paramètres de l'application avec un point-virgule. Et pour créer la source de données, je vais juste réutiliser la constante que nous avons utilisée dans l'exemple précédent, qui est le lien vers mon dossier Documents. Et cette dernière partie est le nom de fichier de la base de données. Donc je vais prendre ça d'ici. Donc, avec ces deux combinés, c'est le chemin d'accès du dossier Mes documents et le nom de fichier de la base de données. C' est donc notre source de données. Maintenant que nous avons une chaîne de connexion construite, nous pouvons nous connecter à une base de données. Remarquez une chose, j'ai une faute de frappe ici, j'ai un N sur ça et un et sur ça. Alors je vais juste changer ça. Et je vais utiliser la méthode Open de l'objet de connexion. Et cela va nous dire ce que nous devons fournir quand il s'agit d' une chaîne de connexion d'alimentation que nous avons créée. Et si nous avons un nom d'utilisateur et un mot de passe, nous pouvons les fournir. Et nous pouvons également fournir d'autres options, mais tout ce dont nous avons besoin dans celui-ci est juste la chaîne de connexion. Donc, une fois cette ligne exécutée, nous aurons établi, espérons-le, une connexion à notre base de données. Et maintenant, nous pouvons commencer à envoyer des commandes à une base de données afin de ramener les enregistrements que nous voulons et les commandes que nous allons envoyer ce qui s'appelle SQL ou SQL. Langage de requête structurée principale SQL. Je vais devoir construire une instruction SQL, et je vais le faire dans une chaîne d'objets. Donc, je vais juste créer un nouvel objet et l'appeler STI SQL. Maintenant, nous allons construire notre instruction SQL. Maintenant, SQL peut devenir incroyablement compliqué. Cependant, dans ce cas, tout ce que nous voulons faire est de retourner tous les enregistrements qui se trouvent dans une table particulière. Donc, pour ce faire, nous utilisons Select et nous allons utiliser une étoile sauvage capturée ici, qui est tout de. Et maintenant, nous devons fournir notre nom de table, qui était TBL sur la conversion des devises de l'école. Ok, maintenant que nous avons notre instruction SQL, nous pouvons aller de l'avant et ouvrir au jeu d'enregistrements en utilisant la méthode Open qui va nous dire ce dont nous avons besoin, la source, qui est l'instruction SQL. Et nous devons fournir la connexion, qui est la connexion que nous avons établie à la base de données. Et il y a d'autres arguments que nous pouvons fournir, mais c'est tout ce que nous devons fournir pour l'instant. Donc, la première chose que je fais toujours après avoir ouvert un enregistrement sit est que je vérifie que nous avons retourné des enregistrements et que l'objet de sit enregistrements a une propriété de nombre d'enregistrements, cependant, il y a un catch et laissez-moi expliquer. Parlons donc des différences entre Excel et base de données. Excel est très macro niveau dans la mesure où nous pouvons facilement faire référence à des cellules individuelles à l'intérieur d'un tableau. Toutefois, une base de données se concentre davantage sur des ensembles de données, c'est-à-dire une table ou un jeu d'enregistrements entier qui est renvoyé à partir d'une requête. Donc, dans une base de données, il y a moins d'attention sur les cellules individuelles. Et bien que ce soit un excellent moyen de gérer les jeux de données dans une base de données, cela peut être considéré comme une limitation lors du référencement d'une base de données à partir d'Excel. Donc, pour contourner cela, ils ont inventé un mécanisme que nous appelons un curseur. Laisse-moi juste parler d'Excel. Alors pensez à un verrouillage de curseur ceci, c'est littéralement juste la cellule avec actuellement sur laquelle indique quelle colonne et ce que Roe était sur. Et nous sommes capables de naviguer à l'aide du curseur. Donc, en gardant cela à l'esprit, nous devons spécifier où se trouve l'emplacement côtier sur l'objet de connexion. Laisse-moi le faire rapidement maintenant. Et il est utilisé client. Nous allons donc utiliser le curseur Excel, pas le curseur de base de données. Et ce faisant, nous sommes en mesure d'obtenir facilement une représentation précise du nombre d'enregistrements dans le jeu de disques. Donc, je vais juste utiliser la propriété record count dans une instruction if basique. Et donc la raison pour laquelle je fais cela est si nous commençons à interagir avec un jeu d'enregistrements comme s'il avait des enregistrements, cependant, il n'a pas d'enregistrements, alors cela va produire une époque. Donc, je veux seulement exécuter du code quand un enregistrement a effectivement été retourné. Donc, si nous entrons dans cette déclaration si avec connexion de données ouvertes avec direct ouvert serait assis et nous avons des enregistrements retournés à partir de la base de données. Donc maintenant, je peux aller de l'avant et créer une nouvelle feuille de calcul sur laquelle je vais remplir les données. Et pour créer une nouvelle feuille de calcul, j'ai besoin d'utiliser la collection sheets, qui appartient à l'objet classeur. Donc WB, parce que c'est le classeur dans lequel nous voulons créer la feuille et la collection Sheets. Et il y a une méthode qui annonce pour cette ligne, nous allons juste ajouter une feuille générique. Cependant, je veux également spécifier le nom. Et je vais juste utiliser la date actuelle comme nous l'avons fait dans une leçon précédente en utilisant le format. Choisissez un trait de soulignement là aussi. Donc, cette ligne va ajouter une nouvelle teinte dans cet objet classeur, qui est ce classeur actuel. Et il va définir la propriété name en même temps que l' ajout de la nouvelle feuille de calcul et il va créer une feuille avec ce nom. C' est donc le jour actuel du jour et du mois. Donc d, d m, m, et ça va avoir un trait de soulignement, puis une monnaie. Maintenant que j'ai créé ma nouvelle forme, je peux ensuite asseoir mon objet de feuille de calcul en fonction de ce que nous venons de créer. Je vais juste copier ça parce que c'est la propriété name. C' est exactement la même chose. Cool. Donc, sur une forme de U ne veulent pas seulement remplir toutes les données, je veux également inclure les en-têtes de champ. Et si vous regardez un jeu d'enregistrements comme une table, il n'inclut pas les en-têtes de champ, mais les en-têtes de champ sont disponibles à partir de l'objet jeu d'enregistrements. Donc, ce que je vais faire est d'utiliser une boucle for et de faire une boucle à travers le nombre de champs dans le jeu d'enregistrements. Et puis nous allons remplir les noms de champs sur la feuille de calcul à l'intérieur de la boucle for. J' utilise donc la propriété fields, et cette propriété a une méthode appelée count. Je vais juste avoir besoin de définir cette variable x. Définissez-le comme le long juste au cas où. Et maintenant, je peux aller de l'avant et le remplir sur la feuille de calcul. Je veux qu'il soit sur la première ligne parce que c'est là que vont les en-têtes de champ. Et je vais utiliser x, ce qui est notre point sur l'intérieur de notre boucle for. Et maintenant, je vais extraire la propriété de nom de champ de l'objet jeu d'enregistrements pour la colonne en cours sur laquelle nous sommes. Une chose que je veux ajouter ici est que contrairement à une feuille de calcul ou un objet de feuille de calcul, propriété de ce champ est indexée 0. Ce que je veux dire par là, c'est que le numéro d'index commence à 0. Alors qu'il s'agit d'un objet de feuille de calcul, l'Index commence à un, comme dans la ligne 1, la colonne 1, et cetera. Mais la propriété fields, l'indexation commence à 0. Ça veut dire que je dois en prendre un au numéro x parce que ça commence à un ici. Ce que nous utilisons pour indiquer quelle colonne il se trouve sur la feuille de calcul. Maintenant, je veux m'assurer que le curseur du jeu d'enregistrements est sur le tout premier enregistrement. Donc, je vais juste utiliser une méthode de déplacement. Comme vous pouvez le voir, il existe plusieurs types de méthodes différents, mais je veux dire déplacer d'abord. Donc, cela va juste déplacer le curseur jusqu'au premier enregistrement de ce jeu d'enregistrements. Et maintenant que j'ai aussi ma tête de champ est remplie, je peux maintenant aller de l'avant et commencer à remplir les données de l'enregistrement, assis sur la feuille de calcul. Pour ce faire, je vais utiliser une boucle due until, et je vais boucler jusqu'à ce que le jeu d'enregistrements atteigne la fin. Alors je vais te montrer comment je vais faire ça. Faites E, o, F ou fin du fichier. Maintenant, parce que je n'utilise pas une boucle d'index ici, je vais avoir besoin d'un autre nombre ou compteur pour compter la ligne que nous sommes actuellement sur des sommes va attraper une nouvelle variable ici. Et je vais rester là, 22 parce que la première rangée est déjà prise avec les en-têtes et nous allons commencer sur la deuxième rangée. Donc, si vous y pensez, cette boucle va parcourir les enregistrements ou les lignes, et je vais avoir besoin d'une autre boucle pour parcourir les champs ou les colonnes de mon jeu d'enregistrements. Donc, je vais utiliser une méthode similaire à ce que nous avons utilisé ici. Maintenant, je peux remplir cette cellule actuelle à partir de l'ensemble d'enregistrements dans la cellule de la feuille de calcul. Et je vais utiliser y comme rho parce que c'est la rangée là-bas, commence à deux heures. Et l'index de la colonne est la valeur x point égale. Et similaire à ci-dessus, nous utilisons x moins un parce que les champs est 0 index. Nous utilisons la méthode de la valeur cette fois. J'ai trouvé une erreur. Donc, dans cette boucle, nous sommes supposés utiliser le nom et non la valeur, car la valeur est le contenu de la cellule et le nom est le nom du champ. Alors je vais changer ça. Maintenant, une fois que nous avons terminé cette boucle ici, cela signifie que nous avons parcouru toutes les colonnes de cette ligne actuelle dans le jeu d'enregistrements. Donc maintenant, nous devons ajuster ça. Nous devons passer à la ligne suivante de la feuille de calcul et à la ligne suivante du jeu d'enregistrements. Donc, je vais faire y égal y plus un. Et je vais passer à l'enregistrement suivant et au jeu d'enregistrements en utilisant la méthode move next. Ok, donc pense que nous sommes prêts à tester ça maintenant je vais juste passer à travers ça en utilisant F8. Donc il suffit de cliquer ici et les arrêts se sont produits. Et si nous n'avons pas de flèche tout de suite, cela signifie que nous avons compilé et tout va bien ou du moins c'est bon pour l'instant. Oui. D'accord. C'est bien. C' est compilé. Commençons à passer par ça. Donc, nous allons nous asseoir sur l'objet classeur. Nous allons créer une nouvelle version vierge du jeu d'enregistrements et de la connexion à la base de données. Nous construisons une chaîne de connexion. Et je pourrais juste soulever la fenêtre immédiate juste pour vous montrer à quoi ça ressemble terminé. Donc c'est à ça que ça ressemble, un plaqué. J' ai donc concaténé le chemin et le nom du fichier. Allons faire tomber ça. Donc j'espère maintenant que nous pouvons nous connecter à notre base de données en utilisant cette chaîne de connexion, les doigts croisés. Eh bien, ça semblait marcher. Alors maintenant, nous allons définir l'emplacement côtier. Donc, il définit l'emplacement du curseur sur le côté client, ce qui signifie que nous sommes en mesure d'obtenir une représentation précise du nombre d'enregistrements qui ont été retournés dans le jeu d'enregistrements. Je vais construire une requête SQL maintenant. Je vais ouvrir ce jeu d'enregistrements doigts croisés avec l'instruction SQL écrite correctement. Oui, c'est bien. Alors faisons apparaître la fenêtre immédiate et nous pouvons interroger ce qu'est le nombre d'enregistrements. Ok, donc on a 804 disques dans ce jeu de disques, qui est tout dans le titre. Continuons. Maintenant, nous allons créer une nouvelle feuille de calcul. Et on peut dire qu'il en a créé un nouveau ce soir. Oh, ce qui est le jour actuel ici en Australie sous la monnaie scolaire, ce qui est excellent. Et je vais définir ces objets afin que nous utilisions le même nom que nous venons créer afin que nous ayons défini un objet feuille de calcul. Continuons. Donc maintenant, nous allons remplir les en-têtes de champ sur la feuille. Donc je vais juste parler d'Excel pour qu'on puisse dire que c'est déjà fait. Donc on a le drap ici, je vais l'aimant si c'est petit. Donc, nous pouvons dire le nom de la feuille ici, et il est juste rempli les en-têtes de champ sur la feuille. C'est génial. Um, je fais aussi ça en écran partagé, donc supporte juste un instant pour qu'on puisse exécuter le code en même temps. On peut le dire, remplir la feuille de calcul. Revenons au code maintenant. Nous allons passer au premier record. Nous allons définir l'emplacement du curseur sur le premier enregistrement et le jeu d'enregistrements. Et on va régler le premier rotor deux. Et maintenant, nous allons parcourir tous les enregistrements dans ces centres de disques, faire tomber ça jusqu'à ce qu'on arrive au fond de cette série de records. Donc, pour le moment, comme vous pouvez le voir, nous ne sommes pas à la fin du jeu d'enregistrements et cette propriété est fausse. Donc, nous allons juste parsemer le vélo maintenant. C' est intéressant, mais c'est parce que la valeur est de lancer vers C. Okay, donc maintenant c'est passer. Donc vous pensez peut-être aussi, wow, nous sommes en train de passer par ce record, cellule par cellule, mais c'est raisonnablement efficace. Si nous devions avoir plus de colonnes et plus de lignes ou plus d'enregistrements, je le ferais probablement d'une autre manière, mais nous n'avons pas été touchés jusqu'à ce que nous ayons accès au contenu avancé. Donc, pour le moment, cette méthode est en fait assez bien pour ce que nous voulons faire, qui est de remplir un petit nombre de lignes et de colonnes sur une feuille de calcul. Et comme je l'ai dit, c'est raisonnablement efficace parce que lorsque vous n'utilisez pas l'interface utilisateur avec simplement mettre des valeurs d'un endroit à un autre. Donc ce que je vais faire, c'est juste mettre une boîte à message à la fin qui indique que nous avons atteint le bas. Il y avait donc 805 rangées. Pour que nous puissions le mettre en marche à plein prix et que nous puissions obtenir la boîte de message quand c'est fait. Alors maintenant, je vais frapper F5 et terminé. Donc, comme vous pouvez le voir, c'est assez rapide. Et nous allons juste faire défiler rapidement ici. Je vais en parler un peu plus loin. Et oui, il est rempli tous les dossiers. J' espère que si j'ai touché le contrôle, j'avais un 105. On y va. Donc c'est rempli tous les enregistrements. Ok, donc ça termine la leçon 12. En résumé, nous avons examiné l'importation de données provenant de diverses sources externes. Nous avons ouvert un fichier CSV et l'avons importé dans notre classeur. Nous nous sommes également connectés à une base de données externe et nous exécutons une requête SQL de base pour retourner les enregistrements qui nous intéressaient. Les nouvelles fonctionnalités VBA que nous avons introduites étaient la bibliothèque d'objets de données x actifs et aussi l'objet de type jeu d'enregistrements. Je m'appelle Andrew, merci d'avoir regardé, et je te verrai dans la prochaine vidéo. 6. 06 - Leçon VBA 13 13 - Tableaux: Bienvenue à la leçon 13. Tableaux. À mon avis, une montée de la fonction la plus puissante et utile dans VBA. Les tableaux sont si utiles car ils nous permettent de conserver efficacement d' énormes quantités de données en mémoire tout en consommant très peu de ressources. Cela nous permet d'effectuer des tâches laborieuses en fractions de fractions de secondes. Dans cette leçon, nous allons en apprendre davantage sur mon sujet préféré, les tableaux. Nous parlerons des tableaux à dimension unique, et nous parlerons également des tableaux multidimensionnels. Pensez à un tableau comme une table virtuelle. Médaillon. Il peut avoir des lignes et des colonnes. C' est ce que nous entendons quand nous faisons référence aux dimensions d'un tableau. Un tableau unidimensionnel ne contient qu'une colonne. Par conséquent, il n'a besoin que d'une seule dimension pour faire référence à une valeur 0 spécifique, qui est le rho. Un tableau multidimensionnel contient plus d'une colonne. Cela signifie que vous avez besoin de plusieurs dimensions pour faire référence à un point ou une valeur spécifique à l'intérieur de cet ensemble de données, par exemple, une colonne et une ligne. L' avantage d'utiliser un tableau ou s'il s'agit d' une plage de feuilles ou d'un enregistrement est dû à son efficacité. Il est juste une comparaison rapide d'un objet de plage par rapport à un tableau. Un objet de plage est une référence à un emplacement spécifique sur une feuille. Et comme la variable d'arrangement est une représentation de cet emplacement de forme spécifique, elle a de nombreuses autres propriétés parent et enfant. Et pour cette raison, la variable dans VBA consomme plus de mémoire par rapport à un tableau des mêmes dimensions. Un objet de plage doit également soutenir une référence entre l'objet théorique déclaré en VBA et l'objet de plage physique sur la feuille. Cela signifie qu'il y a toujours des opérations de lecture et d'écriture inévitables effectuées entre la représentation variable de l'objet de plage et l'objet de plage physique sur la feuille. Par conséquent, lorsque nous parlons données très volumineux qui nécessitent une opération à forte intensité de main-d'œuvre. Et par cela, j'ai même fait juste de chercher une seule valeur à l'intérieur du titre. Les performances de l'objet range sont très médiocres par rapport à un tableau. D' un autre côté, un tableau est juste un type d'objet de base qui a très peu de propriétés. C' est littéralement juste les bonnes dimensions et le type de données. Cela signifie qu'il vous permet de simplement le charger avec des données et de le maintenir avec un minimum d'agitation. Et en raison de son simple nitrite, il rend les mêmes tâches exigeantes de main-d'œuvre à effectuer sans effort et donc incroyablement rapidement. Nous examinerons aujourd'hui deux exemples pratiques, un tableau unidimensionnel et un tableau multidimensionnel. Allons entrer. Et cet exemple, je vais vous présenter à une dimension unique et aussi la fonction VBA intégrée appelée split. Je vais juste ajouter rapidement un nouveau module de code. Donc nous sommes dans le module 5. Maintenant, commençons par scission. Split est une fonction VBA intégrée qui nous permet d'effectuer une opération sur une chaîne, qui la divise en de nombreux composants discrets basés sur un délimiteur. Un délimiteur est un caractère qui indique un point de séparation. Si vous vous souvenez de la dernière leçon, nous avons utilisé des fichiers CSV. Un fichier CSV a un coma en tant que délimité entre les champs. La fonction split nous permet également de définir le caractère que nous voulons utiliser comme délimiteur. Je vais commencer tout d'abord, juste en créant un sous-programme. Ok, je l'appelle juste tableau SBA SPL. Ok, donc la première chose que je vais faire est de déclarer notre variable de tableau. Maintenant, ce type de données est une chaîne. Ce que cela signifie, c'est que tout à l'intérieur de ce tableau va être stocké sous forme de chaîne. Vous êtes en fait capable de contenir plusieurs types de données en utilisant la variante. Cependant, j'utilise rarement la variante. Et la raison en est que je veux juste le tenir la manière la plus basique possible, qui est une chaîne. Lorsque vous utilisez l'onglet de données de variante, vous pouvez rencontrer des problèmes tels que nous avions des formats de date et ce genre de choses. Et c'est manifestement indésirable. Donc je tiens toujours juste que tout est une ficelle. Maintenant, je veux aussi déclarer une variable de chaîne, et cela va contenir un morceau de texte qui contient des choses que nous voulons diviser. Alors réfléchissons à la raison pour laquelle nous pourrions vouloir diviser quelque chose. Ok, donc je vais juste revenir dans notre exemple précédent ici. Comme vous pouvez le voir ici, nous avons le chemin de fichier complet de la base de données que nous avions dans l'exemple précédent. Donc je vais juste copier ce sauté dans le module 5, et je vais juste l'assigner à cette variable ici. Disons par exemple, nous savons qu'il s'agit d'un chemin de fichier complet, mais nous voulons juste saisir le nom de fichier lui-même. Nous savons qu'un répertoire contient des barres obliques inverses. Par conséquent, si nous divisons cette chaîne par des barres obliques inverses, Nous pouvons maintenant saisir le nom du fichier, qui sera le dernier automne dans cette division. Alors faisons ça maintenant. J' utilise donc la fonction split ici et mon crochet, et l'expression que je veux envoyer la fonction split est divisée et le délimiteur est une barre oblique inverse. Je n'ai pas besoin de fournir quoi que ce soit d'autre. Donc, une fois que cette ligne est exécutée, tiendra un tableau dans SPL et il va contenir cette chaîne divisée par le caractère de barre oblique inverse. Donc, ce que je m'attends est la première ligne de mon tableau pour contenir le deux-points C. Et le prochain sera des usages, et le prochain sera I et II. suivant est OneDrive et ainsi de suite et ainsi de suite. Donc, ce que je vais faire est que je vais parcourir le code et après avoir exécuté cette ligne, je vais vous montrer ce qui se passe dans la fenêtre de montre. Et sans s'inquiéter de ce contexte, le contexte actuel de ce sous-programme. Alors frappez bien. Ok, donc maintenant dans la fenêtre de montre, on voit que nous avons notre variable ici. On peut dire qu'en haut il y a une chaîne et qu'il a une propriété de 0 à 5. Et tableau est indexé 0, ce qui signifie que le tout premier enregistrement est indexé 0. Contrairement à une feuille de calcul indexée à un, il n'y a pas de ligne 0, il n' y a qu'une ligne 1. Donc, dans le tableau, le premier élément est toujours un 0 pour la ligne et la colonne. Mais celui-ci est juste un tableau unidimensionnel, par conséquent, nous n'avons que des lignes. Donc, comme vous pouvez le voir ici, si je frappe le plus, vous pouvez voir que l'indice 0 est C deux-points, qui est exactement ce que je m'attendais à ce qu'il soit. Et le suivant est les usages, et le suivant est l'IE et le DRA. Le suivant est un document One Drive de bla, bla. Donc, comme vous pouvez le voir ici, et je double SPL cinq, je tiens le nom de fichier lui-même. Alors maintenant, parlons de la façon dont je fais pour extraire le nom de fichier de ce tableau. Dans ce cas, je sais que le nom de fichier est le dernier automne dans cette chaîne. Rappelez-vous quand nous regardons le tableau dans la montre, nous avons vu que dans le haut il disait chaîne 0 à cinq. Par conséquent, nous savons qu'il y a six éléments dans ce tableau, et nous désignons ces choses comme des limites. Donc, la limite basse, ce qui signifie qu'il est le premier élément du tableau et la limite supérieure est le dernier élément du tableau. Donc, si je veux saisir le tout dernier automne, je ferais référence à la limite supérieure de mon tableau. Donc, je vais juste utiliser cette limite supérieure et maintenant je vais déboguer l'impression dans la fenêtre immédiate. Donc, donc j'utilise à nouveau les crochets parce que je fais référence à quelque chose à l'intérieur du tableau. Et maintenant dans l'âge se réfèrent à l'indice. Donc un autre qui fait cinq. Donc il suffit de vous montrer 5 en premier, qui est le sixième élément car il commence à 0. Donc si je ramène ça ici et touche F8, j'en parle. Vous verrez dans la fenêtre immédiate qu'il nous a donné le nom du fichier. Maintenant, que faire si je ne veux pas explicitement Cy5 parce que leurs nombreux dossiers, il y a beaucoup, plus de dossiers que cela ou moins de dossiers que nous avons dans cette chaîne actuelle. Donc, ce que je peux faire est référé à la limite réelle. Donc, c'est un calcul qui me dit quelle est la limite inférieure ou supérieure de ce tableau particulier. Donc, au lieu de fournir un indice, je vais vous fournir un U-bend lié de ce qui abonde de. Et si nous survolons ça, vous direz qu'il nous dit que la limite supérieure est de cinq. Donc si je fais ça et frappe à nouveau F5, vous verrez que c'est fait la même chose. De même, si je veux retourner la limite inférieure ou le premier élément du tableau, qui serait C deux-points. Je peux aussi utiliser L lié. Donc si je fais ça, vous pouvez voir maintenant qu'il y a le point C dans la fenêtre immédiate. C' était donc juste un exemple très rapide et facile pour vous présenter aux tableaux en même temps vous présenter la fonction split. Passons maintenant aux tableaux multidimensionnels. Cet exemple suivant n'est peut-être pas tout à fait pratique. Cependant, il sert de bonne introduction aux tableaux 2D. Et en même temps, nous allons démontrer à quel point mourir efficace et rapide lorsqu'il est utilisé comme une table par rapport à l'utilisation d'une feuille exactement de la même manière. Nous allons faire cet exemple en deux parties. La première partie, nous allons charger jusqu'à 5 mille lignes sur une feuille de calcul avec des nombres aléatoires. Et puis nous allons regarder à travers ces 5 mille lignes pour une valeur spécifique. Après cela, nous allons également charger un tableau 2D avec 5 mille lignes de nombres aléatoires et traquer une valeur spécifique dans ce tableau. Je vais rester dans le module 5 ici. Mais je vais commencer par définir notre sous-programme. Ok, donc penser aux variables dont nous allons avoir besoin. La première intrigue, je vais charger une feuille de calcul avec 5 mille lignes de nombres aléatoires. Donc, j'aurai certainement besoin du cahier de travail et de la feuille de calcul. Maintenant, j'ai une feuille vierge prête. C' est en forme de froid trois. Donc, je vais juste utiliser celui-là dans cet exemple. Je vais charger les 5 mille lignes en utilisant quelques boucles for. Par conséquent, je vais avoir besoin de quelques nombres ou entiers. Si vous connaissez déjà, j'utiliserai les entiers x et y comme ligne et le pointeur de colonne dans mes boucles complètes. Donc, la première boucle pour sera pour la ligne. Donc ça va de la première ligne à la rangée 5 mille. Et je suis passé de la colonne A à Z, donc c'est 26. Ce sera donc de un à 26. Donc, dans cette boucle, comme nous sommes sur une rangée et comme nous parcourons la colonne un à 26 sur la cellule actuelle qui a continué à l'intérieur de cette boucle en utilisant le point y, je veux imprimer un nombre aléatoire dans cette cellule, et je veux que ce nombre à être entre 15 mille. Je vais rapidement en parler dans un commentaire pour expliquer comment nous créons un nombre aléatoire entre certaines valeurs. Donc, tout d'abord, nous allons commencer par quelques crochets. Et à l'intérieur de ces parenthèses, ce qu'on veut faire, c'est avoir la limite supérieure et la limite inférieure plus un. Donc, la limite supérieure est de 5 mille. Et maintenant, nous voulons soustraire la limite inférieure, qui est un. Et puis nous avons besoin de plus un. Maintenant, en dehors de ces parenthèses, nous voulons fois que par la fonction R et D, qui est un générateur aléatoire. Maintenant aussi, nous voulons ajouter à nouveau la limite inférieure, donc c'est un. Mais nous ne voulons pas de décimales, par conséquent, nous devons lancer ceci comme un entier. Donc, si je prends maintenant ceci et le ramène à la fenêtre immédiate, je vais juste amener la fenêtre immédiate afin que je n'ai pas à zoomer plus tard et faire un point d'interrogation, puis interroger ce que cette valeur renvoie. Ça nous a donné un nombre aléatoire. Et ce nombre ne dépasse jamais 5 000, il ne va jamais en dessous d'un. Donc maintenant, on va l'utiliser et le remplir dans une cellule. Sons, films Identité de la fenêtre immédiate. Comme nous l'avons fait à maintes reprises et que j'ai écouté, nous voulons aborder la feuille. On veut s'occuper des cellules de cette feuille. Quelles cellules nous voulons. Nous voulons x, y, parce que nous avons le pointeur de ligne, nous avons le pointeur de colonne. La valeur du point est égale au nombre aléatoire, c'est le coût en tant qu'entier. Donc, après avoir écrit toutes les valeurs aux 5 mille lignes et 26 colonnes. Et je veux essentiellement faire la même chose, mais lire les valeurs et chercher un nombre spécifique. Et le numéro que je veux chercher est 4,999. Donc je vais juste copier ça très vite. Parce qu'on fait essentiellement la même chose. Nous allons commencer à la première ligne et aller à la rangée 5 mille. Et sur chaque rangée, nous allons parcourir la colonne 12, le côlon 26. Et je vais juste me débarrasser de ça pour l'instant. Donc, pour interroger une valeur, je vais juste utiliser une instruction if. Si. Donc, si la cellule actuelle sur laquelle nous sommes, si la valeur de cette cellule est égale à 4,999, boucle 4,999, alors je veux faire quelque chose. Je veux remplacer la valeur dans cette cellule par l'automne trouvé. Et je vais aussi déboguer l'impression dans la fenêtre immédiate. Et je vais alors inclure aussi l'adresse. Et cette fois, je vais le copier. Ok, maintenant passons à notre tableau. Donc je vais juste remonter les déclarations de déclaration Ian Euro. Et je vais déclarer notre tableau. Et vous remarquerez, même si je parle d'entiers, je fais toujours référence à cela comme une chaîne. Et c'est purement pour l'efficacité, mais il existe aussi un moyen vraiment rapide et facile de comparer les chaînes et les entiers. Donc maintenant que nous avons défini notre tableau, nous pouvons maintenant coter la première instruction de dimension ou de déclaration, qui le définit simplement comme un tableau. Maintenant, je veux fournir les dimensions de ce tableau. Alors quelle est la taille de la table, combien de colonnes et combien de lignes ? Maintenant, je peux aussi le faire dans la déclaration de déclaration, mais je préfère toujours le faire séparément. La façon dont vous affectez la taille d'une variable de tableau utilise l'instruction read deem. Et nous avons enseigné le nom de la variable de tableau. Maintenant, nous devons fournir les numéros de colonne et de ligne. Mais permettez-moi d'abord de le commenter et je vais vous expliquer quelque chose. Nous savons donc déjà que les tableaux sont indexés différemment à d'autres types d'objets, tels que les cellules et les plages et les feuilles, etc., en ce qu'ils commencent à 0, donc le 0 indexé. Maintenant, les propriétés d'indexation sont également différentes. Par exemple, lorsque nous faisons référence à une cellule particulière d'une plage ou d'une feuille de calcul. On a d'abord besoin de la ligne. Et puis on a fait la colonne. Mais dans un tableau, c'est en fait l'inverse. Vous appliquez d'abord la colonne, puis indiquez la ligne. Et cela peut potentiellement devenir vraiment déroutant, mais c'est en fait pour une raison assez simple. Et la raison est que pendant que vous exécutez du code, vous ne pouvez pas réellement ajouter des colonnes sur un tableau. Vous ne pouvez ajouter des lignes que lorsque vous pensez à une table de données que vous utilisez dans l'exécution, que votre évaluation Iraniens qui interrogent ou tentent de trouver un objet dans. Il est très rare que vous ayez besoin d'ajouter des colonnes à ce titre, mais vous devrez peut-être ajouter des lignes à ce titre ou ajouter de nouveaux enregistrements à cette table. Et pour cette raison, vous ne pouvez pas réellement développer la propriété column dans un tableau sans d'abord détruire cet objet, puis recommencer. Alors lisez la dimension en entier, puis rechargez-le. De toute façon. Donc, définissons la valeur de la colonne et nous savons qu'il y en a 26. On veut un à Zed. Et parce que le tableau commence à 0, cela signifie que cela doit être 25. Et nous savons qu'il va y avoir 5 mille lignes donc, parce que ça commence à 0, c'est 4 999. Donc, cela a défini notre taille de tableau à 5 mille lignes et 26 colonnes. Et maintenant que nous avons défini la taille du tableau, nous pouvons utiliser les limites du tableau en boucles. Alors je vais le faire maintenant. Donc la première chose que nous voulons faire, qui est identique à ce que nous avons fait ici avec la feuille. Nous voulons d'abord le charger avec des nombres aléatoires, puis nous voulons parcourir ce tableau et nous voulons trouver 4,999. Alors quatre. Et je vais juste utiliser 0 ici. Maintenant. Pourrait utiliser 4,999 parce que je sais déjà que c'est la limite supérieure du tableau. Cependant, je peux également utiliser le calcul de la limite supérieure, qui est lié. Et nous devons fournir la limite supérieure que nous recherchons. Donc c'est Array Rand. Mais parce que nous avons plusieurs dimensions, nous devons fournir la dimension que nous voulons rechercher. Et bizarrement cet indice pointe à un. Donc, nous cherchons les lignes dans cette instance. Donc, les colonnes seront une et les lignes seront deux. Donc, nous cherchons l'indice de deux. Ne me demandez pas pourquoi ils ont fait ça. C' est comme ça qu'ils l'ont fait. Et maintenant, nous pouvons parcourir la colonne va vous utiliser à nouveau lié. Et je cherche la colonne, donc c'est une. Et je ne vais pas copier ça ici. Mais je vais maintenant assigner. Et je cherche la colonne, la première colonne, la ligne. Je vais assigner la valeur à cela. Donc exactement la même chose à la boucle complète ici. Ce que nous faisons, c'est que nous traversons ces deux-là pour les boucles, passant par les rangées et les colonnes. Et nous attribuons une valeur à chaque cellule individuelle à l'intérieur de chaque ligne et de chaque colonne. Et maintenant aussi exactement la même chose que l'exemple. Ce que nous voulons faire, c'est que nous voulons parcourir le tableau et que nous voulons rechercher une valeur spécifique. Donc encore une fois, je vais juste copier ceci et le coller là. Ça va descendre un peu. On y va. Et je vais avoir la même instruction if, mais pour le tableau. Maintenant, avant de continuer, vous vous souvenez peut-être que j'ai défini le tableau comme une chaîne, ce qui signifie qu'il ne contient que des chaînes. Donc, ce que ça veut dire, c'est qu'on a le numéro neuf. Si nous avons un neuf, c'est un entier réel, mais il le tient comme ça, comme une chaîne. Donc, VB eye ne le voit pas comme un caractère numérique o. ce que cela signifie, c'est que si j'utilise un entier ici et que j'ai une chaîne ici, ceux-ci ne se compareront jamais. Donc, ce que cela signifie est que j'ai besoin de coûter ce que j'ai ici, qui est tenu comme une chaîne, comme un entier. Et la façon dont je suis capable de coûter une chaîne en tant qu'entier est la largeur, le coût en tant que fonction entière. Il y a quelques problèmes à faire cela. Un problème que nous avons avec cela est que ce qui se passe si cette colonne particulière ou, ou cette valeur particulière ne contient pas un nombre, nous allons réellement obtenir une ère. Je vais te montrer dans la fenêtre immédiate. Disons que nous envoyons à la fonction Sea INT un caractère alpha. On nous enseigne l'inadéquation parce qu'elle ne peut pas se convertir. Cela dans un entier parce que c'est un caractère alpha. Il y a de nombreuses façons de contourner cela en utilisant des fonctions monoligne intégrées très similaires, mais je ne vais pas entrer dans cela maintenant. On va couvrir ça à un autre moment. Ok, donc exactement la même chose que notre boucle ici. Je veux remplacer la valeur conservée dans cette cellule par l'élément trouvé. Et je veux aussi déboguer imprimer un message dans les fenêtres immédiates. Alors je vais le faire maintenant. reviens à l'inadéquation enseignée avant. Si je reste cela ou déclare une variable comme un entier parce que nous détenons des entiers, cela ne fonctionnerait pas. Je ne pourrais pas lui envoyer une chaîne. Et c'est une autre raison pour laquelle j'utilise des chaînes. Parce que fondamentalement tous les autres types de données peuvent être convertis en une chaîne, puis le convertir loin d'une chaîne. Mais si vous le définissez comme un type de données entier, vous ne pouvez pas y mettre autre chose que des entiers, même des nombres supérieurs à 32,5 mille, car c'est la limite maximale d'un nombre entier. Quoi qu'il en soit, nous allons modifier l'impression de débogage. Je vais faire ça un peu différemment. Donc, je vais également inclure le nom du tableau et le point est dans cette instruction print. Maintenant, je voulais aussi comparer la différence entre les deux. Et une bonne comparaison est le temps qu'il faut pour faire une tâche. Donc, combien de temps il faut pour compléter l'exemple de feuille et combien de temps il faut pour compléter l'exemple de tableau. Pour ce faire, je vais devoir faire des sommes de rencard. Donc, je vais juste ajouter une variable de date. Et je vais aussi ajouter quelques entiers. Le premier contiendra le nombre de secondes qu'il faut pour terminer la première partie. Et le second contiendra le nombre de secondes qu'il faut pour faire le deuxième pot. Alors, comment vais-je y parvenir est en définissant le temps à une variable avant que ce soit des points, puis comparant ce temps à l'heure actuelle après que nous l'avons terminé afin que nous puissions voir combien de temps s'est écoulé entre ces deux points. Nous allons donc commencer par mettre l'heure et la date actuelles dans la variable Date. Et rappelez-vous qu'il retourne maintenant toujours l'heure actuelle, peu importe quoi. Et après qu'on ait fini. Et maintenant, nous pouvons utiliser une autre fonction pour compter le nombre de secondes qu'il a fallu pour terminer cette tâche, puis attribuer ce nombre à cette variable ici. Je vais juste arrêter avec ça égal. Donc, la fonction que vous utilisez pour comparer la différence entre deux régimes est la date DEF. Et vous pouvez voir qu'il demande intervalle une chaîne. C' est donc des heures, des minutes, des secondes, des jours , des semaines, des mois, des années, et alors la première date, donc c'est la date la plus ancienne et la deuxième date, qui est l'heure actuelle ou la date que vous voulez comparer la lumière de jour que vous souhaitez comparer avec la première date. Et c'est ce que vous devez fournir. Donc je veux des secondes. Et le premier dydt est D point G. Et la deuxième nuit, eh bien, c'est maintenant. Alors maintenant. Et nous allons tenir le nombre de secondes qu'il a fallu pour aller d'ici à ici. Et maintenant, nous pouvons faire la même chose pour celui-ci. Donc je vais réutiliser ce stock parce qu'on n'en a plus besoin. On a déjà tenu combien de secondes il a fallu. Et je vais prendre l'autre variable entière. Et je ferai exactement la même chose. Ok, donc maintenant que j'ai ces deux entiers, je vais juste les déboguer dans la fenêtre immédiate. Je vais juste copier ça. Pendant que nous exécutons ceci, Excel peut signaler qu'il ne répond pas et c'est parce que cela peut prendre beaucoup de temps pour le faire. Si vous y pensez, on fait 5 000 lignes et on fait 26 colonnes. Donc c'est comme un 203 000 000, ouais, 130 000 opérations. Et ensuite, nous faisons 130 000 autres opérations ici. Et puis nous faisons 130 et 130 000 autres opérations parce que c'est le nombre de lignes multiplié par le nombre de colonnes. Et nous faisons une chose spécifique pour H1. Et le but de cela était vraiment juste de vous montrer la différence dans le temps qu'il faut pour tirer des valeurs d'une feuille plutôt que de les tirer de la mémoire. Et chaque fois que nous passons par l'une de ces boucles en faisant quelque chose à la cellule où lire ou écrire à elle. Donc, nous en lisons dans ce cas, qui est de vérifier la valeur. Et nous y écrivons aussi. Donc, nous lui fournissons une valeur. Et pourtant, nous lui avons fourni une valeur ici lorsque la valeur de cellule est réellement égale à 4,999. Mais en même temps, nous faisons la même chose avec le tableau. Nous y écrivons 130 mille fois ici. Et nous en lisons 130 mille fois dans celui-ci. Donc, je vais m'attendre à ce que cela va prendre un certain temps à terminer, et il va certainement signaler qu'Excel ne répond pas. Et c'est parce qu'il a une valeur de délai d'expiration sur son charbon de procédure, ce qui signifie qu'il ne peut pas être occupé avec des tâches pendant plus d'un certain temps avant qu'il ne signale qu'il ne répond pas. Et après avoir exécuté ça, nous vous montrerons un moyen rapide d'éviter que cela ne se produise. Mais cela vient au prix de la performance. Donc, vous voudriez l'utiliser avec beaucoup de parcimonie. Bon, commençons ça maintenant. Mettez le curseur ici. Je vais frapper F5 en 321. Ok, on a fait tourner les fans sur mon ordinateur très vite. D' accord, donc je vais juste déplacer cette fenêtre immédiate en haut. Et on dira, je vais juste me débarrasser de celui-là. voir qu'il a trouvé 4,999 à plusieurs endroits et les garder sur leurs nombres aléatoires. Donc, vous savez, ce n'est pas toujours égal, mais c'est une comparaison raisonnable. Donc, si trouvé 4,999 dans ces adresses dans la plage, et il a également trouvé 4,999 dans le tableau dans ces points est. Mais le plus important, il a terminé 260 mille itérations de lecture et d'écriture sur une feuille en 20 secondes. Mais un terminé la même quantité d'itérations ou 260 000 à un tableau en moins de 1 seconde. Donc, comme vous pouvez l'imaginer, ce temps s'additionne de manière significative et cette réduction de temps est extrêmement perceptible. Ok, donc juste une dernière chose avant qu'on finisse. Ainsi, comme prévu, la fenêtre VBA ou Excel entièrement montrée ne répond pas pendant que ce code était en cours d'exécution. Donc il y a un y que nous pouvons contourner ça. Et c'est que nous utilisons une commande appelée do events. Et ce que fait la commande do events, c'est qu'elle permet à Excel de prioriser d'autres événements dans la file d'attente, tels que l'actualisation de la fenêtre , etc. Et cela peut être très utile lorsque vous avez d'autres utilisations en utilisant une macro que vous avez construite. Et cela peut empêcher une fermeture de la panique de force parce qu'ils pensent que vous êtes l'application a gelé. Mais pour des raisons de performance, nous ne voulons pas utiliser do events sur chaque itération de la boucle, nous voulons seulement l'utiliser avec parcimonie. Donc disons ici tous les 1000 rangées. Donc, si j'ai besoin de mettre faire des événements dans mes boucles, j'utilise la fonction mod, la fonction mathématique MOD pour le faire pour nous. Donc, je viens de mettre une instruction if ici qui assure que la commande do events n'est exécutée que toutes les 11000 lignes. Alors allez-y et ajoutez cette déclaration if à nos boucles ANOVA. Et 11000 peut ne pas suffire car il peut prendre plus que la valeur du délai d'expiration pour faire cent dix cents lignes. Donc, dans vos tests, définissez ceci à une valeur raisonnable. Il va l'ajouter dans la boucle Ri aussi, juste pour être juste, parce que nous ajoutons en fait du temps supplémentaire dans cela. C' est pourrir les événements ne introduit plus de temps. On va recommencer ça. Je vais juste déplacer ça ici. Espérons que nous ne devrions pas voir Excel afficher comme ne répondant pas, mais qui sait ? Jetons un coup d'oeil. Ok, c'est fini. Ceux-là apportent ça ici. Et nous n'avons pas vu l'affichage Excel ne répond pas, ce qui est bon. Et nous n'avons pas non plus vu de réduction de performance. C' est encore 20 secondes et 0 secondes, donc c'est positif. Et cela me dit que je pense que faire, je fais des événements commande toutes les 1000 lignes est un intervalle assez raisonnable pour faire réellement cette commande. Ok, donc cela résume le deuxième exemple pratique de cette leçon, l'introduction aux tableaux 2D ou aux tableaux multidimensionnels, et une démonstration des différences de performance entre l'utilisation de plages et de tableaux, qui tient que données en mémoire pour un accès facile à la lecture et à l'écriture. Je veux juste faire un dernier commentaire avant de terminer cette leçon. Comme vous l'avez vu dans le deuxième exemple pratique, effectuer des opérations itératives d'une plage de cellules ajoute beaucoup de temps à l'exécution de notre code. Et c'est un piège commun dans lequel VB je développe aussi souvent tomber. D' après mon expérience, j'ai été en mesure d'optimiser les macros de saisie des données qui veulent prendre des minutes, voire des heures, pour m'exécuter quelques secondes. Et c'est simplement en utilisant et en manipulant les ensembles de données à l'intérieur des tableaux plutôt que sur des plages de cellules. Évidemment, les opérations de feuille de calcul, de lecture et d'écriture sont ce qui prend le plus de temps. Et il est inévitable que pour charger un tableau ou déposer les données sur une feuille de calcul, vous devez effectuer des lectures et des écritures dans ou à partir de la feuille de calcul. Dans le contenu avancé, je vais vous montrer comment absorber un ensemble de données entier de la feuille dans un tableau avec une seule opération de lecture et a fait vider la feuille dans un tableau avec une seule opération de lecture le tableau entier sur la feuille avec un seul Raj pour gagner encore plus de temps. Donc, les gars, ça termine la leçon aujourd'hui. Si cela est arrivé jusqu'ici, je tiens à dire félicitations, vous venez d'apprendre le concept le plus utile dans Visual Basic autre que la dimension unique et les tableaux multidimensionnels appris dans cette leçon, vous avez également appris sur la fonction split, qui vous permet de diviser des chaînes en petits composants en utilisant un caractère spécifié comme délimiteur. Vous avez également appris à utiliser la fonction R et D pour générer un nombre aléatoire entre deux nombres. Et enfin, vous avez appris à retourner une différence entre deux régimes dans un intervalle spécifié, IA, secondes, minutes, heures, jours, semaines, mois ou années. Je m'appelle Andrew. Merci d'avoir regardé et je te verrai dans la prochaine leçon. 7. 07 - Leçon VBA 14 14 - Dates: Bienvenue à la leçon 14. Les dates. Je voulais juste parler problèmes que vous rencontrerez probablement avec les dates lors du codage et de la VBA, ce qu'il faut rechercher et ce que vous pouvez faire pour atténuer ces problèmes. Donc, aujourd'hui, nous allons parler de la façon dont Excel stocke les dates, comment VBA stocke les dates, et oui, elles sont différentes. Nous examinerons également le problème majeur de la façon dont les dates sont mises en œuvre. Et je vais vous montrer quelques façons de résoudre ces problèmes. Il est important de comprendre comment Excel et VBA stockaient réellement les dates. Parce que si vous comparez le format de rouleau d'une date Excel et d'une date VBA, il y aura une divergence. Excelle les dates de portes comme un nombre. C' est un nombre séquentiel qui représente le nombre de jours se sont écoulés depuis le 1er janvier 1900. Ainsi, à titre d'exemple, le 11 août 2020 sera stocké comme 44.054. Et c'est parce que le 11 août 2020 est 44.054 jours depuis le 1er janvier 1900. Vba stocke également les dates sous forme de nombre, et c'est aussi un nombre séquentiel, mais exprimé comme le nombre de jours écoulés depuis le 31 décembre 1899. Ainsi, le 11 Août 2020 est stocké comme 44.055, soit 44.055 jours après le 31 Décembre 1899. Les dates, heures, minutes et secondes Excel et VBA complètes sont exprimées sous la forme d'une décimale du nombre dike. Donc, si par exemple, 0,5 est égal à 12 PM midi, ou 0,25 est égal à six AM. Par conséquent, en VBA, le nombre 1.25 représente le 31 décembre 1899 à 6h du matin. Et dans Excel, le nombre 1.25 représente le premier de Janvier 1900 à six, je stocke les dates de cette façon rend simple pour Excel et VB I pour cette méta d'effectuer des calculs sur les dates. Par exemple, compter le nombre de jours entre les dates, ajouter les dates ensemble, etc. Microsoft voit cela comme un concept très simple mais efficace. Lorsque Excel présente la date à un utilisateur sur une feuille de calcul ou avec VBA dans la zone de message de la fenêtre immédiate ou utilise un formulaire, etc., un calcul est effectué qui présente les données dans un format lisible par l'utilisateur. Et c'est là que nous rencontrons des problèmes parce qu'il y a tellement de façons qu'une date peut être exprimée. Par exemple, US Long Date, nous courte date, longue journée européenne, date courte européenne, date julienne , Unix, horodatages, et cetera. Toutes ces différentes façons d'exprimer les régimes peuvent confondre ou même complètement trébuché le calcul de date intégré utilisé pour prendre une représentation d' une date et stocker dans le format de numéro séquentiel. Si vous utilisez Excel dans le cadre de votre vie professionnelle, vous aurez sans aucun doute vécu cela. Pour ceux aux États-Unis qui traitent des données dont les données sont stockées dans un format européen et vice versa. Sans doute, le problème est en fait pire pour ceux d'entre nous qui n'utilisent pas le format de date américain car le calcul intégré semble nous favoriser les formats de date. Il devrait également, mais ne prend pas toujours en considération le format de date et d'heure local assis sur votre ordinateur. Voici un exemple de ce problème de calcul de date. Excel a traité cette date européenne comme une date américaine jusqu'au 13e jour du mois, puis il est retourné à une date européenne. Voici un autre exemple de comportement irrégulier inexplicable du calcul de date dans Excel. Lorsque nous avons besoin de lire ou d'écrire des données dans ou à partir de feuilles de calcul avec VBA et d'effectuer nos propres calculs à ces dates. C' est évidemment un énorme problème. En outre, si nous envoyons une date formatée à une cellule, elle est à nouveau soumise au calcul de date défectueuse d'Excel car Excel la voit comme une date et il doit effectuer son calcul erroné à cette date pour la convertir dans son format numérique. Alors, qu'est-ce qu'on peut faire ? Autrement dit, vous devez contrôler autant que possible. Et pour être en mesure de contrôler autant que possible, vous devez être préparé afin de comprendre à quoi vous pourriez être confronté. En d'autres termes, faites autant d'analyses que possible. Si vous avez besoin d'une entrée utilisateur, ne les autorisez pas à parler dans une date. Utilisez un contrôle de sélecteur de date pour vous assurer que la date est exacte, si possible, stockez vos données sous forme de chaîne sur la feuille. Cela empêchera Excel de fonctionner. C' est des calculs farfelus sur les dates. Lorsque vous écrivez une date dans une cellule, placez simplement une apostrophe avant votre chaîne de date. Cela empêche Excel d'effectuer un calcul dessus. Si vous devez stocker des données sous forme de dates dans une feuille de calcul, ce qui serait requis si les utilisateurs doivent filtrer par date ou utiliser une date dans une formule, utilisez un format de date non ambigu. Par exemple, utilisez des caractères alpha comme mois, IA, AN comme janvier. Ce que cela fait, c'est qu'il fera en sorte que le calcul de l'Excel de Floride puisse immédiatement dire quelle est la composante dy et quelle est la composante mois. Enfin, effectuez vos propres calculs. Si vous récupérez des dates sur une feuille, ne comptez pas sur les fonctions intégrées de base. Analysez vos données comme première étape de la création de votre application. Et c'est pour que vous puissiez avoir une meilleure idée de ce que les formats de date aléatoires Excel vous lancera. Ils ont pour effectuer de manière fiable vos calculs de date. Voici un exemple réel d'un scénario auquel j'ai été récemment confronté et les étapes que j'ai prises pour m'assurer que les dates étaient correctes, mon application a dû importer des données à partir d'un CSV et comme Excel a ouvert le fichier, il a effectué qu'il est défectueux sur le champ de date, et c'était le résultat des calculs Excel. Donc, ma première étape a été d'obtenir la plus grande taille d'échantillon que je pouvais obtenir et d'aider les dates possibles auxquelles je pourrais être confronté. De cette façon, je peux écrire ma propre fonction qui peut gérer toutes ces dates et la convertir en une date réelle. Donc, reconstruisons cette fonction maintenant. Alors commençons à construire la fonction. Je vais juste arrêter en ajoutant un nouveau module de code. Module six. Et je vais juste définir une fonction. Donc, je l'appelle se détache de la chaîne. Et ce que nous avons besoin pour fournir la fonction est le dydt comme une chaîne. Et je veux vous rendre un rencard. Donc, le but de cette fonction est de prendre la date qui est dans n'importe quel format aléatoire et de retourner cela comme un mort réel. Donc, en effectuant mon propre calcul de date sur cette chaîne. J' ai donc déjà effectué mon analyse sur la plus grande taille d'échantillon de données que je pourrais obtenir. Et j'ai remarqué que dans cet exemple, ils étaient vrais formats de date potentiels que je pouvais éventuellement voir. Je sais également que ce fichier est créé par une application ou une application Web. Par conséquent, je peux plus ou moins garantir que les régimes reçoivent l'entrée ne vont pas changer terriblement beaucoup parce que le fichier est automatiquement généré par un morceau de logiciel. Et dans la grande taille de l'échantillon que j'ai reçu, j'ai réalisé qu'il y avait de vrais résultats potentiels de la façon dont Excel présenterait ces dates. Donc, ce que je fais normalement toujours est de les passer comme commentaires dans le haut afin que je puisse travailler à partir de ceux-ci. Donc, la première chose que j'ai remarqué est qu'un format de date a un espace et l'autre format de date a bien, devs aux épices ici et un autre espace là-bas. La chose que j'ai remarqué est que l'un des régimes a un horodatage de 12 heures avec lui et le payer à la fin. Et l'autre est dans un horodatage de 24 heures. Maintenant que je connais ces choses, je peux m'occuper de ces scénarios. Donc la première chose que je veux faire est de gérer ces doubles espaces. Donc, la façon dont je pense faire cela est d'utiliser la fonction Remplacer pour remplacer un double espace par un seul espace. Donc, tout d'abord, je vais juste déclarer ma variable, juste l'appeler date de tentative STR. Et maintenant je vais remplacer les espaces doubles par un seul espace. Mais la fonction Remplacer ici et l'expression que nous voulons envoyer est la date STI. Et ce qu'on veut trouver, c'est de vraies épices. Et ce que nous voulons la remplacer par une seule épice. Donc, je serai en mesure d'envoyer l'un de ces régimes à cette fonction de remplacement, et cela n'affectera que le S1. L' étape suivante est que je dois identifier la différence entre ces deux. Donc, évidemment, nous en avons un qui est en horodatage de 24 heures et l'autre n'est pas un horodatage de 12 heures et il contient un OPM de messagerie instantanée. Donc, ce que je peux faire est de chercher AM ou PM dans une chaîne. Et si cela existe, alors je sais que j'ai ce format. Et s'il n'existe pas, alors je sais que j'ai ce format. Donc, je peux juste utiliser une instruction if simple pour cela. Donc, je vous présente juste cela dans STI ou dans la fonction de chaîne. Donc, ce que cela fait est qu'il regardera à l'intérieur d'une chaîne pour une chaîne que vous définissez. Et si ce que vous cherchez existe à l'intérieur de cette chaîne, alors il retournera la position dans cette chaîne sous forme d'entier. Et si elle n'existe pas dans la chaîne, elle retournera 0. Donc je veux commencer par le personnage 1. Ainsi, vous pouvez commencer à n'importe quel point de la chaîne. Et la chaîne un est ce que vous l'envoyez, ce qui sera le suivant. String 2 est ce que je cherche. Je cherche que je suis et je n'ai pas besoin de fournir quoi que ce soit d'autre. Maintenant, si c'est supérieur à 0, alors nous avons je suis dans la chaîne. Alors que se passe-t-il si vous avez PM dans la chaîne ? Eh bien, on peut juste utiliser une déclaration orale et utiliser la même chose. Ou et nous aurons une autre condition aussi. Donc, si nous entrons dans cette partie de la déclaration if, cela signifie que nous avons ce type de régime. Et si nous saisissons cette partie de la déclaration if, nous avons ce début de date. Donc la première chose que nous voulons faire maintenant est de diviser cette date par des épices. Et c'était une raison pour laquelle je me suis débarrassé de ces doubles épices pour commencer. Ils me permettent que je vais avoir besoin d'une nouvelle variable, d'une variable de tableau. Et je l'appelle SPL Spice, donc il se divise par l'espace. Nous allons SPL épice égale split. Que divisons-nous en mettant la chaîne de modèle ? Et nous le divisons par l'espace. Ce que cela signifie maintenant, c'est que j'ai maintenant un tableau qui devrait avoir trois lignes. La première ligne correspond à cette partie de la date, la deuxième ligne étant cette partie de la date et la troisième rangée étant cette partie du jour. Travaillons d'abord sur cette partie du site, qui est la date physique réelle. Donc maintenant, ce que je peux faire est que je peux diviser par caractère barre oblique inverse, ce qui me conduira ensuite avec un autre tableau. C' est cette partie. Cette partie. Et cette partie va avoir besoin d'une autre variable de tableau. Et je vais copier ça et je vais coller ça ici. Maintenant, je sais que la partie dydt va exister dans la première ligne, qui est le bas 0 dans ce tableau. Donc j'utilise Split à nouveau. Et qu'est-ce que je vais diviser ? Je vais diviser l'espace SPL. Et j'utilise la ligne 0, qui est la première ligne. Et le délimiteur est une barre oblique inverse. Alors maintenant, je vais tenir trois rangées. La première rangée étant le jour, deuxième rangée étant le mois, et la troisième rangée étant le Gaea. Ensuite, traitons de cette partie de la date, de l'heure. Et donc je sais que j'ai deux deux-points ici et que je peux séparer ça par deux-points. Et un autre, ce sera l'alpha et ce sera les minutes, et ce sera les secondes. Donc je vais faire la même chose ici. Fournissez-lui quelques crochets. Et je sais que le composant Tom existe dans la deuxième rangée, qui est un. Donc maintenant je peux commencer à couplage pour donner la date de ce que nous avons séparé de cette chaîne. Et je vais stocker cela d'abord dans une variable temporaire, j'attribuerai ensuite à la variable de fonction, qui sera retournée de la fonction. Donc, nous allons juste définir ça maintenant. Et ce haut variable est un dit. Maintenant, je vais vous présenter une autre fonction que nous appelons les céréales de date. Et donc ce que cela fait est qu'il convertira une date et nous pouvons spécifiquement fournir au mois Gaea un entier afin que nous n'ayons pas à compter sur le calcul Yankee Excel. Donc, je sais que l'année est dans le tableau de barre oblique inverse SPL, et je sais que c'est dans la troisième rangée de ce tableau. Donc, l'année est en SPL, jeu réel, et c'est en R3, qui est l'élément deux parce qu'il commence à 0. Et rappelez-vous, le mois est également dans ce tableau, et c'est dans la deuxième rangée. Par conséquent, en bas, la fin de la journée est dans la première rangée. Point 0. Donc maintenant, je vais avoir la date correcte stockée comme une date dans cette variable. Alors maintenant, qu'en est-il de l'heure ? Normalement, j'utiliserais une fonction similaire à la date série, qui est appelée céréales temporelles. Cependant, la fonction chronologique série nécessite une heure de 24 heures. Et malheureusement dans cet exemple, nous n'avons pas une heure de 24 heures, mais c'est en fait OK parce que nous avons ce composant du colorant à temps et il y a un Je suis et PM ici. Je sais que je peux envoyer cela de manière fiable à une variable de date et qu'il la convertit correctement. Et c'est parce qu'il n'y a pas notre poupée de régime européen ici. C' est littéralement juste le temps avec un IM et un PM. Donc, je vais juste créer une variable qui nous aidera à faire face à cela maintenant. Donc, la ferraille est égale. Donc normalement, c'était en fait appeler ça. Donc normalement, j'utiliserais ce composant ici, mais dans ce cas, je n'ai pas besoin de le faire. Donc, je vais juste commenter ça pour l'instant. Parce que ce que je vais utiliser dans ce tableau est en fait au format de 12 heures. Et je ne peux pas utiliser cette série d'inculpation. Donc, je vais juste concaténer quelques chaînes ensemble pour générer ceci. Et je vais assigner ça à cette variable de date comme espace Beale. Et je veux la deuxième ligne, qui est un, parce que je fais référence au tableau qui divise la chaîne par épices, donc c'est la première ligne, et c'est R2. Et donc je concaténe juste des cordes ici. Donc ce que ça va revenir, c'est ici. Et il va affecter cela à une variable de date. Donc maintenant, il est simple de les additionner parce que nous avons une fraction ici, qui est la fraction d'un nombre entier qui représente la matrice et le temps. Et puis nous avons un nombre entier ici qui représente la date réelle. Donc, je peux simplement les ajouter ensemble. Et on aura un rendez-vous complet. Maintenant, je vais retourner cela à une variable de fonction deux égaux. Et je vais aussi fonctionner. Donc, ça gère cette date. Maintenant, parlons de cette date. Donc je sais que cela contient un espace et je peux le diviser par jour et heure. Donc je vais juste copier celui-là parce qu'on a fait exactement la même chose. De même, je sais que j'ai des barres obliques inverses dans mon composant de date, donc je peux aussi l'utiliser. Et je sais que j'ai une valeur de 24 heures ici. Donc, je peux utiliser mon scission de deux-points maintenant. Et je peux aussi maintenant commencer à coupler mes régimes. Donc avec cette date, semblable à cette date, je sais que c'est le jour, le mois, l'année, donc je peux juste copier ça directement. Et c'est là que cela commence à différer de celui ci-dessus. Et ils vont utiliser des céréales temporelles, qui est similaire à la céréale dydt pour générer la valeur temporelle. Ok, donc la première chose qu'il demande, c'est Alpha. Alpha est dans la première rangée, spiel côlon, et c'est la première rangée, ce qui signifie 0. Et la minute est dans la deuxième rangée. Et ces données qu'il avait ne contiennent pas de secondes, donc je vais juste fournir à 0. Donc maintenant, nous avons notre fraction de temps et nous avons aussi notre régime alimentaire comme un nombre complet. Donc, je peux juste les ajouter ensemble. Et je peux retourner ça à une fonction. Et je veux aussi quitter la fonction ici. Ok, alors testons ça. Je vais juste mettre un point d'arrêt sur le point d'entrée d'une fonction. Et je vais copier cette chaîne de date ici, la première, et je vais juste parler de la fenêtre immédiate. Maintenant, point d'interrogation, obtenez la date de chaîne et je vais l'envoyer cette date. Qu'est-ce que ça nous donne ? Oh, ok, c'est bien. Cela nous a donné une fonction sabo non définie. Et c'est parce que j'ai mal orthographié ça. Je ne contrôlais pas l'espace. La barre oblique inverse. Cela signifiera également que celui-ci n'est pas correct parce que je l'ai copié d'en haut. Est-ce que ça marche ? Oui. D'accord. Cool. D' accord. Jetons un coup d'oeil à ça ici. Si je saute dans la fenêtre immédiate, vous pouvez dire point d'interrogation date STI. Et il retourne la chaîne, ce qui est correct. Et maintenant, il va remplacer le double espace. Mais dans ce cas, nous n'avons pas besoin d'épices. Donc, comme les chaînes doivent être identiques, si je saute juste dans la fenêtre immédiate, va, nous devrions être en mesure de dire ça. Supprimons, supprimez cette ligne afin que nous puissions les comparer côte à côte. Oui, identique. Droit ? Maintenant, ce que nous nous attendons est que ceci saute cette déclaration si puis saute dans celle-ci. Ce qui le fait. Ok, c'est bien. On se divise maintenant par l'espace. Donc, si je l'ajoute maintenant à regarder. Les contextes actuels sont bien. Ok, et dans la vitrine on voit qu'on a maintenant une ficelle divisée par des épices. Nous avons donc la première ligne qui contient la date réelle, et nous avons la deuxième ligne qui contient l'heure. C' est génial. Retournez dans notre fenêtre de code. Maintenant se divise par barre oblique inverse. Alors signez à nouveau, ce que je vais faire, c'est ajouter une montre. Et je ne suis préoccupé que par ces contextes qui est grand et aucun dommage ma montre, nous pouvons dire que SPL backslash. Si nous ouvrons cela, nous avons divisé par une barre oblique inverse change le colorant dans la première rangée, le mois dans la deuxième rangée et l'année dans la troisième rangée. Parfait. Oui, sauvegarde à la fenêtre en écho. On se divise par deux points. Et je vais juste ajouter un G9, j'ajouterai une montre. Et encore une fois, ne sont concernés que par ces contextes. Et nous pouvons dire que nous avons le temps qu'ils répondent à la nôtre, et nous avons le procès-verbal. Cette ligne suivante, nous utilisons la fonction série avec fourni à l'année, qui est 20-20. Et nous avons fourni au mois de juillet. Et nous avons aussi fourni à la digue, qui est le 21. Donc, si je passe cette pelouse et un vol stationnaire ici, on devrait voir que c'est exactement ça. Le 21 juillet 2020. De même pour cette date horodatage à l'heure actuelle est 12. Je le suis. Mais nous avons la fonction série temps envoyait neuf comme les heures et envoyait 24 heures et minutes et était assis à 0 est les secondes. Et comme on peut le voir, on a 924 je suis. Et pas de secondes, ce qui est génial. Donc maintenant, je peux juste ajouter ces deux ensemble, ce qui va faire ici. On peut voir si on survole, on dit le 21 juillet, 20-20 à 924. Et puis nous allons assigner cela à la variable de fonction afin que nous puissions retourner cela dans la fenêtre immédiate, appuyez sur la fonction de sortie. Et nous verrons qu'il nous a fourni la date et l'heure correctes. D' accord. Donc je vais juste supprimer tout dans la fenêtre immédiate et nous allons essayer l'autre date. Donc je vais juste copier celui-là et toucher le point d'interrogation et je le tape. Oui. Et j'ai le support qu'une corde ici et à l'intérieur du quartz et je vais juste coller dedans. Et nous allons appuyer sur Entrée. Ok, donc maintenant, on est de nouveau en fonction. La première chose qui va faire est de remplacer les deux épices. Comme nous pouvons le dire est que nous planons, nous obtenons à travers les épices entre le chaud et le pot de temps. Donc maintenant, nous n'avons pas seulement un espace parce que nous avons remplacé deux caractères par un. Maintenant, nous nous attendons à ce que le code soit dans cette partie de l'instruction parce que dans la chaîne nous avons AM ou PM. C' est génial. Ouais, on va se séparer par Spice et Alpha a sauté dans la fenêtre de la montre. Il devrait encore contenir ces montres. Nous avons ajouté le tableau SPL Spice contient trois lignes, ce qui est génial. Nous avons la date, nous avons l'heure, et nous avons PM, et ils sont tous stockés sous forme de chaînes. Ensuite, sauvegarde sur la fenêtre Code, je vais diviser le premier pot par barre oblique inverse. Peut dire que nous avons divisé cette chaîne par barre oblique inverse. Donc nous avons sorti jour, mois et année. Excellent. Maintenant, je vais affecter cela à une variable de date en utilisant la série. On l'a envoyé l'année, on l'a envoyé au mois. On l'a envoyé à la journée. Et pourtant le premier juillet 2020. Et cette ligne est la ligne la plus risquée de toute notre routine. Et c'est parce que nous nous appuyons sur le calcul excels pour convertir cette chaîne en cette variable de date. Mais parce que nous ne parlons que d'un moment au niveau de confiance est extrêmement élevé parce que nous n'avons pas de formats de date bizarres à craindre. Donc je vais juste faire ça maintenant si la hauteur et nous devrions voir ça. Oui, 7058 PM. Super. En fait, ça a été transformé en un temps. Alors maintenant, nous allons juste ajouter ces deux ensemble comme nous le faisons. Et je retourne cela à la variable de fonction et je quitte la fonction. Et nous devrions voir cela apparaître dans la fenêtre immédiate. Tu y vas. n'est donc qu'un exemple rapide de la façon dont j'ai traité ce problème. Donc la première étape a été d'analyser mes données. Et j'ai remarqué que j'avais l'un des deux formats de date. Et puis j'ai construit cette fonction qui a géré un de ces formats. Ok les gars, ça termine cette leçon. Donc, dans cette leçon, nous avons parlé de la façon dont Excel stocke les dates et comment VB ay stocke les dates. Nous avons parlé des nombreux problèmes que vous pourriez rencontrer avec les régimes alimentaires grâce au calcul dydt d'Excel. Et je vous ai expliqué comment je vais prévenir ou minimiser ces problèmes. Je vous ai également présenté quelques nouvelles fonctionnalités et fonctions UVB I. Le premier étant la fonction Remplacer, qui est essentiellement la même que friand and replace dans Microsoft Word. Et je vous ai également présenté dans une chaîne ou un STR, qui cherchera une chaîne particulière à l'intérieur d'une autre chaîne. Et s'il existe, il retournera un nombre qui représente le numéro de caractère que la chaîne que vous recherchez existe à l'intérieur d'une chaîne. Et s'il n'existe pas, il retournera 0. Et enfin, nous avons également examiné les céréales de date et d'heure. Et cela nous permet de spécifier quel est le jour et quel est le mois, plutôt que d'utiliser la méthode de calcul par défaut d'Excel ? Un type, les gars, je m'appelle Andrew. Merci d'avoir regardé et je vous verrai dans la prochaine vidéo. 8. 08 - Leçon VBA 15 - Formulaires d'utilisateur et l'expérience utilisateur: Bienvenue à la leçon 15, formulaires utilisateur et Introduction à l'expérience utilisateur. Dans cette leçon, je veux juste vous présenter création de formulaires utilisateur et vous fournir quelques conseils sur l' expérience utilisateur qui vous aideront à rendre l'utilisation de vos formulaires plus attrayante. Revenons dans l'IDE. Donc, la première chose que nous voulons faire est de vouloir ajouter un formulaire utilisateur. Donc, je vais faire un clic droit ici dans la fenêtre du projet. Et je vais sélectionner insérer et je vais sélectionner le formulaire USA, que vous pouvez voir a affiché l'utilisation de la fenêtre de conception de formulaire. Et c'est essentiellement ce que vous voyez est ce que vous obtenez éditeur. C' est ainsi que vous concevez vos formulaires dans cette vue ici. Et vous remarquerez qu'il est également présenté ici une petite boîte à outils, qui contient tous les contrôles ou au moins certains des contrôles que nous voulons utiliser. Maintenant, après avoir ajouté mon formulaire, la première fois que nous allons faire, c'est que je vais lui donner un nom. Et pour ce faire, je vais juste faire apparaître la fenêtre des propriétés ici, et je vais appeler cette adresse de nom de soulignement de la RAM. C' est donc le nom de l'objet. C' est ce que nous allons faire référence à ce formulaire comme dans le code, si RM soulignement nom, adresse. Et je vais aussi lui donner une légende, qui est ce qui est affiché en haut à gauche de la fenêtre. Et donc la propriété de légende ici, ça va changer ça. Et comme vous pouvez le voir, il a changé le texte qui est dans la légende de cet uniforme. Qu' est-ce qu'on essaie de faire avec ce formulaire ? Ce que nous voulons faire, c'est capturer les données de l'utilisateur, puis les placer dans une feuille de calcul. Et dans une leçon précédente, je vais juste parler d'Excel. On avait la fiche de coût. Je vais juste faire ressortir le fond de ça pour que nous puissions dire que la fiche de coût et qui a le prénom, le nom, la ville et le pays. Et ne tenez pas compte de la phrase parce que c'est la formule que nous avons construite qui obtient juste la peine. Mais ce que je veux faire, c'est que je veux créer un formulaire qui saisit le prénom, le nom, la ville et le pays, puis le remplit sur une nouvelle rangée dans cette feuille. Donc, en pensant à ce dont nous aurons besoin, nous allons avoir besoin de boîtes de texte. Et ils vont contenir le prénom, le nom de famille, la ville et le pays. Nous allons également avoir besoin de quatre étiquettes pour étiqueter chaque manuel. Et cela de sorte que l'utilisateur sait quoi entrer un âge des zones de texte. Enfin, nous allons avoir besoin d'un bouton de sauvegarde. Et le bouton cite va alors exécuter du code qui va remplir ce qu'ils ont entré dans la feuille de calcul. Donc je vais juste minimiser ça et on va retourner ici. Où est ma boîte à outils ? Oui, d'abord, je vais ajouter des zones de texte. Donc, comment je vais faire cela est à partir de la boîte à outils, suffit de cliquer dessus et puis de le faire glisser sur le formulaire lui-même. Et je vais juste traîner pour la croix. Ils ne sont pas alignés ou quoi que ce soit pour le moment, c'est bon. Juste pour l'instant, ajustez également la taille à l'aide d'un trackpad dans cette vidéo afin que l'agilité de masse soit assez faible. Et aussi, nous voulons ajouter quelques étiquettes. Alors amenons ça à travers. Et je vais ajouter des étiquettes. Et je vais juste faire un petit trackpad est ennuyeux. En fait, je juste même juste la taille, puis copiez et collez jours. Donc copier-coller voit exactement la même chose, juste Control-C, Control-V. Tout d'abord ce que je veux faire après avoir ajouté des jours, c'est que je vais leur donner une convention de dénomination. Donc, je suis tout au sujet des conventions de nommage. Et quand nous en venons au code, je vais vous montrer pourquoi il est très utile d'utiliser une convention de nommage. Donc, nous allons commencer par une zone de texte. Je vais les appeler t, x t et le premier était le prénom. Je suis le nom de l'école. Je pourrais même nous donner un label aussi. Lbl, prénom, et je vais lui donner une légende. Oui. Et c'est le cas et je donne une légende à quoi d'autre avons-nous ? Nous avions le prénom, le nom, la ville et le pays. Super. Alors revenez ici, TXT City et il y aura un écran LCD et donnez-lui une légende aussi. Et TXT pays, donnez-lui une étiquette. Donc plus tard dans la vidéo, je vous expliquerai plus sur l'expérience utilisateur, mais je veux juste que vous y réfléchissiez, non ? Donc, lorsque vous concevez vos formes, pensez au voyage de la souris et au voyage des utilisations des yeux. Donc, dans le monde réel, vous devez certainement voir une étiquette à gauche d'une zone de texte. Mais lorsque vous pensez à la façon dont vous l'utilisez, digère ces informations, ils doivent d'abord regarder l'étiquette, puis passer à travers la zone de texte elle-même. Donc, en gardant cela à l'esprit, c'est en fait beaucoup mieux. Je vais juste les déplacer vers le bas pour mettre l'étiquette directement au-dessus de la zone de texte elle-même. Et cela le rend plus facile à utiliser. C' est digest parce qu'ils peuvent juste regarder vers le bas la forme plutôt que de regarder à gauche, puis à droite, puis à gauche, puis à droite, puis à gauche et puis à droite. Donc je vais juste faire ça pour tout ça. Apportez-en un peu plus. Je peux aussi agrandir la taille de chacune de ces zones de texte là un peu petit le moment, donc je pourrais juste faire un peu plus grand. Et maintenant, je peux faire en forme plus petite. Et maintenant, nous allons ajouter un bouton de commande et c'est pour déclencher le code qui s'exécute qui prend ce qui est sur le formulaire et remplit sur la feuille. Mettons ça là bas. Encore une fois. Je vais appeler ça C et B et aller sauver. Et je vais lui donner une légende aussi. Sûr. Je pourrais juste faire cela aussi la largeur des zones de texte l. Ramène ça en arrière. Bon, maintenant, nous avons notre plainte de conception de formulaire de base, et nous avons aussi des conventions de nommage pour nos contrôles. Et c'est très utile comme je vais vous le montrer tout de suite. Donc, je vais juste apporter cette fenêtre de propriétés un peu vers le bas. Donc maintenant, je vais aller dans le module de code de cet objet, qui est l'objet de formulaire. Donc, il a son propre module de code privé à l'intérieur. Donc, si je vais juste voir le code, et c'est le module de code à l'intérieur de ce formulaire. Donc, la chose suivante est comment assigner du code à l'événement étant le clic du bouton cite. Il y a donc deux façons de le faire. La première façon, je vais vous montrer que la façon ACS. Revenez donc à la conception du formulaire. Double-cliquez dessus. Et si je sélectionne ceci et double-clique sur l'objet, il générera automatiquement un sub, un Private Sub qui attrape l'événement du clic afin que nous puissions exécuter du code sur le clic de cela. Donc, comme vous pouvez le voir, il a le nom du bouton de commande et puis il a aussi l'événement après cela. Donc, l'autre moyen est d'utiliser ces zones déroulantes en haut. Donc, comme vous pouvez le voir, nous avons les contrôles qui sont sur ce formulaire, qui est à l'intérieur de l'objet uniforme. Et si je clique sur CMB enregistrer sur le côté gauche, il crée automatiquement le clic. Mais il y a aussi sur le côté droit, un tas d'autres événements que nous pouvons également attraper. Donc, si je double-clique dessus, s'ils font glisser, et cetera, et cetera, laissons-le avec Click. Donc, la première chose que nous voulons faire est de valider ce que l'utilisateur a entré. Je ne veux pas entrer de lignes vides dans notre feuille de calcul. C' est en fait très important lorsque vous construisez du code basé sur les informations saisies par l'utilisateur que vous validez ce que l'utilisateur a saisi. Donc, je vais faire cela est que je vais tout d'abord regarder les zones de texte et je vais mesurer la longueur de la valeur, qui est ce que l'utilisateur a entré, et m'assurer qu'ils ont effectivement entré du texte dans tous les champs. Donc, dans ce cas, tous les champs sur cet ancien obligatoire. Laisse-moi te montrer comment je vais faire ça. Donc, je vais d'abord créer un objet vide. Et ce type est juste un objet qui est un type d'objet générique. Donc, vous pouvez lui assigner à peu près n'importe quel objet. Et je vais utiliser cet objet dans une boucle for. Et nous avons déjà utilisé ces types de folates. Mais pour l'explication, ce que nous faisons, c'est que nous parcourons tous les contrôles sur le formulaire et chaque itération de la boucle, cela va affecter le contrôle actuel à cet objet afin que nous puissions interroger cet objet et ensuite effectuer une certaine logique dessus. Alors arrêtons ça pour boucle. Donc, la méthode des contrôles de l'objet de formulaire est une collection de contrôles. Donc, juste spécifier des contrôles sera une collection de contrôles. Mais vous pouvez également spécifier un contrôle individuel en le fournissant dans l'index ou le nom. Mais dans ce cas, je veux juste la collection de contrôles. Et nous allons parcourir chaque objet de cette collection de contrôles. Maintenant, à l'intérieur de cette collection de contrôles, il contiendra tous les contrôles de ce formulaire. Ainsi, il inclura les étiquettes, il inclura les zones de texte, il inclura le bouton et tout autre contrôle que vous avez ajouté au formulaire. Et c'est quand les conventions de nommage sont très utiles. Donc parce que nous avons nommé tout sur les zones de texte, TXT sur l'école, puis le nom du contrôle. Nous savons que si le nom du contrôle commence par TXT, C'est une zone de texte. Donc, je vais juste ajouter le suivant. Donc c'est notre boucle. Alors maintenant, je vais interroger les trois premiers caractères de chacun des contrôles. J' utilise gauche comme les trois premiers caractères. Donc maintenant, je peux interroger la longueur de la valeur IA, ce que l'utilisateur a entré dans ce champ. Donc, s'ils n'ont rien saisi, donc si la longueur de ce qu'ils ont entré dans le champ est 0. Et je veux aussi quitter le Sabah ne veut pas continuer si nous avons atteint ce point de validation. Et c'est une zone de texte qui ne contient pas d'information car tous les champs sont obligatoires. Donc, je vais juste faire un commentaire rapide. Elles sont vraies. Donc, je valide tous les champs. Maintenant, nous pouvons commencer le processus de résolution. Donc, penser à ce qui fera aura certainement besoin du classeur et de l'objet de feuille de calcul. Donc je vais juste les déclarer. Et je les mettrai. Et je ne vais les asseoir qu'après la validation parce que je ne veux pas seulement gaspiller des ressources. Et la feuille que nous recherchons est des données de coût. Donc maintenant, je veux entrer les informations sur la feuille de calcul. Je vais donc compter sur la méthode de comptage de lignes de plage utilisée de la feuille de calcul elle-même. Mais je vais assigner ça à une variable ou à un nombre. Donc j'utilise un long haut ici. Donc c'est un nombre entier sans décimal, mais il pourrait potentiellement être supérieur à 32,5 mille. Et c'est parce que dans ce cas, nous marchons au fil du temps, avons un utilisateur dans plus de 32,5 mille lignes. Et je ne veux pas le limiter à seulement 32,5 000. Donc, dans ce cas, je vais utiliser un long et je vais l'affecter en utilisant la méthode de comptage de lignes de plage utilisée. Et donc cette méthode, ils ont utilisé la méthode de plage, point ROS nombre de points va nous renvoyer la ligne actuelle qui contient le dernier élément d'information. Donc, dans ce cas, il va nous renvoyer un six parce que six est le dernier nombre de lignes de la plage utilisée. Mais parce que nous voulons ajouter les valeurs dans le prochain dur vers le bas, je vais juste ajouter une à cela quand une information de remplissage sur la feuille de calcul. Alors faisons ça maintenant. Nous l'avons fait de nombreuses fois auparavant. Donc x plus un. C' est donc le numéro de ligne et la colonne est un. Et je vais en fait juste copier et coller ces sujets sûrs et rencontré un tas de fois. Mais je vais juste ajuster les numéros de colonne. Et je vais aussi ajuster les contrôles eux-mêmes. Nom de famille. Ct. Donc, après avoir exécuté ces lignes, nous avons enregistré cet enregistrement dans la feuille de calcul. Et maintenant, je veux aussi réinitialiser le formulaire. Donc, je vais juste utiliser cette méthode, qui est une boucle complète. Et je vais juste passer par chacun des contrôles qui commencent par TXT et nous allons définir les valeurs à rien. Alors je vais me débarrasser de ça. Alors testons ça maintenant. Donc, je viens de mettre en place une fenêtre que nous pouvons voir la feuille de calcul ci-dessous afin que nous puissions dire qu'elle ajoute au fur et à mesure que nous allons. Et je ramènerai ça ici. Et je reprendrai le formulaire. Gros plan pour l'instant. Jouer. Ok, donc tout d'abord, testons les validations. Si je clique sur sauver, je devrais voir une boîte de message. Il dit s'il vous plaît entrer les anciennes zones de texte ou la valeur dans toutes les zones de texte. Et il a, on y va, j'ai orthographié la valeur correctement. Et entrons juste un par un. John. Oui. Et maintenant, nous devrions voir cette nouvelle rangée peuplée. Boom, on y va. Une nouvelle ligne est renseignée sur cette feuille de calcul. Et aussi, il a effacé toutes les valeurs. Et c'est pour que si nous frappons sur sauver plusieurs fois d'affilée, il ne se trouve pas dans plusieurs lignes du même enregistrement. Ok, fermez ça. Maintenant, en ramenant ça, revenez au code. Expliquons-le une fois de plus. Donc, dans une étape de validation, ce que nous faisons c'est que nous saisissons d'abord la liste complète des contrôles sur le formulaire. Et dans chaque itération de cette boucle for, nous assignons le contrôle actuel à cet objet vide. Et puis nous interrogeons cet objet pour voir s'il reste du nom de cet objet, ou si les trois premiers caractères du nom de l'objet sont TXT. Et puis si c'est le cas, nous testons alors la valeur, mais nous testons la longueur de la valeur. Et si cette valeur est 0, donc si la longueur de ce qui est entré dans cette zone de texte est 0, alors nous allons présenter à l'utilisateur une boîte de message et cela va dire, s'il vous plaît entrer un val mensonge. Cette valeur change dans toutes les zones de texte. Et puis une fois que nous avons terminé les étapes de validation avec assis le classeur et l'objet de feuille de calcul. Way saisissant le nombre de lignes de plage utilisé, qui sera, qui était six note sept. Et puis nous le remplissons sur la feuille elle-même. Et puis nous utilisons la même méthode de boucle foreach ici pour effacer les valeurs de cette zone de texte pour actualiser le formulaire et permettre à l'utilisateur d'entrer autre chose. Maintenant que nous avons les bases sous contrôle, commençons à parler de quelques conseils sur l'expérience utilisateur. Astuce numéro un, gardez les choses simples et les choses de Cape intelligentes. Éliminez tous les champs inutiles sur le formulaire. Utilisez la logique conditionnelle. Donc, si vous avez besoin d'un champ, mais que vous n'avez besoin que de ce champ dans certaines conditions, définissez leur état par défaut sur masqué et affichez-les par programme. Il est beaucoup mieux pour nous de mettre dans l'effort d'écrire du code pour gérer la complexité afin de garder les choses simples pour l'utilisateur. Astuce numéro deux, similaire à la pointe 1, utilisez autant que possible la logique conditionnelle pour garder les choses intelligentes. Utilisez les nombreux événements qui sont à votre disposition. Attrapez l'événement d'un utilisateur entrant quelque chose , puis faites quelque chose en fonction de ce qu'il a entré. Un bon exemple de cela que vous avez peut-être vu que dans le monde réel est sur certaines formes de capture d'adresse, les zones de liste déroulante d'état automatiquement renseignées en fonction du pays qui est sélectionné. Donc, par exemple, si je déclare que je suis en Australie sur le formulaire ne va pas me montrer états américains dans la zone de liste déroulante d'état. Astuce numéro trois. Il est préférable de multiétape votre capture de données sur plusieurs formulaires, puis de créer un formulaire énorme qui submerge l'utilisateur avec la quantité de données qu'il doit entrer. Bien que VBA se forme sur construit pour ce concept moderne, il est assez facile de l'implémenter d'une manière transparente. Par exemple, vous pouvez créer de nombreux écrans sur plusieurs formulaires, puis basculer entre les écrans par programme, donnant l'illusion d'un seul formulaire. Pour ce faire efficacement, vous devrez construire une routine de transition qui prend considération des choses comme la position de l'écran. Ce que je veux dire par ceci est de prendre les coordonnées x et y qui représentent l'endroit où le formulaire est affiché à l'écran. Et puis affectez cela à la forme deux afin que le formulaire suivant apparaisse exactement au même endroit que celui qui précède. Il fournit juste l'illusion que plusieurs formes sont en fait une forme qui change dynamiquement. pointe numéro quatre, comme indiqué dans l'exemple pratique, vous place une étiquette de champ au-dessus du champ non alignée à gauche ou à droite. Ce que cela fait, c'est qu'il simplifie la compréhension des usages de la forme. Il fournit également moins de points de fixation, i, j, les endroits que l'utilisateur a besoin de regarder sur le formulaire. Astuce numéro cinq, groupez les champs associés en groupes logiques. Si vous utilisez plus de six champs, regroupez les champs en entrée en sections logiques. De plus, les recherches suggèrent que les groupes logiques devraient être orientés en colonnes. Astuce numéro six, taille que vous aurez champs correctement. n'y a rien de pire que d'entrer du texte dans un champ trop petit pour montrer ce qu'ils entrent sur une ligne. Inversement, il semble vraiment bizarre d'entrer une petite quantité de texte dans un énorme manuels scolaires. Astuce numéro sept, assurez-vous que l'index de tabulation est correct pour tous les contrôles du formulaire. Cela permet aux utilisateurs de naviguer facilement dans le formulaire à l'aide de la touche Tab. Vous pouvez afficher et définir l'index de tabulation dans la fenêtre de propriétés de chaque contrôle. Pointe numéro huit. Bien qu'Excel et VBA ne rendent pas cela particulièrement facile, l'utilisation d'images ou d'icônes peut vous rendre beaucoup plus attrayant, de marque et professionnel. Mais tu dois vraiment faire attention ici. En raison de la plate-forme de formulaires VBA, l'utilisation d'images en remplacement d'autres contrôles peut avoir des résultats indésirables. Et c'est parce que les contrôles d'image ne sont littéralement que des objets statiques et qu'ils ne se comportent pas de la même manière que les autres contrôles. Dans une leçon avancée de lettre, je vais vous montrer comment utiliser correctement les images comme contrôles. Par exemple, comment obtenir un effet de survol, et comment obtenir une image à déprimer comme un contrôle de bouton et d'autres animations de contrôle. Donc, qui résume cette leçon et la première série intermédiaire de VBA débutant à Ninja. Je tiens à vous remercier d'avoir regardé mes leçons. S' il y a quelque chose de spécifique que vous aimeriez voir, veuillez laisser un commentaire. Aussi, s'il y a quelque chose que vous avez des problèmes avec Eva avec le cours ou votre propre projet VBA personnel, n' hésitez pas à me contacter. Je suis toujours heureux de vous aider. La prochaine série de vidéos sera également un contenu intermédiaire. Cependant, nous nous pencherons sur d'autres problèmes basés sur des scénarios que vous rencontrerez sans aucun doute dans le monde réel. Je m'appelle Andrew. J' espère que vous avez apprécié ce cours et je vous verrai dans la prochaine série de VBA, débutant à ninja.