Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
834 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2240888
Overdos3
Posté le 21-10-2014 à 18:42:51  profilanswer
 

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
mood
Publicité
Posté le 21-10-2014 à 18:42:51  profilanswer
 

n°2240926
Marc L
Posté le 22-10-2014 à 10:24:05  profilanswer
 

 
           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 …
  

n°2240935
Overdos3
Posté le 22-10-2014 à 12:17:27  profilanswer
 

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...

n°2240938
DamienCYS
Posté le 22-10-2014 à 13:22:39  profilanswer
 

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

n°2240948
Marc L
Posté le 22-10-2014 à 14:31:37  profilanswer
 

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

n°2240965
DamienCYS
Posté le 22-10-2014 à 15:06:38  profilanswer
 

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
n°2240981
Marc L
Posté le 22-10-2014 à 16:21:45  profilanswer
 

 
            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 !) …
 

n°2241378
Overdos3
Posté le 27-10-2014 à 21:11:49  profilanswer
 

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
n°2241394
MaybeEijOr​Not
but someone at least
Posté le 27-10-2014 à 22:36:42  profilanswer
 

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.

n°2241576
Overdos3
Posté le 28-10-2014 à 19:24:31  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

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

 

Sujets relatifs
[Excel VBA] rech cellule comportant plusieurs chaines de caractèreEnvois d'un double tableau à une fonction
Aide sur une fonction retournat un pointeur sur char. MerciBesoin d'aide (programmation C)
Utiliser getClass() dans une fonctionproblème avec jquery et fonction load()
Aide correctif pour javascript matrix sous ffComment modifier la fonction d'un bouton
Plus de sujets relatifs à : [Excel VBA]Fonction Rank ignorer cellule vide et passer à la suivante


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR