Formule conditionnelle en VB

bonjour , j'ai 3 formules que je glisse à chaque fois jusqu'à la fin de la colonne

j'aimerais avoir 3 boutons qui mettrons ces formules dans leurs cellules respectives . C'est à dire :

formule 1 dans (P1:P65000)

formule 2 dans (AB1:AB65000)

formule 3 dans (AC1:AC65000)

voici les formules :

1/ =SI(ESTERREUR(SI(D3<>"";SI(K3<>"";SI(N3<>"";N3-K3;AUJOURDHUI()-K3);"");""));"0"(SI(D3<>"";SI(K3<>"";SI(N3<>"";N3-K3;AUJOURDHUI()-K3);"");""))

2/ =SI(ESTERREUR(SI(K3<>"";SI(D3<>"";K3-JOUR(K3)+1;"");""));"0";(SI(K3<>"";SI(D3<>"";K3-JOUR(K3)+1;"");""))

3/ =SI(ESTERREUR(SI(D3<>"";SI(N3<>"";N3-JOUR(N3)+1;"");""));"0"(SI(D3<>"";SI(N3<>"";N3-JOUR(N3)+1;"");""))

Merci infiniment.

Salut j.sparo

Voici le code que tu peux utiliser

Sub CopieFormule()
  Dim Dlig As Long, Lig As Long
  ' Avec la feuille nommée XXX
  With Sheets("NomDeLaFeuille")
    ' Inutile de remplir les formules sur toute la feuille

    ' Récupérer la dernière ligne remplie de la feuille
    ' si la colonne A est toujours remplie, on se base sur cette colonne
    Dlig = .Range("A" & Rows.Count).End(xlUp).Row
    ' Inscrire la formule 1 dans la première cellule de la colonne
    ' formule 1 dans (P1:P65000)
    .Range("P3").FormulaLocal = "=SI(ESTERREUR(SI(D3<>"""";SI(K3<>"""";SI(N3<>"""";N3-K3;AUJOURDHUI()-K3);"""");""""));0;(SI(D3<>"""";SI(K3<>"""";SI(N3<>"""";N3-K3;AUJOURDHUI()-K3);"""");"""")))"
    ' Remplir toutes les lignes
    .Range("P3:P" & Dlig).FillDown
    ' Inscrire la formule 2 dans la première cellule de la colonne
    ' formule 2 dans (AB1:AB65000)
    .Range("AB3").FormulaLocal = "=SI(ESTERREUR(SI(K3<>"""";SI(D3<>"""";K3-JOUR(K3)+1;"""");""""));0;(SI(K3<>"""";SI(D3<>"""";K3-JOUR(K3)+1;"""");"""")))"
    ' Remplir toutes les lignes
    .Range("AB3:AB" & Dlig).FillDown
    ' Inscrire la formule 3 dans la première cellule de la colonne
    ' formule 3 dans (AC1:AC65000)
     .Range("AC3").FormulaLocal = "=SI(ESTERREUR(SI(D3<>"""";SI(N3<>"""";N3-JOUR(N3)+1;"""");""""));0;(SI(D3<>"""";SI(N3<>"""";N3-JOUR(N3)+1;"""");"""")))"
    ' Remplir toutes les lignes
    .Range("AC3:AC" & Dlig).FillDown
  End With
End Sub

A toi de voir si tu sépares en plusieurs étapes ou pas

A+

Parfait, merci beaucoup

Je viens d'avoir un autre caprice!

mon fichier traine un peu partout dans le monde et par conséquent le format de date change et devient : mm/jj/aaaaa

comment je pourrais intégrer dans la macro précédente un format de date du type "jj/mm/aaaa pour par exemple les colonnes : L,M,N,O

et pour les colonne A et B le format : mm/aaaa

Je vous remercie d'avance.

Bonjour j.sparo

Ce n'est pas compliqué, tu peux utiliser l'enregistreur de macro pour ça

Columns("L:O").NumberFormat = "dd/mm/yyyy"
Columns("A:B").NumberFormat = "mm/yyyy"

A+

bonjour,

ca marche parfaitement, mais pour le format standard, je mets quoi?

merci


bonjour,

c'est bon, le mot clé s'était : "General"

merci vraiment beaucoup pour votre aide, vous etes des pro

Bonsoir,

je viens de rencontrer un problème avec cette macro. En effet,étand donné que la macro remplie les valeurs jusqu'à la fin du fichier, dès que je veux ajouter une ligne ,il me dit que c'est impossible car la dernière cellule du fichier n'est pas vide.

comment je pourrais reprendre cette formule en limitant jusqu'à la ligne 30000 ?

Sub CopieFormule()
      Dim Dlig As Long, Lig As Long
      ' Avec la feuille nommée XXX
     With Sheets("PSLI")
        ' Inutile de remplir les formules sur toute la feuille

        ' Récupérer la dernière ligne remplie de la feuille
       ' si la colonne E est toujours remplie, on se base sur cette colonne
       Dlig = .Range("E" & Rows.Count).End(xlUp).Row

        ' Inscrire la formule duration dans la première cellule de la colonne
       ' formule 1 dans (Q3:Q65000)
       .Range("Q3").FormulaLocal = "=SI(ESTERREUR(SI(E3<>"""";SI(L3<>"""";SI(O3<>"""";O3-L3;AUJOURDHUI()-L3);"""");""""));0;(SI(E3<>"""";SI(L3<>"""";SI(O3<>"""";O3-L3;AUJOURDHUI()-L3);"""");"""")))"
        ' Remplir toutes les lignes
       .Range("Q3:Q" & Dlig).FillDown
       .Range("Q3:Q" & Dlig).NumberFormat = "General"

end with
end sub

Merci à vous.

Salut,

C'est ici que ça se passe

.Range("Q3:Q" & Dlig).FillDown
       .Range("Q3:Q" & Dlig).NumberFormat = "General"

Je penses tout de même que c'est plutôt simple à analyser

Bonjour,

finalement ce n'est pas cette formule le problème, il ne m'autorise pas d'ajouter des lignes mais je ne sais vraiment pas pourquoi, pouvez-vous m'aider please.

Merci

Re,

C'est tout à fait normal, si tu as, comme je le pense, des formules jusqu'à la dernière ligne

Il te faut supprimer les lignes inutiles et tu verras il n'y aura plus de problème

Ci joint le fichier vide,,j'ai tout supprimé mais impossible d'ajouter des lignes.

Merci

Bonsoir,

Finalement, j'ai remis les fichiers en xls et ça marche bien.

Le problème venait de la version d'excel.

Merci beaucoup

Rechercher des sujets similaires à "formule conditionnelle"