Problème avec bloc if en VBA

Nofxha Messages postés 2 Date d'inscription lundi 4 avril 2011 Statut Membre Dernière intervention 4 avril 2011 - 4 avril 2011 à 20:57
Nofxha Messages postés 2 Date d'inscription lundi 4 avril 2011 Statut Membre Dernière intervention 4 avril 2011 - 4 avril 2011 à 22:51
Voici un programme que j'ai fait pour affecter un coefficient en fonction d'un rang (données sur une feuille excel).
Le problème est que j'ai une erreur : Else sans If alors qu'il me semble avoir mis suffisamment de blocs end if. De plus je sais pas si j'ai correctement programmé le tout.

Merci pour votre aide

' calcul du coefficient
Periode = TextPeriode


For j = 3 To 5003

If ThisWorkbook.Worksheets("AppelOffre").Cells(j, 1).Value 1 Periode Then
rangentreprise = ThisWorkbook.Worksheets("AppelOffre").Cells(j, 6).Value
If rangentreprise 1 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(4, 3).Value
Else
If rangentreprise 2 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(5, 3).Value
Else
If rangentreprise 3 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(6, 3).Value
End If
End If
End If

ThisWorkbook.Sheets("AppelOffre").Cells(j, 7).Value = coefficient

Else

If ThisWorkbook.Worksheets("AppelOffre").Cells(j, 1).Value Periode 2 _
Then
rangentreprise = ThisWorkbook.Worksheets("AppelOffre").Cells(j, 6).Value
If rangentreprise 1 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(4, 6).Value
Else
If rangentreprise 2 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(5, 6).Value
Else
If rangentreprise 3 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(6, 6).Value
Else
If rangentreprise 4 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(7, 6).Value

End If
End If
End If
End If
End If
ThisWorkbook.Sheets("AppelOffre").Cells(j, 7).Value = coefficient

Else

If ThisWorkbook.Worksheets("AppelOffre").Cells(j, 1).Value >= Periode >= 3 _
Then
rangentreprise = ThisWorkbook.Worksheets("AppelOffre").Cells(j, 6).Value
If rangentreprise 1 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(4, 9).Value
Else
If rangentreprise 2 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(5, 9).Value
Else
If rangentreprise 3 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(6, 9).Value
Else
If rangentreprise 4 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(7, 9).Value
Else
If rangentreprise 5 Then coefficient ThisWorkbook.Worksheets("RangCoefficient").Cells(8, 9).Value

End If
End If
End If
End If
End If


ThisWorkbook.Sheets("AppelOffre").Cells(j, 7).Value = coefficient

End If
End If
End If
Next


End Sub

2 réponses

foliv57 Messages postés 420 Date d'inscription vendredi 17 novembre 2006 Statut Membre Dernière intervention 15 juillet 2014 9
4 avril 2011 à 21:52
Bonjour,

Commençons par les bases. Si vous voulez que les gens vous donne un coup de main sur le forum, ne jetez pas votre code avec un simple copier-coller. Utilisez les balises codes, elles sont faite pour ca, et mettez le un peut en forme car dans votre cas, cela vous aurez peut être même permis de trouver vous même l'erreur.

En VB les if se font comme ceci
If Condition Then Action

ou
If Condition Then
   Action
End If

ou
If Condition Then
   Action
Else
   AutreAction
End If

ou
If Condition Then
   Action
ElseIf AutreCondition Then
   AutreAction
End If


Donc pour votre code ca donne ceci
Dim AppelOffre As Worksheet
Dim RangCoefficient As Worksheet

Set AppelOffre = ThisWorkbook.Worksheets("AppelOffre")
Set RangCoefficient = ThisWorkbook.Worksheets("RangCoefficient")

Periode = TextPeriode

For j = 3 To 5003

    rangentreprise = AppelOffre.Cells(j, 6).Value
    
    If (AppelOffre.Cells(j, 1).Value Periode) And (Periode 1) Then
        
        Select Case rangentreprise
         Case 1
            coefficient = RangCoefficient.Cells(4, 3).Value
         Case 2
            coefficient = RangCoefficient.Cells(5, 3).Value
         Case 3
            coefficient = RangCoefficient.Cells(6, 3).Value
        End Select
    
    ElseIf (AppelOffre.Cells(j, 1).Value Periode) And (Periode 2) Then
        
        Select Case rangentreprise
         Case 1
            coefficient = RangCoefficient.Cells(4, 6).Value
         Case 2
            coefficient = RangCoefficient.Cells(5, 6).Value
         Case 3
            coefficient = RangCoefficient.Cells(6, 6).Value
         Case 4
            coefficient = RangCoefficient.Cells(7, 6).Value
        End Select

    ElseIf (AppelOffre.Cells(j, 1).Value >= Periode) And (Periode >= 3) Then
        
        Select Case rangentreprise
         Case 1
            coefficient = RangCoefficient.Cells(4, 9).Value
         Case 2
            coefficient = RangCoefficient.Cells(5, 9).Value
         Case 3
            coefficient = RangCoefficient.Cells(6, 9).Value
         Case 4
            coefficient = RangCoefficient.Cells(7, 9).Value
         Case 5
            coefficient = RangCoefficient.Cells(8, 9).Value
        End Select
    
    End If

    AppelOffre.Cells(j, 7).Value = coefficient
Next


Et si vos cellules dans l'onglet "RangCoefficient" ne sont pas amenées à trop changer, vous pouvez même faire simplement ceci
Dim AppelOffre As Worksheet
Dim RangCoefficient As Worksheet
Dim colonne As Long

Set AppelOffre = ThisWorkbook.Worksheets("AppelOffre")
Set RangCoefficient = ThisWorkbook.Worksheets("RangCoefficient")

Periode = TextPeriode

For j = 3 To 5003

    rangentreprise = AppelOffre.Cells(j, 6).Value
    
    If (AppelOffre.Cells(j, 1).Value Periode) And (Periode 1) Then
        colonne = 3
    ElseIf (AppelOffre.Cells(j, 1).Value Periode) And (Periode 2) Then
        colonne = 6
    ElseIf (AppelOffre.Cells(j, 1).Value >= Periode) And (Periode >= 3) Then
        colonne = 9
    End If

    coefficient = RangCoefficient.Cells(rangentreprise + 3, colonne).Value
    AppelOffre.Cells(j, 7).Value = coefficient
    
Next
0
Nofxha Messages postés 2 Date d'inscription lundi 4 avril 2011 Statut Membre Dernière intervention 4 avril 2011
4 avril 2011 à 22:51
Bonsoir,

Merci pour le code et je m'excuse d'avoir posté le message un peu sauvagement (je pensais assez naïvement que la mise en page resterait la même). En tout cas merci pour la réactivité, je vais essayer d'applique tout ça.
0
Rejoignez-nous