Transformer une formule en code VBA

Bonjour

Dans un tableau, j' utilise une formule

=SIERREUR(PETITE.VALEUR(SI($A3:$J3-$A$15>0;$A3:$J3;"");COLONNE(A$2));0)

Elle me permet de reporter une date inscrite dans une cellule, sur un autre tableau.

J'aimerais remplacer cette formule par un code VBA car si je fais une erreur en inscrivant une date dans une cellule et que je l'efface , la formule s'efface aussi.

Ci joint mon tableau

Merci de l'aide apportée

Cdt

T

231formule-en-vba.xlsx (66.29 Ko)

Bonjour,

Si tu as besoin de l'équivalent VBA ... pour la cellule O3 ... par exemple ...

Range("O3").FormulaArray = "=IFERROR(SMALL(IF(RC1:RC10-R15C1>0,RC1:RC10,""""),COLUMN(R2C[-14])),0)"

En espèrant que cela t'aide ...

Bonjour,

Quand tu veux connaître une formule en Anglais qui se trouve être en Français dans une cellule, tu vas dans la fenêtre d'exécution du VBE et tu entre par exemple :

?Range("A1").Fomula

Puis appui sur la touche Entrée et tu aura le résultat !

Salut Theze ...

Très Bon Conseil ...

Cette astuce devait être connue de tous ...

Bonjour 007 et merci pour la réponse

J'ai essayer et le code fonctionne parfaitement bien, mais serait il possible de l'adapter à une plage de cellules , dans mon exemple de O à X, les 10 colonnes concernées ?

Par contre je n'ai pas bien compris l'astuce de Thèse

dans la fenêtre d'exécution du VBE ......??

?Range("A1").Fomula.....c'est déjà de l'anglais ??

Et encore merci

T

Content que la formule te convienne ...

Si tu as besoin que ta plage entière soit copiée .. tu peux tester la macro suivante :

Sub CopierFormule()
Range("O3").FormulaArray = "=IFERROR(SMALL(IF(RC1:RC10-R15C1>0,RC1:RC10,""""),COLUMN(R2C[-14])),0)"
Range("O3").Copy Destination:=Range("P3:X3")
Range("O3:X3").Copy Destination:=Range("O4:O10")
End Sub

En espèrant que cela t'aide ...

Bonjour,

Quand tu es dans le VBE (l'éditeur de code, Alt + F11) tu peux afficher une fenêtre qui s'appelle la fenêtre d'exécution (Ctrl + G) et ensuite dans cette fenêtre tu peux y faire plusieurs choses comme par exemple y faire afficher des résultats avec l'instruction la plus connue : Debug.Print

Un simple exemple :

Sub Test()
    Debug.Print "Ceci est un test !"
    Debug.Print 53/8
End Sub

Et bien cette fenêtre peut te permettre de faire bien d'autre chose et donc en particulier de traduire en Anglais une formule qui se trouve être en Français dans une cellule, il suffit de faire précéder l'instruction du point d'interrogation !

Bonsoir 007.

Un grand merci car tout fonctionne à merveille. J'ai réussit à mettre le code pour tous mes tableaux, et tout est OK

Je me permets deux petites questions.

1) Au lieu d'indiquer dans Copy destination : =range ("U1:U10) c'est a dire le nombre exactes de cellules ou doit être mis la formule, ne pourrait on pas dire jusqu' à la dernière cellule de la ligne où la cellule de la colonne 1 est non vide (en colonne 1 pourrait figurer des noms par exemple) ?

2) comment se défini

RC7 : ??

et

R35C7 : Ligne 35 de la colonne 7 avec des $ ?

Je remercie également Theze pour son astuce vraiment intéressante

Bonne soirée

Cdt

T

Content que cela fonctionne comme tu le voulais ...

Merci ... pour tes remerciements ...

Concernant ta dernière question ... on peut effectivement utiliser une variable pour moduler la copie ...

A titre d'exemple :

Dim derl As Long
' définir la dernière ligne en fonction de la Colonne A
derl = ActiveSheet.Cells(Application.Rows.Count, "A").End(xlUp).Row
' nouvelle version de la Copie
Range("O3:X3").Copy Destination:=Range("O4:O" & derl)

J'espère que cette expliction est assez claire ...

Rechercher des sujets similaires à "transformer formule code vba"