[Débutant]Erreur compli et simplification code
Bonjour tout le monde,
Je viens vers vous pour un problème d'erreur dans une boucle et des conseils de structure
Sub crit_eval1(lettre, j)
Dim i As Byte
For i = 1 To 100
If Feuil1.Range("H" & i) = "4" And Feuil1.Range("H" & i) = lettre Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = Feuil1.Range("B" & i)
j = j + 1
ElseIf Feuil1.Range("L" & i) = "4" And Feuil1.Range("H" & i) = lettre Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = Feuil1.Range("B" & i)
j = j + 1
End If
Next
End Sub
'rempli feuil19.colonne A
'avec lles crritères d'éval de feuil1.colonne A
Sub orga_criteval()
Dim j As Byte, nbA As Byte, nbB As Byte, nbC As Byte, nbD As Byte, nbE As Byte
Dim a As String, b As String, c As String, d As String, e As String
j = 5
a = "A"
b = "B"
c = "C"
d = "D"
e = "E"
nbA = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), a)
nbB = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), b)
nbC = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), c)
nbD = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), d)
nbE = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), e)
If Not (nbA = 0) Then
Feuil19.Range("A" & j) = "Consignes et instructions"
j = j + 1
Call crit_eval1(a, j)
ElseIf Not (nbB = 0) Then
Feuil19.Range("A" & j) = "Esprit d'équipe"
j = j + 1
For i = 1 To 100
Call crit_eval1(b, j)
ElseIf Not (nbC = 0) Then
Feuil19.Range("A" & j) = "Opérations"
j = j + 1
Call crit_eval1(c, j)
ElseIf Not (nbD = 0) Then
Feuil19.Range("A" & j) = "Savoir être"
j = j + 1
Call crit_eval1(d, j)
ElseIf Not (nbE = 0) Then
Feuil19.Range("A" & j) = "Savoir faire"
j = j + 1
Call crit_eval1(e, j)
End If
End Sub
Au bout du deuxième ElseIf *EsleIf not(nbC = 0) then*, j'ai l'erreur : Erreur de compilation Else sans if.
Comme j'écrivais toujours la même chose, j'ai copier-coller chaque ElseIf. J'ai essayé de mettre ce ElseIf en commentaire et l'erreur se met sur celui d'après. Donc j'ai tout réécrit, même résultat. J'ai tout recopier-coller, même résultat.
Voyez-vous quelle erreur j'ai faite ?
Aussi, si vous avez des conseils pour faire la même chose en simplifié, je suis preneuse sachant que je ne peux pas modifier les feuilles sources ci jointe (doc opératuer nv1 conf).
Ce que j'essaie de faire est de copier les critères d'évaluations de la feuille "opérateur niv 1"(Feuil1) du classeur du même nom dans la feuille "Matrice de compétences"(Feuil19) sous des titres selon qu'ils ont un A, un B, un C, un D ou un E sur la même ligne dans la colonne A dans Feuil1. Je suis obligé de passer par VBA vu que ce tableau doit se générer entièrement automatiquement (un bouton).
Le but final pour cette partie de mon programme (derniers sub dans le module) est de créer exactement la colonne A du fichier joint Matrice ref
Merci encore de me permettre de progresser grâce à vos conseils et réponses =D
Lucie
Bonsoir,
Dans un premier temps ce n'est pas une erreur de if... VBA manifeste seulement ainsi qu'il y a une erreur logique en l’occurrence ici c'est le Next de la boucle For qui manque...
Pour le reste il faut que j'étudie la pièce jointe... Je verrai cela dans un moment !
[EDIT]
Après avoir évalué la bête, je trouve que c'est pas mal...
La meilleure méthode étant celle qu'on maitrise le mieux... Je te suggère de laisser les choses en l'état.
C'est fluide. KESKE tu veux de plus ?
Bien sur on peut toujours trouver à améliorer, mais sur ce coup du point de vue du rapport investissement/résultat, si c'est toi qui a pondu ça : Je te vote un satisfecit !
Bonjour,
Merci galopin 01 =)
En effet ! le for de orga_criteval n'avait rien à faire là ^^
Du coup j'ai bidouillé un peu ma sub pour qu'elle tourne comme je le voulais et ça donne ça :
Sub couleur()
Dim i As Byte, j As Byte, note As String
For i = 1 To nbcol
For j = 3 To nblign
If (i = 1 Or i = 2) And j = 3 Then
Feuil19.Cells(j, i).Interior.ColorIndex = 2
Else
note = Feuil19.Cells(j, i).Value
Select Case (note)
Case Is = 1
Feuil19.Cells(j, i).Interior.ColorIndex = 3
Case Is = 2
Feuil19.Cells(j, i).Interior.ColorIndex = 6
Case Is = 3
Feuil19.Cells(j, i).Interior.ColorIndex = 43
Case Is = 4
Feuil19.Cells(j, i).Interior.ColorIndex = 10
Case Is = "", " "
Feuil19.Cells(j, i).Interior.ColorIndex = 24
End Select
End If
Next j
Next i
End Sub
Sub crit_eval1(lettre, j)
Dim i As Byte
For i = 1 To 100
If Feuil1.Range("H" & i) = "4" And Feuil1.Range("A" & i) = lettre Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = Feuil1.Range("B" & i)
j = j + 1
ElseIf Feuil1.Range("L" & i) = "4" And Feuil1.Range("A" & i) = lettre Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = Feuil1.Range("B" & i)
j = j + 1
End If
Next i
End Sub
'rempli feuil19.colonne A
'avec lles crritères d'éval de feuil1.colonne A
Sub orga_criteval()
Dim j As Byte, nbA As Byte, nbB As Byte, nbC As Byte, nbD As Byte, nbE As Byte
Dim a As String, b As String, c As String, d As String, e As String
j = 4
a = "A"
b = "B"
c = "C"
d = "D"
e = "E"
nbA = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), a)
nbB = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), b)
nbC = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), c)
nbD = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), d)
nbE = Application.WorksheetFunction.CountIf(Feuil1.Range("A1:A90"), e)
If Not (nbA = 0) Then
Feuil19.Range("A" & j) = "Consignes et instructions"
Feuil19.Range("A" & j, "B" & j).MergeCells = True
i = 1
Do Until i = nbcol + 1
Feuil19.Cells(j, i).Borders.Weight = xlThick
i = i + 1
Loop
j = j + 1
Call crit_eval1(a, j)
End If
If Not (nbB = 0) Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = "Esprit d'équipe"
i = 1
Do Until i = nbcol + 1
Feuil19.Cells(j, i).Borders.Weight = xlThick
i = i + 1
Loop
j = j + 1
Call crit_eval1(b, j)
End If
If Not (nbC = 0) Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = "Opérations"
i = 1
Do Until i = nbcol + 1
Feuil19.Cells(j, i).Borders.Weight = xlThick
i = i + 1
Loop
j = j + 1
Call crit_eval1(c, j)
End If
If Not (nbD = 0) Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = "Savoir être"
i = 1
Do Until i = nbcol + 1
Feuil19.Cells(j, i).Borders.Weight = xlThick
i = i + 1
Loop
j = j + 1
Call crit_eval1(d, j)
End If
If Not (nbE = 0) Then
Feuil19.Range("A" & j, "B" & j).MergeCells = True
Feuil19.Range("A" & j) = "Savoir faire"
i = 1
Do Until i = nbcol + 1
Feuil19.Cells(j, i).Borders.Weight = xlThick
i = i + 1
Loop
j = j + 1
Call crit_eval1(e, j)
End If
End Sub
Ca marche nickel =D,
Merci pour tes conseils galopin01 !