XL 2016 Recherche valeurs à partir de cinq critères

Benjamin69

XLDnaute Nouveau
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

Range("C45").Select
ActiveCell.FormulaR1C1 = "=R[-37]C*100"
Range("D45").Select
ActiveCell.FormulaR1C1 = "=R[-37]C*100"
Range("E45").Select
ActiveCell.FormulaR1C1 = "=R[-37]C*100"
Range("G45").Select
ActiveCell.FormulaR1C1 = "=R[-37]C*100"
Range("H45").Select
ActiveCell.FormulaR1C1 = "=R[-37]C*100"
Range("I45").Select
ActiveCell.FormulaR1C1 = "=R[-37]C*100"
Range("C45:I45").Select
Selection.Copy
A noter que sphère, cylindre et addition peuvent être exprimés en décimales... Je ne sais pas si le problème vient de là...
 

Lolote83

XLDnaute Barbatruc
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
 

Benjamin69

XLDnaute Nouveau
Bonjour 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
 

Benjamin69

XLDnaute Nouveau
Le voici le voilà il est encore tout chaud.

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...

Merci de ton aide ;)
 

Pièces jointes

  • TEST grille automatisée.xlsm
    62 KB · Affichages: 25

Lolote83

XLDnaute Barbatruc
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
    77.3 KB · Affichages: 24

Benjamin69

XLDnaute Nouveau
Ç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
 

Lolote83

XLDnaute Barbatruc
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
    75.8 KB · Affichages: 26

Benjamin69

XLDnaute Nouveau
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
 

Benjamin69

XLDnaute Nouveau
Hello,

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
 

Benjamin69

XLDnaute Nouveau
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.
 

eriiic

XLDnaute Barbatruc
Bonjour,

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
 

Benjamin69

XLDnaute Nouveau
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
 

Lolote83

XLDnaute Barbatruc
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 !!!!


@+ Lolote83
 
Dernière édition:

Discussions similaires

Réponses
1
Affichages
1 K

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla