VBA

Résolu/Fermé
Comuto Messages postés 3 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 29 décembre 2017 - Modifié le 28 déc. 2017 à 15:57
Comuto Messages postés 3 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 29 décembre 2017 - 29 déc. 2017 à 18:52
Bonjour à tous !
Alors voilà, je vous explique mon problème. Je voudrais faire une boucle Pour dans laquelle "Mat" est une valeur qu'il doit prendre dans un tableau et "Résultat" un nom associer à cette valeur mais voilà le problème ... Je ne sais pas si je m'y prend bien mais un débogage est nécessaire à chaque essai d'où le fait que je vous demande votre aide.

Merci d'avance.

For i = 2 To 22
     Mat = 0
        Do While Re > Mat
          Mat = Sheets(Projet).Range("B" & "i").Value
          Résultat = Sheets(Projet).Range("A" & "i").Value
        Loop
     Next i
  Label5.Caption = CStr(Résultat)

2 réponses

Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 776
28 déc. 2017 à 17:50
Bonjour et bienvenue sur CCM,

Tout d'abord, ici c'est pas le Forum VBA mais le Forum Excel. Le Forum VBA est ici :
https://forums.commentcamarche.net/forum/vb-vba-267

Mais ce n'est pas très grave, je vois cette erreur tous les jours.

A première vue ton code devrait fonctionner a condition que Re et Projet aient été définis avant.

Quand tu poses une question sur le code il est préférable de mettre l'intégralité du code (comme dans ton cas, le problème peut se situer avant)
Il faut aussi préciser sur quelle ligne pointe le débogueur et le message d'erreur qu'il donne.

qq conseils :
- Commences tous tes modules pas Option Explicit
- Plus tu est rigoureux moins tu as de problème

Il y a une erreur avec "i" dans :
Mat = Sheets(Projet).Range("B" & "i").Value
ce qui équivaut à
Mat = Sheets(Projet).Range("Bi").Value

Préférer Worksheets à Sheets d'où :
Mat = Worksheets(Projet).Range("B" & i).Value

Idem pour Résultats
0
Comuto Messages postés 3 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 29 décembre 2017
Modifié le 29 déc. 2017 à 15:42
Oups ... Je tenais tout d'abord à m'excuser de ma bourde. Mais voilà, je vous ai repris le code entier mais toujours pas de résultat. Si vous pouviez y jeter un coup d’œil s'il vous plait. Le débogueur se place à la ligne en italique avec une erreur d'exécution '9': l'indice n'appartient pas à la sélection.

Cordialement.


Private Sub CommandButton3_Click()
Dim Re, Nombre1, Nombre2, Nombre3 As Double
Dim Résultat As String
Dim Val, i, Mat As Integer

If (IsNumeric(TextBox1.Value) And IsNumeric(TextBox2.Value) And IsNumeric(TextBox3.Value)) Then    
     Nombre1 = CDbl(TextBox1.Value)                      
     Nombre2 = CDbl(TextBox2.Value)
     Nombre3 = CDbl(TextBox3.Value)
    If (0 > Nombre1 Or 0 >= Nombre2 Or 0 > Nombre3) Then            
      Val = MsgBox("Pas dans l'intervalle", vbExclamation)      
    Else
     Re = (Nombre1 * Nombre3) / Nombre2  
     For i = 2 To 22
     Mat = 0
        Do While Re > Mat                  'Comparer la valeur de Re calculé à une valeur donnée sur une feuille
          <ital>Mat = Worksheets(Projet).Range("Bi").Value</ital>       
          Résultat = Worksheets(Projet).Range("Ai").Value      'Le nom associer à cette valeur "mat"
        Loop
     Next i
  Label5.Caption = CStr(Résultat)
    End If
Else
Val = MsgBox("Pas numérique", vbExclamation)    
End If
End Sub
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié le 29 déc. 2017 à 17:17
Bonjour

Trois erreurs au moins...
1. Le nom de la feuille doit être entre guillemets
2. l'adresse variable "Ai" >>> "A" & i
3. Ta boucle Do while .... loop tourne en rond

Un début ?
Private Sub CommandButton3_Click()
Dim Re, Nombre1, Nombre2, Nombre3 As Double
Dim Résultat As String
Dim Val, i, Mat As Double
If (IsNumeric(TextBox1.Value) And IsNumeric(TextBox2.Value) And IsNumeric(TextBox3.Value)) Then
     Nombre1 = CDbl(TextBox1.Value)
     Nombre2 = CDbl(TextBox2.Value)
     Nombre3 = CDbl(TextBox3.Value)
    If (0 > Nombre1 Or 0 >= Nombre2 Or 0 > Nombre3) Then
      Val = MsgBox("Pas dans l'intervalle", vbExclamation)
    Else
     Re = (Nombre1 * Nombre3) / Nombre2
     i = 2
     Mat = 0
     Do While Re > Mat Or i = 23
       'Comparer la valeur de Re calculé à une valeur donnée sur une feuille
        Mat = Worksheets("Projet").Range("B" & i).Value
        Résultat = Worksheets("Projet").Range("A" & i).Value      'Le nom associer à cette valeur "mat"
        i = i + 1
     Loop
  Label5.Caption = CStr(Résultat)
    End If
Else
Val = MsgBox("Pas numérique", vbExclamation)
End If
End Sub


Cdlmnt
0
Comuto Messages postés 3 Date d'inscription jeudi 28 décembre 2017 Statut Membre Dernière intervention 29 décembre 2017
29 déc. 2017 à 18:52
Merci beaucoup, ça fonctionne parfaitement maintenant ! Bonne soirée.
0