Le VBA pour ma Pokébanque
Bonjour,
Je souhaite pouvoir faire fonctionner une sorte de base de données avec des images de Pokémon, dans le but de me pratiquer pour de plus grands projets plus tard. Cependant, même si j'ai compris la moitié de ce qui est indiqué dans les cours sur le VBA sur ce site, et me renseigne sur trois sources différentes au cas où une notion manquerait dans une des sources, j'ai toujours des problèmes. Cependant, vu que je souhaite progresser en VBA, c'est seulement dans un soucis d'apprentissage en autodidacte que je pose des questions sur ce topic et sur ce forum, en vue de m'améliorer. J'ai un gros projet de bases de données, donc je commence avec une base de données de Pokémon avant de toucher le coeur de mon projet bien-aimé...
Voici ce que je souhaite faire :
Cette image présente en gros à quoi correspond mon projet, et j'avoue y avoir travaillé pendant longtemps. J'ai même entré des données une par une durant 2-3 heures car une base de données comme ce que je souhaite faire n'existe pas, et je voudrais contribuer à la communauté des joueurs avec une base de données préférables multilangues, avec des boutons, une interface en bas similaire à des cristaux décoratifs, etc. J'ai beaucoup de projets pour cette dernière, mais j'ai surtout de multiples problèmes à la faire.
Comme vous le voyez sur la même image, il me manque les images, et c'est justement elles que je souhaite ajouter, j'ai posté sur PC Astuces pour avoir des renseignements et bien qu'ils veuillent bien m'aider, il serait un peu impossible à faire ce genre de choses car cela demande des connaissances très poussées, que je n'ai pas pour le moment seulement. Je tiens à rajouter que l'autre projet étant plus complexe que la Pokébanque, sur
, je suis dans l'obligation de corriger un problème majeur dans mon projet de Pokébanque, surtout en raison de l'interface non « user-friendly » pour les joueurs. Tous ces projets sont en cours, de là l'importance de savoir coder en VBA, mais j'aurais tout de même besoin d'un petit coup de pouce à la rigueur.
Merci de me donner un coup de main.
La v... Qu'est ce que tu fumes ? Ça à l'air d'un sacré m... dans les boyaux de ta tête !
Regarde mon classeur démo sur l'autre fil.
A+
Excuse-moi... cela arrive de se tromper, et cela arrive à tout le monde. Pas la peine de t'exciter...
Oui j'ai eu quelques soucis, partons sur de bonnes bases.
Pardon pour l'égarement.
J'm'excite pas du tout : A mon âge, c'est plus guère possible !
C'était juste une constatation ! Pas de souci...
J'm'excite pas du tout : A mon âge, c'est plus guère possible !
Mais si, mais si !
J'avoue que j'ai vu gros avec le projet, mais je peux y passer l'après-midi, car cela est super enrichissant.
J'ai presque réussi à faire fonctionner la macro, mais malheureusement, je ne suis pas ou peu capable d'écrire sur PC Astuce, l'autre site sur lequel est présent l'autre sur lequel nous discutons, galopin01 et moi. ^^
Laisse tomber PCA, si je t'ai demandé de venir ici c'est parce que c'est plus pratique.
Ça veux dire quoi j'ai presque réussi ? Une macro ça fonctionne... ou pas. Mais presque ??
Si ça fonctionne pas c'est que tu n'as pas copié collé tous les fichiers dans ton répertoire de travail Excel : La plupart du temps les .zip ne fonctionnent pas dans leur répertoire temporaire de dézippage. Il faut transférer tous les fichier dans ta zone de travail habituel.
A+
galopin01 a écrit :Laisse tomber PCA, si je t'ai demandé de venir ici c'est parce que c'est plus pratique.
Ça veux dire quoi j'ai presque réussi ? Une macro ça fonctionne... ou pas. Mais presque ??
Si ça fonctionne pas c'est que tu n'as pas copié collé tous les fichiers dans ton répertoire de travail Excel : La plupart du temps les .zip ne fonctionnent pas dans leur répertoire temporaire de dézippage. Il faut transférer tous les fichier dans ta zone de travail habituel.
A+
Oui, cela ne fonctionne pas tout à fait, car je comprends un peu (mal) les macros. ^^ Je réessaie (encore une fois
Personnellement c'est la dernière partie de la macro que je comprends moins bien, pour ainsi dire... c'est selon moi la plus importante, mais c'est celle qui me cause le plus d'ennuis.
Hum... Là, je ne comprend pas. Il faut être plus précis car je n'ai pas de boule de cristal...
D'abord il n'y a aucun changement à faire : Quand je fourni une démo en principe ça marche ! (sauf si j'ai un peu forcé sur l'apéro...)
Si ça ne marche pas tu as le droit de déposer une réclamation, mais pas de changer quoi que ce soit, sinon c'est à peu près sûr que ça marchera encore moins bien.
Donc ce zip une fois dézippé, tu dois voir 4 fichiers :
Tu copies ces 4 fichiers dans ton répertoire habituel de travail Excel
Ensuite tu ouvres le fichier testGif.xlsm, puis tu appuies sur le bouton.
Normalement les 3 images viennent se charger dans le classeur.
Ça marche ou pas ?
Bon : Je part du principe que maintenant ça marche !
Si on passait maintenant à ce que tu comprend pas.
Dans une macro quand on numérote les lignes :
la première et la dernière ne comptent pas
Les lignes de déclarations (Dim ne comptent pas non plus.
Il reste 7 lignes de macro proprement dite :
La dernière partie de la macro c'est vague...
Je suppose que c'est le placement qui te pose problème. (Ligne 5 et 6)
Ligne 5 : j'ai procédé expérimentalement jusqu'à obtenir un résultat satisfaisant... 200 pour l'alignement à gauche me semblait satisfaisant !
Ligne 6 : C'est plus compliqué. Comme je ne voulais pas que mes 3 images soient les unes sur les autre j'ai du trouver une équation qui espace les images en hauteur en fonction de la variable image i
Cette équation, là encore de manière expérimentale me donne un résultat à peu près satisfaisant : 1, 41, 81
Si tu remplaces i par 1 tu obtiens 1
Si tu remplaces i par 2 tu obtiens 41
Si tu remplaces i par 3 tu obtiens 81
Bon mais là je ne peux pas t'apprendre à poser une équation en fonction de tes vœux !
C'est à toi de jouer avec tes variables en fonction de la disposition souhaité...
Au mieux ce que je peux faire plus ou moins en fonction de la disposition souhaitée c'est te calculer une autre équation !
C'est mieux comme ça ?
J'avoue tu es vite en affaires. Tu es en effet très rapide à répondre.
Le testgif avait en effet très bien fonctionné.
Je vais éditer ce message pour la suite.
Edit : Oui, en effet, les équations, ce n'est pas mon fort, et c'était justement cette section qui ne fonctionnait pas. Cependant, je crois que les efforts commencent à porter fruit.
Je vais étudier ta macro, avec les connaissances présentes sur ce même forum.
galopin01 a écrit :J'm'excite pas du tout : A mon âge, c'est plus guère possible !
C'est pourtant pas ce qu'elle dit !!
Marie-France04 a écrit :J'avoue tu es vite en affaires.
Bon continuez comme cela car les échanges sont hilarants !!
J'espère que nos échanges sont perçus positivement, plutôt que négativement. Sinon, ce serait un entracte navrant. Je suis québécoise, mes paroles peuvent être perçues différemment en France... enfin je crois.
Edit : Bien soyons sérieux.
Je comprends tout à fait qu'il y a une équation, et je comprends assez bien la formule, même si j'ai peur de faire une erreur si je la modifie.
Mais les lignes 2 et 3 sont non comprises, car en plus, ce qui est regrettable dans mon cas, c'est que ce sont des connaissances de base qui n'ont pas encore été acquises. Je devrais en principe savoir c'est quoi, mais non, en fait, après avoir regardé les formules dans tous les sens.
Le reste est compris, sauf cela. Le test gif a fonctionné et tout. Il faut juste que j'applique ces connaissances sur mon fichier Excel... en comprenant juste avant la ligne 2 et la ligne 3.
Hum... Avec ces bases là, c'est vraiment MINIMUM !
Bon, t'as une bonne provision de Doliprane ?
Quelques bases de la programmation VBA :
Une macro s'exécute ligne après ligne :
La première et la dernière ne comptent pas. Ce sont les "bornes" de la macro.
La première ligne indique le nom de la macro (et éventuellement parfois des paramètres...)
La deuxième ligne (si elle commence par "Dim" ne compte pas non plus... Ainsi que toutes les lignes qui commencent par Dim)
Les lignes qui commencent par le caractère apostrophe ( 'blabla ) ne comptent pas non plus :
Ce sont des commentaires. (en vert dans les exemples)
Enfin la dernière ligne ne fait rien du tout : elle indique simplement à l'ordinateur que cette tâche est terminée. Il peut se livrer à d'autres tâches.
Sub Test()
'Cette macro ne fait rien du tout !
End SubSub test1()
'Cette macro envoie un message
MsgBox "Bonjour !"
End subSub test2()
'Cette macro déclare une variable :
Dim blabla 'cette variable est en quelque sorte un container
'Cette macro envoie un message vide... car le container est vide
MsgBox blabla
'pour remplir le container il faut affecter une valeur à la variable
blabla = "bonjour"
'maintenant la variable contient une chaine de caractères
'la macro envoie un nouveau Message
MsgBox blabla
End subUne macro ou il faudrait écrire à chaque ligne ce qu'il faut faire ne présenterait que peu d'intérêt :
Sub test3()
Range("A1")= 1
Range("A2")= 2
Range("A3")= 3
'surtout si on veut remplir 10 000 lignes...
End SubAussi dans leur grande sagesse les programmeurs ont-ils prévu 3 instructions fondamentales
Les instructions conditionnelles :
If... Then... End If
Select Case... End Select
Les boucles :
For... Next
Ces 3 instructions ont de nombreuses déclinaisons.
Sub test4()
'Si la cellule est vide, alors on écrit
If Range("A1")= "" Then Range("A1")= 1
If Range("A2")= "" Then Range("A2")= 2
If Range("A3")= "" Then Range("A3")= 3
'C'est toujours le même problème si on veut remplir 3200 lignes...
End SubC'est là qu'intervient l'instruction For... Next
L'instruction boucle "x" fois sur elle même
Sub test5()
'on déclare une variable compteur
Dim cpt
For cpt = 1 to 3200
'Si la cellule est vide, alors on écrit
If Range("A" & cpt)= "" Then Range("A" & cpt)= cpt
'A chaque fois que la macro arrive à Next cpt augmente de 1...
Next
End SubC'est une manière élégante et rapide de faire de nombreuses fois la même chose...
Cette autre macro fait exactement la même chose :
Sub test6()
Dim cpt
For cpt = 1 to 3200
'Si la cellule est vide, alors on écrit
If Cells(cpt,1) = "" Then Cells(cpt,1) = cpt
'Cells(cpt,1) c'est la même chose que Range("A" & cpt) :
'on écrit comme on aime !
Next
End SubPour revenir à nos mouton : Euh... à ma macro initiale !
Dans cette macro les variables sont suivies d'un caractère &, $, %... qui les caractérise
A défaut de ces caractères dans le Dim la variable peut contenir n'importe quoi...
img ne comporte aucun caractère... En fait elle ne contiendra pas une valeur, elle identifiera un objet (cadre image)
Dim i& est l'équivalent de Dim i As Long
Dim fich$ est l'équivalent de Dim fich as String
Dim k% est l'équivalent de Dim k as Integer
On écrit comme on aime : Moi, moins j'écris... moins je me fatigue !
J'ai donc créé (Dim) une variable compteur qui s'appelle "i"
une variable "fich"
Sub galopin2()
Dim i, Fich
For i = 1 to 3
'Dans cette macro la variable i va donc prendre successivement la valeur 1 à 3
Fich =Cells(cpt,1)
'La variable fich à lu le contenu de Cells(cpt,1)
MsgBox Fich
'Dans le fichier d'origine j'utilise cette variable pour identifier l'image à coller dans le cadre image créé.
End SubHum ! C'est plus clair ?
Parfaitement.
Je pense que ce soit suffisant pour comprendre.
Je pense que je vais laisser la conversation pour le moment, et avancer dans ma tâche. Merci de ton (énorme) patience.
Si j'ai d'autres questions, je sais où te trouver. Mais pour le moment, c'est suffisant pour faire un bout de chemin.
À bientôt...
Edit : Je vais revenir ici quand je m'aurais vraiment formée cette fois-ci au macros sur le web.
Merci encore pour ton énorme patience. J'aime mieux me distancer plutôt que paraître être un troll, ce que je ne suis pas.
Donc à bientôt... (ou pas ?)