[VBA-Excel] Fonction rebelle (maj de cellule)

Fermé
oaglas - 6 mai 2005 à 20:56
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 - 10 mai 2005 à 12:38
Re-Bonjour à tous ,

J'ai posté un 1er message mais en me relisant j'avoue que cela m'a moi même fatigué, je reformule :

Je débute avec VBA mais c'est plutôt laborieux : Voilà quelques jours maintenant que je cherche le moyen de modifier le contenu d'une cellule via une fonction personnalisée (que j'ai nommé IFEXIST) exécutée à partir d'autre cellule.

C'est la dernière ligne de la fonction qui semble poser problème (sans elle, cela fonctionne plutôt bien, mais avec elle la fonction renvoie #VALEUR). Je n'emploie visiblement pas les bons arguments pour convaincre cette fonction de faire ce que j'attends d'elle, peut-être même que je poursuis là un voeu pieux ; pour une raison que j'ignore, il n'est peut être pas possible de modifier une autre cellule que celle qui exécute la fonction ou bien je n'ai pas la bonne syntaxe pour le faire... Qu'en pensez-vous ?

Function IFEXIST(ParamArray Prédécesseur() As Variant) 
 
 
    Dim colSelection, colDatefin, colDatedeb, i As Integer 
    Dim debFlag As Boolean 
    Dim datedeb, datefinPrec As Date 
 
 
    colDatedeb = 5 
    colDatefin = 6 
    colSelection = 10 
    datedeb = Cells(ActiveCell.Row - 1, colDatedeb) 
    'MsgBox datedeb, vbQuestion + vbOKOnly 
 
    debFlag = True 
 
   For i = 0 To UBound(Prédécesseur()) 
         LigSelection = Prédécesseur(i) + 1 
         If Cells(LigSelection, colSelection) = "Vrai" Then 
 
              datefinPrec = Cells(LigSelection, colDatefin).Value 
              If datefinPrec > datedeb Then 
                datedeb = datefinPrec 
              End If 
 
              If debFlag Then 
                IFEXIST= IFEXIST & Prédécesseur(i) 
                debFlag = False 
              Else 
                IFEXIST= IFEXIST & ";" & Prédécesseur(i) 
              End If 
           End If 
    Next i 
                '-----------------------------ci-après la ligne posant problème ----
                ActiveCell(ActiveCell.Row, colDatedeb).Value = datedeb 
End Function 
  
A voir également:

5 réponses

sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
7 mai 2005 à 12:43
ce que j'ai compris ta fonction n'est pas reentrante!
utilise une variable resultat pour ton traitement à l'interieur de la fonction non pas le nom de la fonction IFEXIST
0
Merci sam, en fait j'ai décidé de contourner le pb autrement, par contre, j'ai un autre petit soucis avec un filtre automatique qui me laisse un peu perplexe ; j'ai enregistré une macro pour récupérer le code relatif à l'application d'un filtre automatique qui fonctionne très bien manuellement, mais lorsque j'exécute le code généré, j'ai la désagréable suprise de constater qu'en dehors des titres de colonnes (la ligne 1), aucune ligne n'est retenue, et ce, alors le critère de filtre (visible sur clic sur la flèche située sur la colonne) est bien le bon (VRAI dans le cas présent). Tu n'aurais pas une idée sur le sujet des fois ? Ci-après le bout de code :

Selection.AutoFilter Field:=10, Criteria1:="VRAI" '<- la ligne posant pb
Rows("1:540").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 688
9 mai 2005 à 23:21
bonjour

pour que ta ligne fonctionne, il faut sélectionner tes données
par exemple avec : Range("a1").CurrentRegion.Select

0
Merci de t'être penché sur la question gbinforme mais sans vouloir abuser de ton temps, j'aimerais te soumettre une question à laquelle je n'ai pas pu apporter de réponse : J'ai créé une fonction REF() censée retourner des références de cellules concaténes avec des points-virgules (en fonction d'un test préalable) type :

REF(B24;B25;B26;B27;B28;B29;B30;B31;B32)
-> renvoit par exemple B25;B28;B29;B30...

seulement lorsque je tente d'imbriquer cette fonction à une fonction standard d'Excel, alors là ça capote net. En gros ça donne quelque chose du genre :

SOMME(REF(B24;B25;B26;B27;B28;B29;B30;B31;B32))*10/100
-> renvoit #VALEUR!

Aurais-tu une idée sur la conduite à tenir ? Sachant que je dois gérer un ensemble de lignes flottantes pouvant être associées ou non à un ou plusieurs calculs situés à l'intérieur d'autres cellules.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sam3000 Messages postés 1225 Date d'inscription mercredi 22 décembre 2004 Statut Membre Dernière intervention 13 juin 2005 144
10 mai 2005 à 12:38
si je comprend bien REF retourne une chaine de caracteres? tu veut faire un calcul chaine*entier? ça marche pas!
ou l'inverse? REF retourne des references de cellules à partir d'un parametre chaine?
0