Trouver une variable dans une plage de cellules - VB/VBA/VBS - Programmation
Marsh Posté le 19-05-2008 à 10:39:51
scaryfan a écrit : |
première étape, ta feuille a un nom :
affiche ses propriétés et regarde la propriété "name"; supposons que c'est "frmMaFenetre"
idem avec ta zone d'information, elle a un nom. supposons que c'est "cboCodeSociete"
donc pour récupérer la valeur dans la fenêtre VB c'est :
Code :
|
pour récupérer la valeur d'une plage (Plage = Range en anglais)
ça doit être un truc du genre :
Code :
|
scaryfan a écrit : |
tu écris une fonction VB dans l'éditeur, selectionne le mot, appuis sur F1, tu arrive dans l'aide concernant cette fonction, en navigant correctement dans l'aide, t'as toutes les fonctions
Marsh Posté le 19-05-2008 à 16:29:38
Xxxaaavvv a écrit :
|
Xxxaaavvv a écrit : |
Merci beaucoup !
Autre question : comment puis-je imposer un format à une zone de texte (TextBox) ? Je veux que les données numériques aient obligatoirement 2 décimales...
Marsh Posté le 19-05-2008 à 16:36:00
scaryfan a écrit : |
la zone de texte affiche une chaine de caractère.
il faut donc que tu lui passe une variable de type String déjà formatée
en gros :
utilise la fonction format
(écrit Format dans l'éditeur, selectionne la fonction, apuis sur F1, t'aura toutes les explications et surtout les exemples)
bref quelque chose comme :
Code :
|
pour t'aider dans les chaines de formatage
c'est les mêmes que dans la boite de dialogue format des cellules...
(en gros impose 2 décimales a une cellule, et regarde la chaine de formatage employée)
Marsh Posté le 19-05-2008 à 16:41:02
Xxxaaavvv a écrit :
|
Merci, j'essaie ça tout de suite...
Marsh Posté le 19-05-2008 à 16:51:22
scaryfan a écrit : |
Génial... ça marche...
Encore une - dernière - question....
J'ai plusieurs zones de texte dans une boite de dialogue...
Dans les premières, je saisie des nombres...
Dans la dernière, j'aimerais que la somme de ces cellules se calcule dynamiquement... ou plutôt, dès que j'entre une valeur dans une cellule et que je passe à la suivante, la dernière cellule se calcule automatiquement...
ça est possible ???
Merci encore pour votre aide...
Marsh Posté le 19-05-2008 à 17:00:18
scaryfan a écrit : |
tu parles de la fenêtre VB ?
alors première étape
il faut créer une fonction qui met a jour la dernière cellule :
Code :
|
ensuite pour chaque zone que tu peux mettre a jour
tu double click dessus tu arrive dans les évenements
pour l'évenement "change" tu appele la fonction ci-dessus
Code :
|
voila voila...
Marsh Posté le 19-05-2008 à 17:19:43
Xxxaaavvv a écrit :
|
Super !!!
J'enregistre mon fichier sur ma clef USB et j'essaie ça ce soir à la maison...
Merci beaucoup...
P.S. : faut que je m'achète un bouquin sur le VB...
Marsh Posté le 20-05-2008 à 14:54:23
Je me remets sur ma boîte de dialogue.
Ch'tite question !
Là, j'ai un gros souci... je capte que dalle...
Voici mon code pour une macro qui s'exécute quand je clique sur un bouton dans une feuille Excel :
Code :
|
C'est simple... je clique sur le bouton (DEBUT), la feuille MAFEUILLE est active et la cellule AJ8 doit être sélectionnée...STOP.
Mais là, j'ai un drôle de message :
Erreur 1004
La méthode Select de la classe RANGE a échoué
Quelqu'un peut-il me venir en aide ?
Marsh Posté le 20-05-2008 à 15:38:48
aille, c'est absolument pas génial de travailler avec les selects...
ou alors faut que ta fenêtre VB "perde le focus" AVANT de tenter de selectionner ta plage de cellule....
EDIT : pourtant j'ai pas de problème chez moi avec ton bout de code ... >_<
Marsh Posté le 20-05-2008 à 15:45:24
Xxxaaavvv a écrit : aille, c'est absolument pas génial de travailler avec les selects... |
Le pire, c'est que j'essaie de contourner le problème avec un autre code.
Ma feuille MAFEUILLE est la deuxième du classeur... alors j'essaie ce code :
Code :
|
et la macro me donne le même message d'erreur.... ... alors qu'il n'y a pas de RANGE dans le code...
Au fait, qu'entends-tu par "perdre le focus" ???
Marsh Posté le 20-05-2008 à 15:47:15
si si y a un range
Worksheets(2).Cells(8, 36)
renvois un objet de type range
et ta méthode select a échouée...
tu n'as qu'un seul classeur d'ouvert ? (t'es pas dans le cas de plusieurs classeur ?)
Marsh Posté le 20-05-2008 à 15:49:44
autre question
la selection de la feuille ne plante pas ?
(Sheets("MAFEUILLE" ).Select)
Marsh Posté le 20-05-2008 à 15:51:51
Xxxaaavvv a écrit : si si y a un range |
OK pour l'explication sur le RANGE...
Et effectivement, j'ai 2 classeurs ouverts... les - presque - 2 mêmes classeurs... l'un se nomme CLASSEUR.XLS et le deuxième CLASSEUR_ancien.XLS.
C'est dans le premier que ça bugge et le deuxième est une ancienne version... dans lequel il y a la ligne Range("AJ8" ).Select ... mais ça ne bugge pas...
Je capte plus rien...
Marsh Posté le 20-05-2008 à 15:56:43
Xxxaaavvv a écrit : autre question |
Non ça marche...
Si je mets ActiveCell.Offset(0, 80).Select, la sélection se déplace bien de 80 colonnes...
Si j'essaie ce code :
Code :
|
idem... message d'erreur 1004
Marsh Posté le 20-05-2008 à 16:04:33
ok alors essaye plutot un truc du genre :
Code :
|
Marsh Posté le 20-05-2008 à 16:09:32
Xxxaaavvv a écrit : ok alors essaye plutot un truc du genre :
|
ça marche ...
ça bugge plus...
Bizarre... non ?
Marsh Posté le 20-05-2008 à 16:10:55
en fait
Code :
|
est équivalent à
Code :
|
alors que ton code était plutot équivalent à
Code :
|
Marsh Posté le 20-05-2008 à 16:13:27
Xxxaaavvv a écrit : en fait
|
Si c'est équivalent, pourquoi l'un fonctionne et pas l'autre ???
Marsh Posté le 20-05-2008 à 16:18:26
Code :
|
ne marche pas non plus ?
bah la désolé, je sèche
Marsh Posté le 20-05-2008 à 16:20:10
Xxxaaavvv a écrit :
|
Tant pis !
On a contourné le problème quand même...
Merci de ton aide !!!
Marsh Posté le 21-05-2008 à 07:06:31
Xxxaaavvv a écrit :
|
Salut Xxxaaavvv !
J'ai essayé ce que tu me proposes plus haut... ça fonctionne bien...
Dans ma boîte de dialogue, lorsque je modifie nomDeMaZone1, nomDeMaZoneTotal se modifie automatiquement (somme d'autres variable nomDeMaZone1, nomDeMaZone2...).
Le problème c'est que ces variables se concatenent...
Exemple :
nomDeMaZone1 = 1.25
nomDeMaZone2 = 2.75
la macro donne 1.252.75 et non 4.00
... ???
C'est un problème de formatage de variables ?
Marsh Posté le 21-05-2008 à 09:38:58
de conversion de donnée avant de faire l'opération
au moment ou tu additionnes :
nomDeMaZoneTotal.Text = nomDeMaZone1.Text + nomDeMaZone2.Text + (...)
bah faut plutot faire :
nomDeMaZoneTotal.Text = cdbl(nomDeMaZone1.Text) + cdbl(nomDeMaZone2.Text) + cdbl(...)
cdbl converti la chaine de caractère en nombre à virgule
et l'addition se fait correctement.
(une addition de chaine de caractère = concaténation )
Marsh Posté le 21-05-2008 à 09:42:15
Xxxaaavvv a écrit : de conversion de donnée avant de faire l'opération |
Merci beaucoup...
Je rame pas mal en fait...
Tu aurais éventuellement une référence de livre(s) ou manuel(s) à me recommander pour bien apprendre le VB ?
Marsh Posté le 21-05-2008 à 09:46:35
heu
perso je suis autodidacte, et je me suis basé sur la docs de microsoft et le web
désolé, j'ai pas de bouquin à conseiller.
C'est en ramant qu'on se muscle !
Marsh Posté le 21-05-2008 à 10:00:14
Xxxaaavvv a écrit : heu |
Effectivement... c'est en pratiquant qu'on apprend...
Perso, j'aime bien avoir un manuel pour au moins connaitre les fonctions, les codes...
Car dans la soluce que tu me donnes pour faire la somme (cdbl), ce serait plus simple que j'aie un manuel...
Car quand je fais une recherche sur le net, on arrive pas de suite sur la solution...
Cela dit, ça se trouve peut-être sur le net ce genre de liste.
Marsh Posté le 21-05-2008 à 10:04:29
Xxxaaavvv a écrit : de conversion de donnée avant de faire l'opération |
??? j'ai un message d'erreur... incomptabilité de type...
Marsh Posté le 21-05-2008 à 10:28:46
aille je viens de penser que tu avais peut etre des zones vides...
je te conseil de faire une fonction de conversion comme celle-ci :
Code :
|
et de l'utiliser a la place de Cdbl
Marsh Posté le 21-05-2008 à 10:51:09
Xxxaaavvv a écrit : aille je viens de penser que tu avais peut etre des zones vides...
|
???
J'insère ce code ??? Tout simplement ?
???
Marsh Posté le 21-05-2008 à 10:57:39
oui, c'est une fonction que je t'ai écrite qui remplace le "cdbl"
Marsh Posté le 21-05-2008 à 11:03:18
Donc, en lieu et place de la ligne :
nomDeMaZoneTotal.Text = cdbl(nomDeMaZone1.Text) + cdbl(nomDeMaZone2.Text) + cdbl(...)
Je mets :
nomDeMaZoneTotal.Text = nomDeMaZone1.Text + nomDeMaZone2.Text + ...
Et ta fonction de conversion à la fin de mon code...
Marsh Posté le 21-05-2008 à 11:05:35
tu met bien la fonction deconversion ala fin de ton code ...
par contre
Code :
|
deviens :
Code :
|
Marsh Posté le 21-05-2008 à 11:21:49
Xxxaaavvv a écrit : tu met bien la fonction deconversion ala fin de ton code ...
|
OK j'essaie...
Marsh Posté le 21-05-2008 à 11:25:35
Xxxaaavvv a écrit : tu met bien la fonction deconversion ala fin de ton code ...
|
ça marche !!!
pour ravoir un format avec deux décimales, je mets :
nomDeMaZoneTotal.Text = format(dblConversion(nomDeMaZone1.Text) + dblConversion(nomDeMaZone2.Text) + dblConversion(...) ; "##,##0.00" )
???
Marsh Posté le 21-05-2008 à 11:38:36
bah essaye tu verra bien
sauf que c'est pas un ";" mais un ","
Citation : nomDeMaZoneTotal.Text = format(dblConversion(nomDeMaZone1.Text) + dblConversion(nomDeMaZone2.Text) + dblConversion(...) , "##,##0.00" ) |
Marsh Posté le 21-05-2008 à 11:51:55
Le fait de rajouter "Format" donne bien un résultat avec 2 décimales même si les données additionnées sont entières... c'est ce que je veux...
Par contre, nouvel obstable...
J'ai 40 variables à additionner et VB me dit "Erreur de compilation ; Attendu : nom ligne ou étiquette ou instruction ou fin d'instruction"
A priori, il y a trop de variables ...
J'ai donc créé deux variables supplémentaires qui font la somme d'une première partie des anciennes variables et l'autre l'autre moitié...
ET ça marche...
C'est du bricolage...
Marsh Posté le 18-05-2008 à 17:00:46
Salut à tous !
J'ai créé ma première boîte sous VB dans laquelle je renseigne pas mal d'informations.
La première contient un code société (liste déroulante reprise du tableau Excel) et autres des informations relatives à la société concernée.
Dans la feuille Excel, j'ai la plage de cellules qui contient la liste des codes sociétés.
Comment retrouver le code société renseigné dans la boîte dans la feuille ? Et ensuite, les informations se reporteront dans les cellules de la ligne correspondantes ?
Et une question d'ordre général... ... existe-t-il un lexique exhaustif des fonctions VB ?
Merci d'avance
---------------
iMac 4Ghz (fin 2015) RAM 16Go SSD 256Go SSD 2To