Bug sur Boucle for sur une ligne et sur un test supérieur à - VB/VBA/VBS - Programmation
Marsh Posté le 25-05-2009 à 09:16:32
ReplyMarsh Posté le 25-05-2009 à 16:34:10
Deamon a écrit : Tu n'aurais pas un "End If" en trop par hasard ? |
C'est d'autant plus dommage qu'il n'y a même pas besoin de blocs "If" ici, cela suffit :
If UserForm9.ComboBox1.Value <> "0" And Feuil1.Rows(N).Hidden = False And f >= e Then Feuil1.Rows(N).Hidden = True |
Marsh Posté le 27-05-2009 à 14:56:07
même comme ceci cela ne marche pas.
Static Derniere_ligne As Long
Static a As Long
Dim N As Integer
Derniere_ligne = Feuil1.Columns.End(xlDown).Row
a = Derniere_ligne + 1
Application.ScreenUpdating = False
Sheets("Listing ST" ).Select
a = Derniere_ligne + 1
For N = 3 To a
f = UserForm9.ComboBox1.Value
e = Feuil1.Range("CA" & N).Value
If UserForm9.ComboBox1.Value <> "0" Then
If Feuil1.Rows(N).Hidden = False And f >= e Then
Feuil1.Rows(N).Hidden = True
End If
End If
Next N
Marsh Posté le 27-05-2009 à 15:13:41
Tu traites ComboBox1.Value comme un String :
Code :
|
puis comme un entier :
Code :
|
Il est peut être là le problème.
Marsh Posté le 27-05-2009 à 16:35:44
Bon, comment dire... Ton code n'est pas terrible, à défaut d'être compréhensible. Quelques commentaires seraient les bienvenus. Et nous dire aussi si tu as un message d'erreur quand tu lances ta macro, ou si cela va jusqu'au bout mais sans les effets escomptés.
On va quand même essayer
Code :
|
Bref, plein de trucs à revoir, ce qui fait plein de possibilités pour que ton code ne marche pas. Fais-nous savoir où tu en es.
Marsh Posté le 29-05-2009 à 11:30:20
Static Derniere_ligne As Long
Static a As Integer
Dim N As Integer
Dim f As String
Dim e As String
Derniere_ligne = Feuil1.Columns.End(xlDown).Row
Application.ScreenUpdating = False
a = Derniere_ligne + 1
For N = 3 To a
f = UserForm9.ComboBox1.Value
e = Feuil1.Range("CA" & N).Value
If UserForm9.ComboBox1.Value <> "0" Then
If Feuil1.Rows(N).Hidden = False And f >= e Then
Feuil1.Rows(N).Hidden = True
End If
End If
Next N
__________________________________________________________
En fait, je récupère la première ligne non utilisée (cela marche bien dans ma feuille de donnée).
La sélection de la feuille est assez débile vu que je travaille dessus.
Maintenant, je considère N comme un entier aussi. Il prendra beaucoup de moins de valeurs ?
Au niveau des erreurs, en fait il n'y en a pas qui s'affiche mais il n'effectue pas la comparaison entre les deux données !
"If Feuil1.Rows(N).Hidden = False And f >= e"
Il ne cache pas alors la ligne ou la donnée est inférieur à la donnée de base !
Attention, le test doit s'eefectuer uniquement sur les lignes qui sont affichées et non pas sur toutes les lignes.
Je vois que j'ai encore beaucoup de choses à apprendre !
J'ai appris sur le tard et je ne suis pas perfectionniste dans ma programmation
Je vous remercie de l'aide apportée à mon preogramme !
A+
Marsh Posté le 29-05-2009 à 15:10:29
Retour au bloc pour dissection du code :
Code :
|
nathanc a écrit : |
Le problème principal je pense, c'est le type des variables e et f. Déclare-les comme integer. Si la valeur de ta ComboBox est considérée comme string et ne veut pas rentrer dans f, utilise un cast : f = CInt(UserForm9.ComboBox1.Value).
Marsh Posté le 24-05-2009 à 23:10:13
bonjour,
J'ai un problème sur une boucle qui ne fonctionne pas correctement.
Elle test si la ligne est cachée et si une cellule (nombres dans ces cellules) dans cette ligne est inférieur à la valeur de la combobox de l'userform.
Si la ligne n'est pas cachée et la cellule de la ligne est supérieur à combobox.value, on ne cache pas la ligne, sinon on la cache.
Malgré mes efforts, je ne comprends pas pourquoi les cellules dont la valeur est inférieur à celle de la combobox ne sont pas cachées !
je vous transmets mon code et attends vos commentaires.
Je vous remercie d'avance
___________________________________________
Static Derniere_ligne As Long
Static a As Long
Dim N As Integer
Derniere_ligne = Feuil1.Columns.End(xlDown).Row
a = Derniere_ligne + 1
Application.ScreenUpdating = False
Sheets("Listing ST" ).Select
For N = 3 To a
f = UserForm9.ComboBox1.Value
e = Feuil1.Range("CA" & N).Value
If UserForm9.ComboBox1.Value <> "0" Then
If Feuil1.Rows(N).Hidden = False And f >= e Then
Feuil1.Rows(N).Hidden = True
End If
End If
End If
Next N
________________________________________________
Merci d'avance