Balayer un tableau pour trouver un intervalle
Lulu92
-
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
pijaku Messages postés 12263 Date d'inscription Statut Modérateur Dernière intervention -
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"
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:
- Balayer un tableau pour trouver un intervalle
- Tableau word - Guide
- Trier un tableau excel - Guide
- Tableau ascii - Guide
- Trouver adresse mac - Guide
- Imprimer un tableau excel - Guide
1 réponse
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 :
ou, en 1 ligne :
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 :
Dans ton cas, utilise la 1ère comme ceci :
ps : je n'ai pas regardé si ton code fonctionnait ou pas...
Cordialement,
Franck P
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