Vba test sur une valeur numérique
Résolu
Bonjour,
Je voudrais afficher dans une cellule une valeur en fonction d'une autre cellule, mais je suis débutant et je n'ai pas la syntaxe en vba.
Ce que je souhaiterais écrire:
Range("F14").Select ( si j'ai bien compris cela me permet de travailler dans cette cellule)
If ("D14") < 19999 Then ActiveCell.FormulaR1C1 = 10000
If 20000 < ("D14") < 29999 Then ActiveCell.FormulaR1C1 = 20000
...
Ce que je souhaiterais c'est afficher 10000 si la valeur dans la cellule D14 est entre 10000 et 19999, 20000 si compris entre 20000 et 29999....
Ca ne doit pas être bien compliqué mais là je vois pas...
Merci.
Je travaille sous Excel 2003
Je voudrais afficher dans une cellule une valeur en fonction d'une autre cellule, mais je suis débutant et je n'ai pas la syntaxe en vba.
Ce que je souhaiterais écrire:
Range("F14").Select ( si j'ai bien compris cela me permet de travailler dans cette cellule)
If ("D14") < 19999 Then ActiveCell.FormulaR1C1 = 10000
If 20000 < ("D14") < 29999 Then ActiveCell.FormulaR1C1 = 20000
...
Ce que je souhaiterais c'est afficher 10000 si la valeur dans la cellule D14 est entre 10000 et 19999, 20000 si compris entre 20000 et 29999....
Ca ne doit pas être bien compliqué mais là je vois pas...
Merci.
Je travaille sous Excel 2003
Configuration: Windows XP Opera 9.51
34 réponses
Résumé de la discussion
Un débutant cherche à afficher dans une cellule une valeur dépendant d'une autre, en VBA pour Excel 2003, et décrit règle : D14 entre 10000 et 19999 donne 10000, entre 20000 et 29999 donne 20000. Plusieurs réponses envisagent d’afficher les résultats directement sur la feuille plutôt que dans une ListBox et évoquent des possibilités plus larges, comme la répartition des données d'une ligne et la gestion d'un tableau. D'autres échanges signalent des contraintes pratiques — fusion des cellules, réinitialisation entre recherches et coexistence avec une base de données ou des fiches client — qui compliquent la mise en œuvre sans modifier l'existant.
-
polux ?
-
Bonjour Polux,
C'est bien gentil de ta part d'aider les gens dans le besoin. J'ai vu que tu répondais souvent aux questions posées. Merci de la part de tous. Quand on connait pas, le language vba est un vrai mystère...
Je progresse bien mais j'ai encore des choses à faire et pas des moindres.
Est il possible que je t'envoie mon fichier pour que tu le réordonne un petit peu. Principalement pour la déclaration des variables, il y en a partout et je ne sais pas si il y a des déclarations inutiles ou non.
Ce qu'il me reste à faire:
- modifier la recherche pour afficher les lignes correspondant à TOUTES les maintenances qui ont été réalisées en km et en durée (au lieu de seulement la dernière en km et dernière en durée) d'ou le tableau réalisé dans l'onglet "garantie"
-créer un deuxième mot clef (celui du haut, aucune macro affectée pour l'instant) qui fera sa recherche uniquement pour le mot clef pour les titres en gras ou en rouge (chiffres 1,2,3 -voir 4, je ne sais pas trop encore- colonne Z). Si juste 1er mot clef afficher les lignes correpondant au paragraphe (si mot clef =1 colonne Z afficher jusqu'au prochain 1..., pareil pour 2, 3 ou 4. Si présence d'un 2e mot clef afficher les lignes désirées du paragraphe désiré......................................
Je sais c'est très torturé et c'est pour ça que je reviens vers toi chef VBA.
Merci encore.
Aide moi si tu peux pour la 1e manip, la 2e je pense qu'il faut que j'y réfléchisse encore.
"Pour que ce soit clair en vba, faut deja que ca soit clair dans ta tête..."
https://www.cjoint.com/?jtmnwjKlJh -
Bonjour,
Oui, ça devient compliqué ... je pense qu'il faut passer par des tableaux : TabKms() qui va contenir les kms etc ...
Pour tester si une variable, tu as la fonction IsNumeric() :
Public sub test() Dim str As Variant str = "coucou ma maman 123" 'str = "123456" If controleNumeric(str) = False Then MsgBox str & " n'est pas numérique.",VBExclamation,"Message" Else MsgBox str & " est numérique.",VBExclamation,"Message" End If End Sub Public Function controleNumeric(byval str as Variant) as Boolean If Not IsNumeric(str) Then controleNumeric = False Else controleNumeric = True End If End Function
Fait un test en passant les deux "str" du Sub test
Sinon, il faudrait que tu me passes ton fichier par cjoint.com, pour que je regarde de plus près.
;o) -
Bonjour,
Je reviens sur le sujet parce que j'ai une modification à faire dans mon programme. (une grosse modif...)
Je souhaite toujours effectuer ma recherche par rapport a un mot clef et 2 paramètres mais cette fois je voudrais afficher les lignes correspondant au dernier entretien réalisé + tous les entretiens dejà faits.
J'ai mis dans un tableau la liste de toutes les maintenances (duree et km)
Mon idée est de rechercher dans ce tableau la valeur trouvée au préalable et d'enregistrer toutes les cellules "au dessus"
Et ainsi enregistrer Km(1)= 60000 puis Km(2) = 30000, km(3)= 20000 etc..
Ensuite faire ma recherche pour l'ensemble des Km(i) et duree(j) trouvés... C torturé mais ça peut marcher.
As tu une autre idée?
Quelle est la syntaxe pour trouver une cellule dans une colonne contenant une chaine de caracteres et enregistrer cette valeur et celles au dessus en s'arretant a la 1e case vide?
Comment modifier le programme (que tu as réalisé) pour effectuer cette recherche?
Et je m'embrouille avec mes modules, feuilles, variables public, privées, explicit... Ca marche mais c'est bancal...
Merci
Jb -
Je suis en train de me battre avec ma base de données pour retirer toutes les cellules fusionnées...
Désolé. Explore la fonction Mergecells, c'est ce que j'ai vu sur les forums. -
Je progresse ...
-
Re
Oui c'est correcte ^^
;o) -
Pourrais tu juste me dire si la modification à effectuer pour qu'il recherche le mot clef avec le km OU la durée (dans le sens et/ou) est celle ci? j'ai mis or et des parenthèses mais je suis pas sur.
If doesExistMotCle(motcle, str) = True And (CStr(ws2.Range("X" & lig2).Value) = getKms _
Or CStr(ws2.Range("Y" & lig2).Value) = getDuree) Then
Merci -
Oui j'ai regardé mais je n'ai pas trouvé de gens voulant faire la même chose que moi. Remarque je peux relancer une discussion sur le sujet...
Merci pour ton aide
@+ -
Bonjour,
Je ne connais pas la fonction MergeCells. As-tu cherché sur le net en tapant "MergeCells Excel" dans un moteur de recherce ?.
Je n'ai pas trop le temps aujourd'hui de faire des recherche. Je crois savoir que pour des cellules fusionnées, il faut également utiliser Address pour vérifier l'adresse de la plage des cellules fusionnées.
;o) -
Bonjour Polux31,
J'étais parti en we. Je n'avais pas de connexion pour te répondre. Apparement pour les cellules fusionnées il faut utiliser Mergecells. Mais je n'ai pas l'aide VBA (Pro11.msi introuvable...) donc je ne sais pas comment s'utilisent les fonctions. -
oui je vois. Le problème est que je peux difficilement modifier la base de données du fait qu'une macro et multiples formules y sont attachées. et si le programme regarde toutes les cellules colonne C, il ne voit pas les cellules fusionnées comme des cellules simples?
-
Ok je viens de voir le pourquoi du comment ...
En fait pour pouvoir parcourir le tableau, il faut se baser sur une colonne qui ne contient pas de cellules vides entre la première ligne et la dernière ligne à tester. Le soucis dans ton tableau c'est que tu as fusionné plusieurs lignes dans la colonne A ... et idem pour d'autres colonnes.
Pour qu'une feuille Excel ou un tableau Excel puisse être utilisé comme une base de données, il ne faut pas avoir de cellules fusionnées ...
Il existe certainement un moyen, mais je ne connais pas assez Excel et ses fonctions internes pour faire mieux que je n'ai fait.
Je vais regarder si je peux contourner le problème, mais je ne promets rien :oZ
;o) -
ah d'accord, j'essayais déseperement d'afficher ce message...
Oui c'est bien ce que je veux. Afficher les lignes contenant le mot clef pour le km et pour la durée. Et si on ne met rien dans mot clef, peut on afficher toutes les lignes correpondant au km et à la durée (comme un tri excel)?
Et pourquoi ca n'affiche pas toutes les lignes? J'ai fait un tri sur l'annexe à 60000 donc 1 an avec un ctrl+find "fixation" et je trouve 4 lignes. Le programme ne m'en trouve que 2. un au singulier et un au pluriel...
C'est pas parfait comme boulot !!!
Non je déconne, tu es comme la messie pour moi... -
T'es vraiment bon, le programme marche super bien.
Je voudrais juste que la recherche sur les 2 paramètres Km et durée soit "ou" plutot que "et" parce que le km et la duree sont liés. 60 000 km = 1an donc si je demande 10 000 km et 1 an je n'ai aucun résultat.
Sinon c'est très bien. Merci encore. Je vais m'occuper de la suite.
Et je ne comprends dans quel cas un messagebox s'affiche (Maman, tu es belle...)
JB-
Mdrrrrrr, c'est une fonction pour faire des tests ... j'ai testé la fonction doesExistMotCle, j'ai juste oublié de la supprimer ... tu peux la fonction test, elle ne sert à rien.... :DDDDDDDDDDD
Je regarde pour faire la modif. Attention dans le cas de OU tu auras toutes les lignes avec le mot clé et "10000" ET toutes les lignes avec le mot clé et "1 an" ... es-tu sûr que c'est bien cela que tu veux ?
;o)
-
-
Bonjour,
Voilà un premier jet https://www.cjoint.com/?jmk7ElgaOC
J'ai commenté au maximum le code pour que tu puisses suivres le fonctionnement.
Dis moi si ça correspond à ce que tu souhaites, et reviens me donner tes commentaires.
;o)
PS: je n'ai pas de connection internet le week. -
Je souhaite réinitialiser entre chaque recherche. Donc ni sauvegarde, ni plusieurs onglets de recherches.
Je voudrais juste enregistrer des fiches dans "fiche client refusé" dans un tableau type Rame, Km, date garantie, probleme sii l'utilisateur clique sur "non?". Mais je le ferai par la suite t'embetes pas.
l'idee de mon programme est de refuser de prendre en garantie si la maintenance n'a pas ete réalisé. Sauf que la maintenance est tellement longue (800 lignes) qu'on ne peut pas savoir ce qui doit etre fait a tel moment.
Donc par exemple:
panne de compresseur:
on rentre la rame et le km
on voit qu'un nettoyage aurait du etre fait a la dernier maintenance
on verifie ensuite sur nos fiches papiers si ca a ete fait. Si ca n'a pas ete fait, on clic sur non et une ligne s'enregistre dans l'onglet "fiche client refusé". il faut juste pouvoir mettre un commentaire sur le refus. je pense que le bouton non? ouvrira une textbox et le commentaire sera ajouté dans le tableau.
Merci -
Je crois aussi que le nouvel onglet est à privilégier. Par contre je souhaite afficher les 3 premières lignes de l'annexe pour savoir de quoi on parle...
Pour ce qui est du temps, tu peux meme regarder ça ce we.
Merci-
oui c'est mieux dans un onglet compte tenu du nombre de cellule, j'avais intégré le fait de garder les champs titre ainsi que la configuration de l'annexe pour l'onglet. Cet onglet doit-il être unique ou peut-il y avoir plusieurs recherches sur le même onglet ou chaque recherche dans un onglet différent ? Faut-il le ou les sauvegarder ? si oui, faut-il le faire dans ce fichier ou faut-il sauvegarder uniquement le ou les onglets ?
Je pense effectivement que je regarderai ça plutôt ce week end.
;o)
-
-
Je viens de regarder ton fichier. En fait le mot clé est contenu dans une chaine de caractères. Le code que je t'ai fait passer ne fait pas la recherche dans une chaine de caractères mais sur une chaine complète. Il faut donc modifier le code en tenant compte de ça.
Je crois que la solution c'est d'afficher le résultat de la recherche dans un nouvel onglet.
J'espère que tu n'es pas trop pressé car je suis plutôt full au niveau boulot. Je vais essayer de voir ça cet aprem ou ce soir. Je te tiens au courant de l'avancement.
Pour les infos contenues dans le fichier, ne te fais pas de soucis, je ne garderai rien un fois la modif faite.
;o) -
https://www.cjoint.com/?jlmsItYgwJ
En principe il n'y a pas trop de données confidentielles mais je te demanderai de supprimer le fichier après opération.
Le 1er bouton Entrer est affecté à une macro qui marche (grâce à toi) et Raz fonctionne également.
Ce que je voudrais maintenant c que le 2e bouton Entrer affiche les lignes de la base de données voulues en fonction de F14, G14, et du mot clef.
Les boutons du bas me permettront par la suite de réinitialiser en cliquant sur OK, ou enregistrer la fiche dans un nouvel onglet en cliquant sur non.
Merci encore pour ton aide.
JB
- 1
- 2
Suivant