Balayer un tableau pour trouver un intervalle

Fermé
Lulu92 - Modifié par Lulu92 le 1/07/2013 à 13:12
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 1 juil. 2013 à 13:42
Bonjour,

C'est la première fois que je code en VBA et j'ai quelques soucis !

Je cherche à créer une fonction qui :

- prend en argument une valeur A1 et une valeur B1 rentrées par l'utilisateur
- balaie un tableau de données formé de
* 4 colonnes : les min (1ère colonne) et les max (2ème) de A, puis les min (3ème) et les max (4ème) de B.
* 23 lignes : toutes les catégories (1 ligne = 1 intervalle de min-max)

----

L'idée est de dire à l'utilisateur :
"D'après la valeur A1 et la valeur B1 que vous avez rentré, votre situation correspond à la catégorie 3 (pcq A1 sera compris entre le min et le max de la ligne 2, ainsi que le B1 pour les min/max des B).

Le petit piège c'est que selon si on considère A1 ou B1, rien ne nous assure de tomber (cas idéal) sur la même catégorie.
Dans ce cas, on esquivera la difficulté et on proposera les deux à l'utilisateur. Ce sera à lui de trancher selon le réalisme des réponses.


J'espère avoir été explicite,

Merci d'avance à ceux qui auraient une petite idée, j'ai mis un début de code en bas (qui ne marche pas, je ne sais pas pourquoi).


----

Sub trouveC()

Dim A1 As Double, B1 As Double
Dim i As Integer, j As Integer, Rep

For i = 9 To 22

If (A1>= Feuil2.Range("D" & i)) And (A1 <= Feuil2.Range("E" & i)) Then Rep = MsgBox("La Catégorie correspondante est : " & Feuil2.Range("C" & i), vbOKCancel)


Else: Rep = MsgBox("Catégorie non trouvée", vbOKCancel)

Next

For j = 9 To 22


If (B1>= Feuil2.Range("F" & j)) And (B1<= Feuil2.Range("G" & j)) Then Rep = MsgBox("La Catégorie correspondante est : " & Feuil2.Range("C" & j), vbOKCancel)


Else: Rep = MsgBox("Catégorie non trouvée", vbOKCancel)
Next


End Sub

>>> l'erreur que j'ai c'est : "erreur de compilation, end sans if"
A voir également:

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 754
Modifié par pijaku le 1/07/2013 à 13:43
Bonjour,

Dans un premier temps, sans lire ton énoncé, je vois une erreur de syntaxe...
Tu as deux façons d'écrire un test if else :
If Blabla Then
    Si vrai
Else
    Si faux
End If


ou, en 1 ligne :
If Blabla Then Si vrai Else: Si faux


La première syntaxe est préférable, dans le sens ou elle s'adapte à toutes les situations. La seconde peut être utilisée lors de tests "courts" syntaxiquement parlant. Du genre :
If [A1] = 1 Then MsgBox "vrai" 


Dans ton cas, utilise la 1ère comme ceci :
If (A1>= Feuil2.Range("D" & i)) And (A1 <= Feuil2.Range("E" & i)) Then 
    Rep = MsgBox("La Catégorie correspondante est : " & Feuil2.Range("C" & i), vbOKCancel)
Else 
    Rep = MsgBox("Catégorie non trouvée", vbOKCancel) 
End If


ps : je n'ai pas regardé si ton code fonctionnait ou pas...
Cordialement,
Franck P
0