Fonction Excel Personnalisée? - VB/VBA/VBS - Programmation
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...
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?
Marsh Posté le 03-10-2002 à 08:10:19
ReplyMarsh 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 ??
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 pour l'instant !!)
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?
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 !
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 :
|
dans la variable compteur il y a le nombre de ligne de ton tablo
j'espere avoir bien compris ce ke tu voulais
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
********
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