Fonction Excel Personnalisée?

Fonction Excel Personnalisée? - VB/VBA/VBS - Programmation

Marsh Posté le 30-09-2002 à 18:58:59    

Salut,
 
Je désire créer une fonction excel qui permettra de faire le tri d'éléments d'une colonne mais en ayant comme contrainte un nombre maximal (à tout ces éléments pris en compte). De plus, ces cellules trièes (leur valeur) devront être affichées sur des lignes inférieures à la cellule où la fonction est appelée.
 
J'ai écrit la fonction mais comme j'utilise pas souvent VB... il me semble que j'ai fait n'importe quoi, le cacul de la fonction me donnant une erreur "#VALEUR!"
 
Voici ce que j'ai fait:
 
*********************************************
Function SOMA(plage As Range, cible As Integer)
 
Dim i As Integer
Dim lignes As Integer
Dim ciblereste As Integer
 
ciblereste = (cible * -1) 'pour avoir la valeur absolue
lignes = Range(plage).Rows 'Nombre de ligne de la plage
 
 
Do
If Range(plage(i, 0)) <= (cible * -1) Then
ActiveCell.Offset(i, 0).Value = Range(plage(i, 0)).Value
Else: ActiveCell.Offset(i, 0).Value = ciblereste
 
End If
 
ciblereste = ciblereste - Range(plage(i, 0)).Value
i = i + 1
 
Loop Until ciblereste = 0
 
End Function
***********************************************
 
Merci d'avance à celui qui pourra m'aider :)


Message édité par mystsith le 30-09-2002 à 19:28:15
Reply

Marsh Posté le 30-09-2002 à 18:58:59   

Reply

Marsh Posté le 30-09-2002 à 20:01:55    

Si tu donnais un exemple de ce que tu veux faire (avant ton tri et apres le tri) ca pourrait nous aider a comprendre ton truc...

Reply

Marsh Posté le 30-09-2002 à 21:19:01    

En fait il s'agit de distinguer des lots dans une plage de cellules tout en s'arrêtant à une valeur cible...
 
Par exemple j'ai une plage de cellule avec comme valeurs: 2,4,3,1... et comme valeur cible 4 donc on a 2 lots les 1° et 2° cellules de la plage considérée (2+2=4) mais il reste 2=4-2 dans la 2° cellule.
C'est 2 lots doivent être affichés en dessous de la cellule où  la fonction est appelée.
 
Ai je fais des erreurs de syntaxe?

Reply

Marsh Posté le 01-10-2002 à 18:25:31    

Up :)

Reply

Marsh Posté le 03-10-2002 à 08:10:19    

Perso j'ai rien pompé à ton pb


---------------
Mes guitares, ampli, et effets sont en vente !
Reply

Marsh Posté le 03-10-2002 à 11:45:09    

bon dis moi si je me trompe tu veut balayer une colone sans savoir le nombre de ligne c ca ??  :??:


Message édité par __Oto__ le 03-10-2002 à 11:45:21
Reply

Marsh Posté le 03-10-2002 à 13:50:28    

MystSith a écrit a écrit :

En fait il s'agit de distinguer des lots dans une plage de cellules tout en s'arrêtant à une valeur cible...
 
Par exemple j'ai une plage de cellule avec comme valeurs: 2,4,3,1... et comme valeur cible 4 donc on a 2 lots les 1° et 2° cellules de la plage considérée (2+2=4) mais il reste 2=4-2 dans la 2° cellule.
C'est 2 lots doivent être affichés en dessous de la cellule où  la fonction est appelée.
 
Ai je fais des erreurs de syntaxe?



J'ai rien panné non plus à vrai dire !!!
 
Tu nous le refait avec un exmple un peu mieux ?? genre les cellules avant.. et les cellules après passage de ta fonction (enfin, celle qui marche pas :D pour l'instant !!)


---------------
Tout cul tendu mérite son dû
Reply

Marsh Posté le 03-10-2002 à 22:42:10    

C'est ça __oto__:)
 
Bon j'ai laissé tombé la fonction... inutile (pas de valeur renvoyée) ;)
 
Par contre comment fait on pour que une plage de cellule désignée dans une procédure, prenne automatiquement en compte l'ajout de nouvelles lignes sur la feuille de calcul?

Reply

Marsh Posté le 03-10-2002 à 23:09:56    

J'pense que si tu désigne ta plage de cellule en la désignant par un "nom", c'est à dire en l'identifiant directement dans ton/ta classeur/feuille par un nom et pas par un A1:B10 dans une macro, ben ça devrait se mettre à jour tout seul en insérant des lignes... enfin, à tester quoi !  :pt1cable:


---------------
Tout cul tendu mérite son dû
Reply

Marsh Posté le 04-10-2002 à 11:47:24    

ui ou tu balaye une premiere fois en testant si cellule vide pour avoir le nombre de ligne de ton tableau
 

Code :
  1. Set obj = CreateObject("excel.application" )
  2. obj.Workbooks.Open ("c:\toto.xls" )
  3. i = 1
  4. compteur = 0
  5. toto = 1
  6. Do While toto = 1
  7. If obj.ActiveSheet.Range("A" & i) = "" Then
  8. toto = 2
  9. Else
  10. compteur = compteur + 1
  11. i = i + 1
  12. End If
  13. Loop
  14. MsgBox compteur


 
dans la variable compteur il y a le nombre de ligne de ton tablo
j'espere avoir bien compris ce ke tu voulais  :D


Message édité par __Oto__ le 04-10-2002 à 11:47:57
Reply

Marsh Posté le 04-10-2002 à 11:47:24   

Reply

Marsh Posté le 04-10-2002 à 22:45:32    

Merci ça va bc m'aider, surtout ' Range("A" & i) = "" ' :)
 
En affectant une procédure à un bouton voici ce que j'avais déjà obtenue (en limitant à 1 essai précis pas encore à toute la feuille)
 
*******
Private Sub Fifo_Click()
 
    Dim i As Integer
    Dim c As Range
     
    Range("B6:B12" ).Select
     
    For Each c In Selection.Cells
         
        If c < 0 Then
         
            c.Offset(0, 3).Value = (c.Value * -1)
             
            Dim lignes As Integer
            Dim ciblereste As Integer
                         
            ciblereste = ((c.Offset(0, 0).Value) * -1)
             
            lignes = 7
            i = 1
             
                 
        Do
            If c.Offset(-4 - (-i), 0).Value <= ciblereste Then
                c.Offset(i, 3).Value = c.Offset(-4 - (-i), 0).Value
                 
                Else: c.Offset(i, 3).Value = ciblereste
                 
            End If
         
            c.Offset(i, 4).Value = c.Offset(-4 - (-i), 1).Value
             
            ciblereste = ciblereste - c.Offset(-4 - (-i), 0).Value
            i = i + 1
                               
        Loop Until ciblereste <= 0
     
        End If
     
    Next c
     
End Sub
********

Reply

Sujets relatifs:

Leave a Replay

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