[VBA-Excel] Fonction rebelle (maj de cellule)
oaglas
-
sam3000 Messages postés 1225 Date d'inscription Statut Membre Dernière intervention -
sam3000 Messages postés 1225 Date d'inscription Statut Membre Dernière intervention -
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 ?
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:
- [VBA-Excel] Fonction rebelle (maj de cellule)
- Fonction si et excel - Guide
- Excel cellule couleur si condition texte - Guide
- Liste déroulante excel - Guide
- Excel compter cellule couleur sans vba - Guide
- Proteger cellule excel - Guide
5 réponses
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
utilise une variable resultat pour ton traitement à l'interieur de la fonction non pas le nom de la fonction IFEXIST
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
Selection.AutoFilter Field:=10, Criteria1:="VRAI" '<- la ligne posant pb
Rows("1:540").Select
Selection.Copy
Workbooks.Add
ActiveSheet.Paste
bonjour
pour que ta ligne fonctionne, il faut sélectionner tes données
par exemple avec : Range("a1").CurrentRegion.Select
pour que ta ligne fonctionne, il faut sélectionner tes données
par exemple avec : Range("a1").CurrentRegion.Select
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question