Apprendre la programmation en VBA pour EXCEL par la pratique - Deuxième partie,
Un tutoriel de Laurent OTT

Le , par laurent_ott

21PARTAGES

7  0 
Bonjour à tous,

j'ai le plaisir de vous présenter le tome 2 de ce mémento qui aborde la programmation en mode graphique avec un cas de programmation d'un jeu d'arcade en VBA et Microsoft Excel.


Dans le tome 1, nous avons étudié les bases de la programmation d'EXCEL en VBA. Ce tome 2 est consacré à une partie plus ludique : la programmation en mode graphique.

Mais pourquoi programmer en mode graphique ? Imaginez que vous puissiez maîtriser chacun des pixels de votre écran, afficher des images, gérer des animations… Vous devinez toute la richesse qu'une programmation en mode graphique peut vous apporter. Certes, pas dans une application ordinaire, mais pour un jeu d'arcade, c'est l'outil idéal qui vous manquait pour laisser libre cours à votre imagination.

Bonne lecture et n'hésitez pas à apporter vos commentaires

Retrouvez les meilleurs cours et tutoriels pour apprendre Microsoft Excel

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de joe.levrai
Expert éminent https://www.developpez.com
Le 21/10/2016 à 17:47
J'en ai retrouvé une !

sujet complet : http://www.developpez.net/forums/d15...ode-sharpname/

l'exemple : http://www.developpez.net/forums/d15...e/#post8597076
3  0 
Avatar de laurent_ott
Rédacteur https://www.developpez.com
Le 03/10/2018 à 15:59
Citation Envoyé par maliano20 Voir le message

Pourquoi vous avez préféré le IF au SELECT CASE? J'ai lu quelque part sur ce site que le second est plus rapide.
Par habitude de programmation, tout simplement (et tout bêtement) !
Je viens de tester et effectivement, SELECT CASE semble bien plus rapide que IF dans une boucle répétée plusieurs milliers de fois. Mais la différence est infime sur un appel ponctuel. En tout cas merci pour cette remarque, j'en tiendrai compte dans mes prochains programmes.

Citation Envoyé par maliano20 Voir le message

Pourquoi avoir utiliser le / en lieu et place du \? Étant donné qu'on a besoin de la partie entière de la division, le second n'est il pas plus rapide?
D'après mes tests, le second n'est pas plus rapide. Ici, comme la variable "Milieu" est déclarée Entier Long, la valeur calculée renvoyée sera toujours un entier (donc la partie entière), et donc pas besoin d'utiliser \ dans ce cas.
2  0 
Avatar de eriiic
Membre expert https://www.developpez.com
Le 04/10/2018 à 11:27
Bonjour,

Milieu = (Début + Fin) / 2
Pourquoi avoir utiliser le / en lieu et place du \? Étant donné qu'on a besoin de la partie entière de la division, le second n'est il pas plus rapide?
Attention que ces 2 opérateurs ne sont pas équivalents et substituables, les résultats peuvent être différents.
Avec Début = 1 et Fin = 6, soit une somme impaire :
(Début + Fin) / 2 = 3.5, qui sera arrondi à 4 lors de la conversion si Milieu est typé Entier
(Début + Fin) \ 2 = 3, résultat de la division entière, et restera à 3.
Il faut penser à en tenir compte.
eric
2  0 
Avatar de digilisyl
Candidat au Club https://www.developpez.com
Le 04/10/2016 à 12:50
Bonjour
Je débute également avec VBA, et suis pas à pas ce tuto très intéressant

En fait, le problème soulevé par Bernardassyst vient des lignes 25 et 26 :
Il faut renommer les variables NbBonbon et NbScoubidou (que l'on avait créées précédemment comme argument facultatif pour modifier la fonction CompterPoche) en : MesBonbon et MesScoubidou, qui elles, sont bien déclarées.
Cela donne :

Code : Sélectionner tout
1
2
3
4
5
6
7
8
While Cells(Ligne, MaColonne) <> ""  ' Tant que cellule(y,x) n'est pas vide.
    
    CompterPoche = CompterPoche + 1 ' Incrémente le nombre d'éléments trouvés.
    If Cells(Ligne, MaColonne) = "x" Then MesBonbon = MesBonbon + 1       ' Les bonbons.
    If Cells(Ligne, MaColonne) = "s" Then MesScoubidou = MesScoubidou + 1 ' Les scoubidous.
    Ligne = Ligne + 1 ' Passe à la ligne suivante.
    
Wend
Et là, ça refonctionne !

(sauf erreur ou omission... )
1  0 
Avatar de joe.levrai
Expert éminent https://www.developpez.com
Le 21/10/2016 à 16:04
Bonjour,

bravo pour ce travail de pédagogie et concentration de "l'essentiel pour débuter efficacement".

je n'ai encore que partiellement parcouru le Tome 1 (et du coup pas encore lu le Tome 2 non plus)

mais un point n'est pas en accord avec ma façon de voir l'apprentisation de programmation VBA

dans le chapitre II Prérequis, il est écrit

Un objet peut avoir une propriété par défaut. Par exemple la propriété Value pour l'objet Range. Dans ce cas il n'est pas nécessaire de saisir cette propriété. Et Range("A1" = 15 équivaut à Range("A1".Value = 15
Cela me semble dangereux, sur un tutoriel dont la vocation principale est tournée vers les débutants, de leur donner cette pratique, à la fois "non conforme aux règles de l'art", mais surtout laissant à VBA la libre interprétation de la bonne propriété en fonction du contexte.
en effet, débat déjà abordé dans plusieurs sujets de la section VBA Excel : dans certaines situation, c'est le propriété .Text qui sera prise par défaut. Et là clairement, on est plus sur le même type de variable (.Text = ce qui est affiché dans la cellule, .Value = ce qui est affiché dans la barre de formule pour simplifier grandement)
De quoi rendre chauve un débutant qui ne va pas réussir à débogger

J'avais laissé quelques exemples sur le forum, mais je ne retrouve plus les messages
1  0 
Avatar de Marc-L
Expert éminent sénior https://www.developpez.com
Le 21/10/2016 à 16:16
Bonjour !

Je confirme : Range n'a pas de propriété par défaut !

Souvent VBA sélectionne Value mais selon le contexte il arrive parfois à la propriété Text d'être choisie,
j'en connais encore se les mordant (au choix !) en ayant buté plusieurs jours sans spécifier de propriété !

_________________________________________________________________________________________________________
Je suis Paris, Nice, Bruxelles, Charlie, …
1  0 
Avatar de Marc-L
Expert éminent sénior https://www.developpez.com
Le 21/10/2016 à 17:07

Idem pour moi … Si le constat de la propriété Text à la place de Value est rare
- on s'en aperçoit qu'en cas de souci - j'ai quand même rencontré ce cas plusieurs fois !
1  0 
Avatar de laurent_ott
Rédacteur https://www.developpez.com
Le 13/10/2017 à 11:18
Bonjour.
Je te conseille d'ouvrir une discussion sur le forum EXCEL. Tu pourras joindre tes fichiers au format xlsx (pas de xlsm) et on pourra voir plus facilement ce qui bloque.
1  0 
Avatar de Patrice740
Membre émérite https://www.developpez.com
Le 18/01/2018 à 18:05
Citation Envoyé par xingjing910 Voir le message
Bonjour Laurent,

Je suis une débutante dans EXCEL VBA et je suis en train de me former avec tes cours ==> Les cours sont supers bien, je te remercie de les partager

Je suis actuellement sur le thème tri des donnée. Dans TOME 1 P29/100, tu as parlé de la fonction ALEA.ENTRE.BORNES(0;10000) ==> Je n'arrive pas à trouver l'écriture correcte ...

==> Donc je ne sais pas l'utiliser pour remplir 10 000 cellules dans une colonne ...

Merci merci beaucoup
XJ
Il ne s'agit pas de VBA mais d'une formule à placer en A1 d'une feuille de calcul et à tirer jusqu'en A10000 :
=ALEA.ENTRE.BORNES(0;10000)

Edit : avec les raccourcis clavier, c'est plus simple de la placer en A10000 et de la copier jusqu'en A1
1  0 
Avatar de laurent_ott
Rédacteur https://www.developpez.com
Le 25/01/2018 à 18:27
Bonjour.
Tu peux ouvrir une discussion sur le forum EXCEL : https://www.developpez.net/forums/f6...ros-vba-excel/ en cliquant sur le bouton "ajouter une discussion" après t'être identifié(e).
Ou me contacter en messagerie privée : en cliquant sur mon nom. D'ailleurs tu constateras dans ton "tableau de bord", rubrique "boîte de réception", que j'avais répondu à ton précédent message.
Et tu y trouveras la réponse à cette nouvelle question.
A Bientôt.
1  0 
Responsables bénévoles de la rubrique Excel : Pierre Fauconnier - Arkham46 -

Partenaire : Hébergement Web