VBA

Résolu
Comuto Messages postés 3 Statut Membre -  
Comuto Messages postés 3 Statut Membre -
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

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 783
     
    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
    1. Comuto Messages postés 3 Statut Membre
       
      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
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Comuto Messages postés 3 Statut Membre
       
      Merci beaucoup, ça fonctionne parfaitement maintenant ! Bonne soirée.
      0