pb de remplissage

  • Initiateur de la discussion Reeaz
  • Date de début
R

Reeaz

Guest
Bonjour,

j'ai une feuille de calcul, sur la collonne F j'ai des notes pr chaque note j'aimerai asscosier une valeur 4 collonnes plus loin, j'ai crée une macro mais ca ne marche pas, la voila:

Sub Chiffre1()

fin = Range("F2").End(xlDown).Row
For i = 2 To fin

If Cells(i, 7).Value = "Etat" Then Cells(i, 11).Value = 1
If Cells(i, 7).Value = "NR" Then Cells(i, 11).Value = 23
If Cells(i, 7).Value = "AAA" Then Cells(i, 11).Value = 2
If Cells(i, 7).Value = "AA+" Then Cells(i, 11).Value = 3
If Cells(i, 7).Value = "AA" Then Cells(i, 11).Value = 4
If Cells(i, 7).Value = "AA-" Then Cells(i, 11).Value = 5
If Cells(i, 7).Value = "A+" Then Cells(i, 11).Value = 6
If Cells(i, 7).Value = "A" Then Cells(i, 11).Value = 7
If Cells(i, 7).Value = "A-" Then Cells(i, 11).Value = 8
If Cells(i, 7).Value = "BBB+" Then Cells(i, 11).Value = 9
If Cells(i, 7).Value = "BBB" Then Cells(i, 11).Value = 10
If Cells(i, 7).Value = "BBB-" Then Cells(i, 11).Value = 11
If Cells(i, 7).Value = "BB+" Then Cells(i, 11).Value = 12
If Cells(i, 7).Value = "BB" Then Cells(i, 11).Value = 13
If Cells(i, 7).Value = "BB-" Then Cells(i, 11).Value = 14
If Cells(i, 7).Value = "B+" Then Cells(i, 11).Value = 17
If Cells(i, 7).Value = "B" Then Cells(i, 11).Value = 18
If Cells(i, 7).Value = "B-" Then Cells(i, 11).Value = 19
If Cells(i, 7).Value = "CCC" Then Cells(i, 11).Value = 20
If Cells(i, 7).Value = "CC" Then Cells(i, 11).Value = 21
If Cells(i, 7).Value = "D" Then Cells(i, 11).Value = 22

Next i


End Sub


Si qqun voit l'erreur, ce serait sympa de m 'aider.
Merci.

Reeaz
 
P

pyrof

Guest
bonjour,
Il semble que la valeur fin est 65535 c'est à dire toute la colonne ce qui est très long.

Voir :
Sub Chiffre1()
i = 2
While Cells(i, 7) <> ""
If Cells(i, 7).Value = "Etat" Then Cells(i, 11).Value = 1
If Cells(i, 7).Value = "NR" Then Cells(i, 11).Value = 23

......
If Cells(i, 7).Value = "CC" Then Cells(i, 11).Value = 21
If Cells(i, 7).Value = "D" Then Cells(i, 11).Value = 22
i = i + 1
Wend

End Sub


Rn espérant que tu n'as pas de cellule vide au milieu
 
P

pyrof

Guest
La dernière fois (peut être)

J'ai du temps alors je me suis permis

voici un code qui va être plus rapide en exécution :

Sub Chiffre1()
Dim valeur2 As Range
i = 2
While Cells(i, 7) <> ""
Set valeur2 = Cells(i, 11)
Select Case Cells(i, 7)
Case "Etat": valeur2 = 1
Case "NR": valeur2 = 23
Case "AAA": valeur2 = 2
Case "AA+": valeur2 = 3
Case "AA": valeur2 = 4
Case "AA-": valeur2 = 5
Case "A+": valeur2 = 6
Case "A": valeur2 = 7
Case "A-": valeur2 = 8
Case "BBB+": valeur2 = 9
Case "BBB": valeur2 = 10
Case "BBB-": valeur2 = 11
Case "BB+": valeur2 = 12
Case "BB": valeur2 = 13
Case "BB-": valeur2 = 14
Case "B+": valeur2 = 17
Case "B": valeur2 = 18
Case "B-": valeur2 = 19
Case "CCC": valeur2 = 20
Case "CC": valeur2 = 21
Case "D": valeur2 = 22
End Select
i = i + 1
Wend

End Sub



Car pour chaque cellule tu fais tous les tests même le premier est le bon.
avec select cas dès qu'il a trouve le case il ne fait plus les autres.

Pour améliorer encore, si tu peux savoir si classer l'ordre des case du plus utilisé au moins .

Bon sourrage
 
R

Reeaz

Guest
Merci de ton aide pyrof, mais en fait j'ai réussi à faire marcher ma macro.
Pourtant, j'ai toujours un pb car dans ma collonne 7, j'ai des erreurs que je dois gérer (du type #N/A, div par 0), mais que je n'arrive pas à gérer!
Voici ce que j'ai essayé:
Sub Chiffre1()

fin = Range("F2").End(xlDown).Row
For i = 2 To fin
'Cells(i, 7).Select
'On Error Resume Next
On Error GoTo Errorhandler
If Cells(i, 7).Value = "Etat" Then
Cells(i, 11).Value = 1
ElseIf Cells(i, 7).Value = "NR" Then
Cells(i, 11).Value = 23
ElseIf Cells(i, 7).Value = "AAA" Then
Cells(i, 11).Value = 2
ElseIf Cells(i, 7).Value = "AA+" Then
Cells(i, 11).Value = 3
ElseIf Cells(i, 7).Value = "AA" Then
Cells(i, 11).Value = 4
ElseIf Cells(i, 7).Value = "AA-" Then
Cells(i, 11).Value = 5
ElseIf Cells(i, 7).Value = "A+" Then
Cells(i, 11).Value = 6
ElseIf Cells(i, 7).Value = "A" Then
Cells(i, 11).Value = 7
ElseIf Cells(i, 7).Value = "A-" Then
Cells(i, 11).Value = 8
ElseIf Cells(i, 7).Value = "BBB+" Then
Cells(i, 11).Value = 9
ElseIf Cells(i, 7).Value = "BBB" Then
Cells(i, 11).Value = 10
ElseIf Cells(i, 7).Value = "BBB-" Then
Cells(i, 11).Value = 11
ElseIf Cells(i, 7).Value = "BB+" Then
Cells(i, 11).Value = 12
ElseIf Cells(i, 7).Value = "BB" Then
Cells(i, 11).Value = 13
ElseIf Cells(i, 7).Value = "BB-" Then
Cells(i, 11).Value = 14
ElseIf Cells(i, 7).Value = "B+" Then
Cells(i, 11).Value = 17
ElseIf Cells(i, 7).Value = "B" Then
Cells(i, 11).Value = 18
ElseIf Cells(i, 7).Value = "B-" Then
Cells(i, 11).Value = 19
ElseIf Cells(i, 7).Value = "CCC" Then
Cells(i, 11).Value = 20
ElseIf Cells(i, 7).Value = "CC" Then
Cells(i, 11).Value = 21
ElseIf Cells(i, 7).Value = "D" Then
Cells(i, 11).Value = 22

'ElseIf IsNumeric(Cells(i, 7).Value) Then Cells(i, 11).Value = ""
End If
Next i

Exit Sub

Errorhandler:
'fin = Range("F2").End(xlDown).Row
'For i = 2 To fin
If IsError(Cells(i, 7).Value) = True Then Cells(i, 11).Value = ""
'ActiveCell.Offset(0, 4).Value = "toto"
'Next i

Resume Next


End Sub

Je voudrai en fait que chaque fois qu'il y une erreur de ce type, que la macro n'en tienne pas compte et renvoie rien ds la collonne 11.

QQun sait comment faire?
 
P

pyrof

Guest
voila avec gestion d'erreur

Sub Chiffre1()
Dim valeur2 As Range
i = 2
While IsError(Cells(i, 7))
Cells(i, 11) = ""
i = i + 1
Wend
While Cells(i, 7) <> ""
Set valeur2 = Cells(i, 11)
If IsError(Cells(i, 7)) = False Then
Select Case Cells(i, 7)
Case "Etat": valeur2 = 1
Case "NR": valeur2 = 23
Case "AAA": valeur2 = 2
Case "AA+": valeur2 = 3
Case "AA": valeur2 = 4
Case "AA-": valeur2 = 5
Case "A+": valeur2 = 6
Case "A": valeur2 = 7
Case "A-": valeur2 = 8
Case "BBB+": valeur2 = 9
Case "BBB": valeur2 = 10
Case "BBB-": valeur2 = 11
Case "BB+": valeur2 = 12
Case "BB": valeur2 = 13
Case "BB-": valeur2 = 14
Case "B+": valeur2 = 17
Case "B": valeur2 = 18
Case "B-": valeur2 = 19
Case "CCC": valeur2 = 20
Case "CC": valeur2 = 21
Case "D": valeur2 = 22
Case Else: valeur2 = ""
End Select
End If
i = i + 1
While IsError(Cells(i, 7))
Cells(i, 11) = ""
i = i + 1
Wend

Wend

End Sub
 

Discussions similaires

Réponses
0
Affichages
308

Statistiques des forums

Discussions
314 656
Messages
2 111 606
Membres
111 218
dernier inscrit
Jean-Kev