Bonjour à tous,
Je planche sur un outil de calcul automatisé de remboursement de lunettes, pour une compagnie d'assurances.
Les critères à entrer pour permettre le fonctionnement sont les suivants :
Choix d'adulte ou enfant
Choix du contrat
Sphère
Cylindre
Addition
Ma macro convertit les 3 derniers critères en multiples de 100. Comme ça, elle peut aller chercher (théoriquement) un résultat dans une plage de données.
Sauf que je ne sais pas où j'ai merdouillé, car ma formule R1C1 me semble fausse... Mes données reviennent à 0 sans que je ne sache pourquoi...
Voici le code :
'Déclaration des variables
Dim Sphere As Long
Dim Cylindre As Long
Dim Addition As Long
Dim Spherecompar As Long
Dim Cylcompar As Long
'Conversion des dioptries en multiples de 100
'OEIL DROIT
Salut,
Si j'ai bien compris, tes résultats sont à zéro
Sachant que dans ta macro, tu vas chercher 37 lignes plus haut pour multiplier par 10, il faut qu'en ligne 8 tu ais des données chiffrées.
Ainsi tu auras les chiffres x 100.
A voir donc si en ligne 8 tu as bien des valeurs.
@+ Lolote83
Il y avait effectivement un décalage, tant sur les lignes que sur les colonnes.
J'ai recommencé, sauf que je n'arrive pas à retrouver la formule ou le code permettant de faire une recherche croisée ^_^"
Je m'explique :
Je recherche une valeur dans une grille, en fonction de 5 critères.
Le premier critère permet de se rendre sur la bonne feuille
Le second et le troisième combinés permettent de sélectionner la bonne région sur la feuille.
Le quatrième permet de trouver la colonne concernée.
Le cinquième permet de trouver la ligne concernée.
La combinaison des deux derniers critères doit donc me permettre de trouver la bonne valeur, que j'irai ensuite copier/coller sur une feuille servant à obtenir le résultat.
Je peux joindre l'ébauche de mon fichier au besoin
Salut BENJAMIN69,
Oui, effectivement un fichier avec un maximum d'explications et aussi les résultats escomptés serait le bienvenue.
Dans l'attente
@+ Lolote83
J'ai mis le plus de détails possible dans le premier onglet, puis dans le second et le troisième. J'ai également inséré des commentaires dans la macro problématique...
Re salut BENJAMIN69,
Voici ton fichier en retour agrémenté d'un petit formulaire et le calcul
En espérant avoir compris la consigne.
J'ai laissé tes onglets tel quels, mais TAVARES est devenu DONNEES (car c'est ici que je vais chercher les données) et Accueil OCA est devenu Accueil OCA2.
Si toutefois il faut aller chercher les données dans l'onglet correspondant au nom, me le dire.
@+ Lolote83
Pièces jointes
Copie de BENJAMIN69 - TEST grille automatisée.xlsm
Ça me semble pas mal, je n'avais pas pensé à ce genre de code... J'étais parti dans un trip à la if if if if...bref...
Oui, en fait, la macro doit être capable de chercher le résultat attendu dans l'onglet où on lui dit de chercher. Donc si je sélectionne Martin par exemple, elle doit aller sur l'onglet Martin, et exécuter son code de recherche
Re salut,
Le même fichier avec récupération des données dans l'onglet concerné.
Attention, tes onglets doivent être identiques au nom définis et en majuscule
Pour moi, l'onglet AccueilOCA pourrait être supprimé ainsi que les données de l'onglet BDD encadrée en rouge. Attention cependant, car dans le code actuel, il y a encore des données qui vont s'inscrire dans cet onglet mais inutile a mon sens. Donc code VBA a modifier (USERFORM)
@+ Lolote83
Pièces jointes
Copie de BENJAMIN69 - TEST grille automatisée.xlsm
Question bête, mais je crois que ta macro n'aime pas les décimales je me trompe ? Parce que les infos que l'on note pour la recherche sont soit en nombre entier, soit en deux décimales... Il y a une incompatibilité de type lors de l’exécution
Re salut,
A priori, je n'ai pas de mon coté de souci avec les nombres à décimale (1 ou 2)
Donne un exemple
As tu un message d'erreur ou se sont les valeurs récupérées qui sont incorrectes ?
@+ Lolote83
Oui j'ai une erreur type 13 "incompatibilité de type". La ligne pointée de la macro est celle ci :
Code:
For xOeil = 1 To 2
Select Case xOeil
Case Is = 1 '--------------------- OEIL DROIT
xCyl = .[D3] * 100
xSph = .[C3] * 100
Case Is = 2 '--------------------- OEIL GAUCHE
xCyl = .[D4] * 100
xSph = .[C4] * 100
End Select
Je suis en train d'essayer de modifier le code pour vérifier si ce ne sont pas les intervalles de recherche qui sont erronés, je te tiens au courant
Non, il y a toujours une erreur, je pensais que c'était le format de mes cellules sur la page principale qui enquiquinait le monde, mais pas du tout, l'erreur est toujours au même endroit...
Pour donner un exemple, je donne en sphère 1,25 et en cylindre 1,75. Avec les multiples de 100, ça devrait chercher en C3. Si je donne en sphère 7,75 et en cylindre 3,5, ça devrait chercher en D5.
ne pas oublier que vba ne connait que le "." en séparateur décimal, pas la ","
Faire un Replace à chaque valeur si c'est le cas.
Une remarque en lisant le début : inscrire une formule par macro ne présente strictement aucun intérêt si on peut l'inscrire directement sur la feuille. C'est contre-productif.
eric
Bonjour Eriiiic,
Effectivement, c'est une perte de temps et surtout un bon moyen de s'embrouiller.
Par contre, j'ai essayé en utilisant le point et non la virgule en séparateur décimal, et le résultat est le même, que ce soit en passant par l'userform, ou en entrant directement les données dans les cellules prévues
Re bonjour à tous,
Dans ton fichier, quelles sont finalement les valeurs basses et hautes car actuellement, si je reprends ton post#12, tu dis :
Pour donner un exemple, je donne en sphère 1,25 et en cylindre 1,75. Avec les multiples de 100, ça devrait chercher en C3. Si je donne en sphère 7,75 et en cylindre 3,5, ça devrait chercher en D5.
Donc si je multiplie
- Sphère 1.25 x 100 = 125 et Cylindre 1.75 x 100 = 175 et tu dis aller chercher la cellule C3
- Sphère 7.75 x 100 = 775 et Cylindre 3.5 x 100 = 350 et tu dis aller chercher la cellule D5
Donc d'après le tableau TAVAREZ, en C1 tu inscrits 199, en D1 tu inscrits 399 et en E1 tu inscrits 999.
D'après ma macro, si la valeur Sphère est comprise entre
- 199 et 399, alors on ira sur la colonne C
- 400 et 999, alors on ira sur la colonne D
- sinon on prendra la colonne E
Ais-je juste ou faut-il décaler comme suit ???
- 0 et 199, alors on ira sur la colonne C
- 200 à 399 alors on ira sur la colonne D
- 400 à 999 alors on ira sur la colonne E
Idem pour le Cylindre
De fait dans l'exemple que tu sites, Sphère = 125 donc inférieure à 199, n'étant pas compris dans les intervalles, on ira dans la colonne E (je sais, ce n'ai pas juste) mais je ne savais pas s'il fallait partir de 0 ou de 199.
Dans ce cas là, modifier alors le code comme suit
Code:
'-------------------------------------
' TEST LA VALEUR CYLINDRE
'-------------------------------------
Select Case xCyl
Case 0 To 199
xCol = "C"
Case 200 To 399
xCol = "D"
Case 400 To 999
xCol = "E"
End Select
et de même pour la valeur Sphère
Code:
'-------------------------------------
' TEST LA VALEUR SPHERE
'-------------------------------------
Select Case xSph
Case 0 To 399
xLig = 0
Case 400 To 599
xLig = 1
Case 600 To 799
xLig = 2
Case 800 To 999
xLig = 3
End Select
Cela donnera certainement les résultat escomptés
Pour Eriiiic,
Une remarque en lisant le début : inscrire une formule par macro ne présente strictement aucun intérêt si on peut l'inscrire directement sur la feuille. C'est contre-productif.
Je ne pense pas qu'une simple multiplication par 100 soit ici contre productif. Je reconnais que les formules via VBA sont peut être inutiles, mais là, franchement, c'est pinuts !!!!