[Excel VBA]Fonction Rank ignorer cellule vide et passer à la suivante

Fonction Rank ignorer cellule vide et passer à la suivante [Excel VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 21-10-2014 à 18:42:51    

Salut les Amis,
 
Voila j'ai un fichier où j'essaie de classer des donner un rang aux nombres dans une colonne. Le problème est le suivant:
 
A1= 1
A2= 2
A3= 9
A4= ""
A5= 16
 
Voici la macro que j'éxecute:

Code :
  1. Sub test()
  2.     col = "A"
  3.     rk = "B"
  4.     Lastrow = Range(col & Rows.Count).End(xlUp).Row
  5. For i = 1 To Lastrow
  6.     If IsNumeric(" & col & i & " ) = True Then
  7.      
  8.       Range(rk & i).Formula = "= RANK(" & col & i & "," & col & ":" & col & ",0)"
  9.     Else: Range(rk & i).Formula = "= RANK(" & col & i + 1 & "," & col & ":" & col & ",0)"
  10.      End If
  11.     Next i
  12.    
  13. End Sub


Je voudrai que la macro saute la plage vide à savoir A4 et passe à la cellule suivante malheureusement la macro ne fonctionne pas. Il semblerait que le Test ISNumeric() soit toujours faux même si la cellule comprend des chiffres. Pouvez-vous s'il vous plait m'aider à rectifier la macro?
 
Merci


Message édité par Overdos3 le 22-10-2014 à 12:46:01
Reply

Marsh Posté le 21-10-2014 à 18:42:51   

Reply

Marsh Posté le 22-10-2014 à 10:24:05    

 
           Bonjour, bonjour !
 
           Conformément aux règles du forum, merci d'éditer le message et de baliser le code grâce à l'icône dédiée !
 
           Sinon pour Excel une cellule vide vaut zéro trompant ainsi la fonction IsNumeric (à la condition de tester une cellule !).
           Il suffit juste de tester si la cellule n'est pas vide …
  

Reply

Marsh Posté le 22-10-2014 à 12:17:27    

Marc L a écrit :

 
           Bonjour, bonjour !
 
           Conformément aux règles du forum, merci d'éditer le message et de baliser le code grâce à l'icône dédiée !
 
           Sinon pour Excel une cellule vide vaut zéro trompant ainsi la fonction IsNumeric (à la condition de tester une cellule !).
           Il suffit juste de tester si la cellule n'est pas vide …
  


 
Merci pour ton retour Mark,
 
La fonction Isnumeric dans mon cas teste bien une seule cellule. Si par exemple la Cellule A2 est vide, ou n'est pas un chiffre alors l'ignorer du ranking ...
 
Malheureusement j'ai l'impression qu'il y a un soucis dans la Macro...

Reply

Marsh Posté le 22-10-2014 à 13:22:39    

Salut,
 
j'utiliserai un if Range(col&i).value <> "" then

Reply

Marsh Posté le 22-10-2014 à 14:31:37    

 
            Oui effectivement il y a bien un souci dans le code car, comme je l'ai indiqué, faut-il encore tester une cellule !
 

Reply

Marsh Posté le 22-10-2014 à 15:06:38    

en fait le soucis vient des guillemets car avec : IsNumeric(" & col & i & " )
c'est la chaine de caractères " & col & i & " qui est testée et non pas la cellule a laquelle les variables col et i font référence
il faut écrire sans les guillemets comme pour Range(rk & i) : IsNumeric(col & i)


Message édité par DamienCYS le 22-10-2014 à 15:07:34
Reply

Marsh Posté le 22-10-2014 à 16:21:45    

 
            Non plus car ce n'est toujours pas une cellule ‼ Voir donc l'aide VBA de cette fonction …
 
            Pour tester une cellule, il faut au moins la préciser dans le code d'une manière ou d'une autre (au moins sept !) …
 

Reply

Marsh Posté le 27-10-2014 à 21:11:49    

Bonsoir les amis,

 

Voici le nouveau code que j'ai tenté et c'est presque fonctionnel:

 
Code :
  1. Sub Rank()
  2.     col = "A" 'colonne où se trouvent les valeurs à ranker
  3.     rk = "B" 'colonne où les rangs seront affichés
  4.     Lastrow = Range(col & Rows.Count).End(xlUp).Row
  5. For i = 14 To Lastrow 'ligne où se trouvent la première valeur à ranker
  6.         If Range(col & i).Value <> "" Then 'si la cellule est vide alors rank la prochaine
  7.             Range(rk & i).Formula = "=RANK(" & col & i & "," & col & ":" & col & ",1)"
  8.         End If
  9.     Next i
  10. End Sub
 

En effet, la macro fonctionne dans le sens où si une case est vide, elle ira vérifier la prochaine case. Le soucis intervient quand deux cases vides se suivent ... La macro va passer la première case essaiera de donner un rang à la seconde mais ne pourra pas car elle est vide. Résultat, sur excel, j'aurai #Value dans la case.

 

Quelqu'un aurait-il un moyen de rectifier la macro afin qu'elle passe à la prochaine case à chaque fois que la cellule est vide?

 


Milles mercis :bounce:

 

Edit: problème réglé :) j'ai modifié la macro en conséquent  


Message édité par Overdos3 le 28-10-2014 à 13:29:54
Reply

Marsh Posté le 27-10-2014 à 22:36:42    

Bonsoir,
 
Je n'ai lu qu'en travers, ton problème devrait se résoudre si on lieu de vouloir attribuer ton rank à la case qui suit tu le gardes en mémoire dans une variable. Puis c'est simplement une fois que tu as une case non vide que tu vas attribuer le rank stocké dans ta variable.

Reply

Marsh Posté le 28-10-2014 à 19:24:31    

MaybeEijOrNot a écrit :

Bonsoir,
 
Je n'ai lu qu'en travers, ton problème devrait se résoudre si on lieu de vouloir attribuer ton rank à la case qui suit tu le gardes en mémoire dans une variable. Puis c'est simplement une fois que tu as une case non vide que tu vas attribuer le rank stocké dans ta variable.


 
Salut Eij ... Or maybe not,
 
Problème résolu voici la macro:
 

Code :
  1. Sub Rank()
  2.     col = "A" 'colonne où se trouvent les valeurs à ranker
  3.     rk = "B" 'colonne où les rangs seront affichés
  4.     Lastrow = Range(col & Rows.Count).End(xlUp).Row
  5. For i = 14 To Lastrow 'ligne où se trouvent la première valeur à ranker
  6.         If Range(col & i).Value <> "" Then 'si la cellule est vide alors rank la prochaine
  7.             Range(rk & i).Formula = "=RANK(" & col & i & "," & col & ":" & col & ",1)"
  8.         End If
  9.     Next i
  10. End Sub

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed