Transformer formule Excel en VBA

Bonjour,

J'essaie de transformer une formule excel qui fonctionne bien en vba afin que les cellules soient vides et que je puisse y écrire.

J'ai essayé d'enregistrer une macro pour me donner des pistes mais ça ne marche pas du tout.

Quelqu'un pourrait-il m'aider svp ?

Merci par avance

Bonjour CorrineR

Vous voulez inscrire la formule via VBA ou faire le calcul pour inscrire des 1/vide

Votre demande n'est pas claire...

A+

Désolée ne pas avoir été claire.

Je souhaite appliquer la formule par vba pour pouvoir ensuite écrire dans la cellule.

Là, vu que j'ai la formule dans chaque cellule, je suis bloquée. Sauf qu'en vous précisant ma demande je me rends compte que ce sera compliqué.

Vu que la formule écris "1" dans la celulle et qu'ensuite j'utilise une mcf pour colorer.

Dans l'idée je souhaite colorer la cellule selon les dates préalablement remplies et y écrire le nom du chantier.

J'espère avoir été claire cette fois-ci

Re,

Un diagramme de Gantt se fait en général avec une formule pas simplement avec une valeur

De plus vous ne pouvez pas inscrire le nom d'un chantier dans ces cellules puisqu'elles sont utilisées pour le diagramme

Je pense que vos idées ne sont pas très claires, ou alors c'est moi qui en comprends pas bien,
mais je ne pourrais pas vous aider plus.

Désolé

Bonjour,

Il me semble qu'il y a une erreur dans la formule sur les jours fériés :

O$5<>JoursFeriés
Il faut rechercher la valeur de la date dans la matrice JourFérié ex :
=SI(ESTNA(A1=RECHERCHEV(A1;JoursFeriés;1;FAUX));"Non";"Oui")

Bonjour tout le monde !

Pour moi c'est gérable sans VBA en modifiant la MFC. Actuellement la mise en forme est appliquée en 2 temps, une formule qui renvoie rien ou 1, et une MFC qui colore les 1. En fait c'est faisable en une fois, en mettant la formule directement dans la MFC. Comme elle ne dépend plus du contenu de la cellule, on peut du coup inscrire ce qu'on veut dedans...

La formule révisée (simplifiée + tient compte de la remarque de @ouisansdoute) :

=SIERREUR(SI(ET(O$5>=$G6;O$5<=$H6;NB.SI(JoursFeriés;O$5)=0;JOURSEM(O$5;2)<6);1;0);0)

Le fichier modifié :

Est-ce que c'est possible d'avoir cette formule en vba ? =SIERREUR(SI(OU(JOURSEM(O$5;2)=6;JOURSEM(O$5;2)=7);"";SI(ET(O$5>=$G6;O$5<=$H6;O$5<>JoursFeriés);1;""));"")

J'ai essayé par macro mais ça marche pas

Sub Calcul_2()
'' Calcul_2 Macro
'If (Weekday(R5C, 2) = 6 Or Weekday(R5C, 2) = 7) And (R5C >= RC7 Or R5C <= RC8 Or R5C <> JoursFeriés) Then Range("g17").Value = 1
Else
Range("O7").Select
End Sub

Re-bonjour,

Pour colorer les cellules entre date de début et date de fin d'une ligne SAUF les week-end et fériés avec la mise en forme conditionnelle et sans passer par VBA. Sélectionner la plage à colorer à partir de O6 puis, dans la MFC saisir la formule :

=ET($H6>$G6;O$5>=$G6;O$5<=$H6;JOURSEM(O$5)<>6;JOURSEM(O$5)<>7;SIERREUR(RECHERCHEV(O$5;JoursFeriés;1;FAUX);VRAI))

Les cellules de la plage restent libres de saisie et la coloration apparait sur la ligne aux jours pertinents.

merci pour votre réponse.

J'essaie de suite.

LA formule de Pedro est meilleure. Plus directe lisible et épurée.

J'ai essayé par macro mais ça marche pas

Sub Calcul_2()
'' Calcul_2 Macro
'If (Weekday(R5C, 2) = 6 Or Weekday(R5C, 2) = 7) And (R5C >= RC7 Or R5C <= RC8 Or R5C <> JoursFeriés) Then Range("g17").Value = 1
Else
Range("O7").Select
End Sub

Le problème c'est que l'on ne défini pas les cellules comme ceci dans VBA : R5C. Il faut utiliser la syntaxe Range("A1") ou Cells(1, 1). Le numéro de ligne ou de colonne peut être rendu variable, par exemple Range("A" & Ligne) ou Cells(Ligne, Colonne). Ligne et Colonne peuvent être défini à l'aide de boucles par exemple (For Lig = 2 To 100...Next Lig) ou selon la cellule active si le déclenchement de la macro est lié à un évènement (Ligne = Target.Row).

j'ai un soucis avec les week end. il prend le vendredi et le samedi au lieu du samedi et dimanche

j'ai un soucis avec les week end. il prend le vendredi et le samedi au lieu du samedi et dimanche

Si le 2ème paramètre de la fonction JOURSEM est omis, alors par défaut 6 correspond à vendredi, et 7 à samedi.

Pedro, pourrais-tu me préciser ce que tu entends par :"Si le 2ème paramètre de la fonction JOURSEM est omis, alors par défaut 6 correspond à vendredi, et 7 à samedi." stp

c'est bon j'ai trouvé toute seule ! au moins ça...

merci bcp pour votre aide

Du coup :
- Est ce que tu as compris à quoi je faisais référence avec ce 2ème argument de la fonction JOURSEM ?
- Est ce que ton problème est résolu ?

je pense avoir compris. je te remercie pour ton aide.

j'ai moins compris pour passer en vba mais il faut que je m'y mette !

j'en aurais besoin pour un formulaire.

Bonjour,

Meme aprés la bataille voici la formule en vba

Function titi(c As Range)
If Weekday(c, 2) > 6 Then
titi = "We"
Else
If (c >= c.Offset(1, -(c.Column() - 7)) And c <= c.Offset(1, -(c.Column() - 8))) And Application.CountIf(Range("JoursFeriés"), c) = 0 Then
titi = "on bosse"
Else
titi = " Jours feries ou hors delais"
End If
End If
End Function

Cdlt

Merci pour votre réponse. C'est super intéressant.

je pense avoir compris. je te remercie pour ton aide.

Rechercher des sujets similaires à "transformer formule vba"