Formules dans le code VBA

Voici un code sur une page qui me permet d'ajouter des éléments d'un tableau lors d'un clic et de rajouter des formules dans les cases adjacentes :

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

With Sheets(Target.Value)

DerLig = .Range("A65536").End(xlUp).Row + 1

.Range("A" & DerLig) = Cells(Target.Row, 2)

.Range("C" & DerLig) = Cells(3, Target.Column)

.Range("F" & DerLig).Formula = "=E" & DerLig & "-D" & DerLig

.Range("I" & DerLig).Formula = "=IF(OR(A" & DerLig & "<>HsIndiv!$C$14,C" & DerLig & "<HsIndiv!$F$12,C" & DerLig & ">HsIndiv!$F$13,G" & DerLig & "<>""A payer""),"""",MAX(I$1:I" & DerLig - 1 & ")+1)"

.Range("H" & DerLig).Formula = "=IF(A" & DerLig & "=HsIndiv!$C$14),"""",""IF(OR(C" & DerLig & "<HsIndiv!$F$13,G" & DerLig & "<>""A payer""),"""",A" & DerLig

.Select

End With

End Sub

Mes questions :

1) vu que mon "target.value" peut être différent, les formules seront différentes selon les pages.

Ex: target.value = Ré donc onglet Ré formule colonne F

mais si target.value = Hs donc feuille Hs la formule ne sera pas la même.

Comment pourrais-je faire pour que ce code ajoute des formules différentes selon le choix "target.value" ?

2) j'ai ajouté une formule pour la colonne H mais cela ne fonctionne pas.

Je n'arrive pas à comprendre pourquoi.

Celui qui m'avait aidé à faire ce code était Math qui a été très gentil.

Merci d'avance.

Bonsoir,

HsIndiv correspond au nom de ta feuille ? là tu parles de "HS" dans ta demande.

Autre chose, dans ton code, remplace

.Range("F" & DerLig).Formula = "=E" & DerLig & "-D" & DerLig

Par

.Range("F" & DerLig).Formula = "=E" & DerLig & ":D" & DerLig

ou par

.Range("F" & DerLig)= Range("E" & DerLig & ":D" & DerLig)

A te relire

Dan

Voilà le fichier pour plus de clarté :

Donc en fonction du choix dans le mois en cours(Hs ou Ré), j'essaie de rajouter des formules d'indexation à la ligne suivante qui a été créée par le code VBA.

Ces formules d'indexation utilisent les conditions de la feuille HsIndiv pour la feuille Hs

Je voudrais savoir si on peut mettre des conditions dans le code pour ajouter des formules d'indexation différentes selon si "target.value" est Hs ou Ré car les formules d'indexation de la feuille Ré n'utilisent pas les conditions de la feuille Hs.

Je voudrais comprendre aussi comment on utilise les guillemets avec les & DERLIG car j'ai essayé de rajouter une formule mais ça ne fonctionne pas.

Merci beaucoup pour votre aide si précieuse.

Re

Tes explications ne me sont pas claires. Je ne vois pas ce que tu dois obtenir dans la feuille RE lorsque tu parles d'indexation.

Ce que je comprends dans ton fichier,

Partant d'une feuille mois "janvier ou février", tu choisis dans une liste déroulante RE ou HS. De là est exécutée une macro qui met des formules dans la feuille correpondante au choix de la liste déroulante (doc RE ou HS).

Ensuite que doit-on avoir comme formule et dans quelle colonne ?

Sinon peut être comme ceci :

If target = "HS" then
ta formule
Else: autre formule
End if

A te relire

Dan

oh super, je vais essayer ça.

Et pour les guillemets quand je concactène ? comment ça marche svp ?

Re

En gros tu mets les guillemets pour ce qui à considérer come texte.

vois dans mon post précédent :

Range("E" & derlig & " : D "..... )

E et : D sont considérer comme référence tandis que la variable Derlig va changer tout au long de l'exécution. donc si tu mets de guilemets entre Derlig, ton code va bloquer.

Amicalement

Dan

PS : oblie pas le RESOLU si tu en as terminé. Merci de ta participation

Oui bien sur, je respecte à chaque fois le résolu.

Mais je le mets quand j'ai fini le post et que cela fonctionne, hors étant novice en VBA je sais que je vais faire des erreurs, donc j'essaie et je reviens sur ce même post pour demander où je me suis trompé..

Bon voilà, en tant qu'amateur j'ai essayé ça :

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

With Sheets(Target.Value)

DerLig = .Range("A65536").End(xlUp).Row + 1

.Range("A" & DerLig) = Cells(Target.Row, 2)

.Range("C" & DerLig) = Cells(3, Target.Column)

.Range("F" & DerLig).Formula = "=E" & DerLig & "-D" & DerLig

If Target = "Hs" Then

.Range("I" & DerLig).Formula = "=IF(A" & DerLig & "=HsIndiv!$C$14,"""",IF(OR(C" & DerLig & "<HsIndiv!$F$13,G" & DerLig & "<>""A payer""),"""",A" & DerLig & ")"

.Range("J" & DerLig).Formula = "=IF(OR(A" & DerLig & "<>HsIndiv!$C$14,C" & DerLig & "<HsIndiv!$F$12,C" & DerLig & ">HsIndiv!$F$13,G" & DerLig & "<>""A payer""),"""",MAX(J$1:J" & DerLig - 1 & ")+1)"

.Range("K" & DerLig).Formula = "=IF(OR(A" & DerLig & "<>Heures!$B$5,G" & DerLig & "<>""A récupérer""),"""",MAX($K:K" & DerLig & ")+1)"

End If

If Target = "Ré" Then

.Range("G" & DerLig).Formula = "=IF(A" & DerLig & "<>Heures!$B$5,"""",MAX($G:G" & DerLig & ")+1)"

End If

.Select

End With

End Sub

Pour les IF THEN ça fonctionne c'est méga cool.

La formule de la colonne J apparaît bien,

mais la formule pour les colonnes I K et G n'apparait pas à la ligne suivante.

formule DerLig colonne I:

=SI(A676=HsIndiv!$C$14;"";SI(OU(C676<HsIndiv!$F$12;C676>HsIndiv!$F$13;G676<>"A payer");"";A676))

formule Derlig colonne J:

=SI(OU(A676<>HsIndiv!$C$14;C676<HsIndiv!$F$12;C676>HsIndiv!$F$13;G676<>"A payer");"";MAX(J$1:J675)+1)

formule Derlig colonne K:

=SI(OU(A676<>Heures!$B$5;G676<>"A récupérer");"";MAX(K$1:K675)+1)

Ou est l'erreur ? Pourquoi cela fonctionne avec J mais pas I et K ?

Quel casse-tête !!

NAD DAN ?

re,

Dans tes formules pour les colonnes K, G, je vois que tu fais intervenir une feuille HEURES. Or dans ton fichier on ne voit pas ces feuilles.

Pour la formule en I je vais voir cela

A bientôt

Dan

2save-resum.zip (87.28 Ko)

voilà avec l'onglet feuille..

merci Nad

Nad ?

Re,

Et non ! c'est pas Nad mais Dan....

Bon je ne t'avais pas oublié mais j'ai dû chipoter un peu pour finalement m'aperçevoir qu'il y avait erreur dans les formules.

Essaie donc ce code en lieu et place :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Derlig as integer
With Sheets(Target.Value)
 DerLig = .Range("A65536").End(xlUp).Row + 1
 .Range("A" & DerLig) = Cells(Target.Row, 2)
 .Range("C" & DerLig) = Cells(3, Target.Column)
 .Range("F" & DerLig).Formula = "=E" & DerLig & "-D" & DerLig
 If Target = "Hs" Then
    .Range("I" & DerLig).Formula = _
        "=IF(A" & DerLig & "=HsIndiv!$C$14,"""",IF(OR(C" & DerLig & "<HsIndiv!$F$13,G" & DerLig & "<>""A payer""),"""",A" & DerLig & "))"
    .Range("J" & DerLig).Formula = _
        "=IF(OR(A" & DerLig & "<>HsIndiv!$C$14,C" & DerLig & "<HsIndiv!$F$12,C" & DerLig & ">HsIndiv!$F$13,G" & DerLig & "<>""A payer""),"""",MAX(J$1:J" & DerLig - 1 & ")+1)"
    .Range("K" & DerLig).Formula = _
        "=IF(OR(A" & DerLig & "<>Heures!$B$5,G" & DerLig & "<>""A récupérer""),"""",MAX($K$1:K" & DerLig & ")+1)"
 End If
 If Target = "Ré" Then
    .Range("G" & DerLig).Formula = _
        "=IF(A" & DerLig & "<>Heures!$B$5,"""",MAX($G1:G" & DerLig & ")+1)"
 End If
 .Select
End With
End Sub

Amicalement

Dan

Merci beaucoup Dan

Vous êtes 2 ou c'est Dan à l'envers ?

De plus tu es de Belgique ? J'ai longtemps travaillé chez Eurolines.

Vraiment merci beaucoup.

Je viens d'imprimer les 2 codes pour voir mes erreurs, c'était donc juste une parenthèse de trop et un 1 manquant ?

re,

Vous êtes 2 ou c'est Dan à l'envers ?

Les deux ! on est deux sous ce pseudo. Pour le Dan à l'envers, c'est le hasard des prénoms.

De plus tu es de Belgique ? J'ai longtemps travaillé chez Eurolines.

Oui. eurolines est à Bruxelles. De mon coté j'habite sur Liège.

Voili voilou

Dan

Rechercher des sujets similaires à "formules code vba"