Excel : passer un range "complexe" à une fonction

Excel : passer un range "complexe" à une fonction - VB/VBA/VBS - Programmation

Marsh Posté le 20-03-2015 à 11:56:05    

salut,
 
je cherche à effectuer des opérations sur les cellules d'un range dans une fonction personnalisée (via un array en l'occurence mais on s'en fout).
 

Code :
  1. Function ssabs(zr As Range) As Double
  2. Dim zz As Variant
  3. Dim zt()
  4. zt = zr.Value
  5. For Each zz In zt
  6.    'opérations à effectuer
  7. Next
  8. End Function


 
Cela marche bien si je lance sur un range simple genre "A1:C10" mais tout s'arrête si j'essaie de le faire avec un range plus compliqué comme "A1:B5;C1:C10" => il y a un ";" je pense qu'excel interprète cela comme un 2è argument et la fonction ne le prévoyant pas ca merdoit.
 
Vous auriez une idée pour y arriver ?
 
Merci par avance


Message édité par Gusdabo le 20-03-2015 à 16:33:49
Reply

Marsh Posté le 20-03-2015 à 11:56:05   

Reply

Marsh Posté le 20-03-2015 à 14:33:13    

 
           Bonjour,
 
           il y a une icône dans l'éditeur de message pour baliser le code !
 
           Comme la fonction ne renvoie rien elle a plutôt l'air d'une procédure !   Conception à revoir …
 
           Et comme une boucle est souvent inutile pour modifier une plage de cellules, quelles sont les opérations ?
 
           __________________________________________________________________________________________
           Je suis Charlie  -  Je suis Bardo
 

Reply

Marsh Posté le 20-03-2015 à 16:31:58    

Il s'agit de faire la somme des valeurs absolues des nombres compris dans le range. Il me semble qu'il faut bien une fonction, donc, le but étant de récupérer cette somme dans une cellule.
 
J'ai modifié un peu le code, fait rapidement tout à l'heure : mon array doit contenir les valeurs et non les cellules..
 
Dans la boucle j'aurai juste :
sabs = sabs + abs(zz)
 
J'avais voulu enlever mon opération particulière pour donner un caractère + général.
 
Merci par avance


Message édité par Gusdabo le 20-03-2015 à 16:32:41
Reply

Marsh Posté le 21-03-2015 à 02:00:54    

 

Code :
  1. Function dAbs#(ParamArray PA())
  2. For Each R In PA
  3.     For Each V In R:  dAbs = dAbs + Abs(V.Value):  Next
  4. Next
  5. End Function

 

Reply

Sujets relatifs:

Leave a Replay

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