Fonction with (VBA)

Bonjour à tous,

Voici du code vba qui me sert à sélectionner une feuille selon un choix:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next

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$12,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 & ")+1)"

End If

If Target = "Ré" Then

.Range("G" & Derlig).Formula = _

"=IF(A" & Derlig & "<>Heures!$B$5,"""",MAX($G1:G" & Derlig - 1 & ")+1)"

End If

.Select

End With

End Sub

Voici le document qui me sert d'exemple (sur l'original il y a trop de données confidentielles).

Voici ma question:

Je voudrais rajouter un cas. Si je choisis C ou Dc, il faudrait que cela ajoute les données

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

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

sur la feuille congés sans la sélectionner.

Puis-je rajouter un with target(C)

Select(congés)

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

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

End with

? mais je n'y arrive pas.

Pouvez vous m'aider svp ?

nb: ne pas tenir compte de ce qu'il y a sur la feuille "congés", faire comme si elle était vierge.

Bonjour,

Euh... Et le document ??

A+

oops

Vous comprenez pourquoi mon pseudo maintenant..

merci à tous

Bon, j'ai juste survolé hein...

Tu codes avec le pied ?

Les déclarations de variables c'est pas pour toi ?

P... de planning de ouf...

Ouai, ben là t'es banané ! T'es parti sur un traitement commun et puis en fait tu ne va gérer que des situations différentes sur la macro commune. il faut faire un transfert de variable pour atterrir sur la bonne feuille :

Moi je... (mébon...) je partirai comme ça. Bon c'est que l'idée hein : le chef d'orchestre c'est toi !

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iR%, iC%, Z$, S$
iR = Target.Row: iC = Target.Column
Z = Target.Value

On Error Resume Next 'Danger... à supprimer !!!

Select Case Z
Case Hs, Ré: S = Z
    NomDate S, iR, iC  'Call (voir plus bas)

Case "C", "Dc": S = "Congés"
    NomDate S, iR, iC 

End Select
End Sub

Private Sub NomDate(S$, iR%, iC%)
With Sheets(S)
LR = .Range("A65536").End(xlUp).Row + 1
    .Range("A" & LR) = Cells(iR, 2)
    .Range("C" & LR) = Cells(3, iC)
Select Case S
Case "Hs"
    .Range("F" & LR).Formula = "=E" & LR & "-D" & LR
    .Range("I" & LR).Formula = "=IF(A" & LR & "=HsIndiv!$C$14,"""",IF(OR(C" & LR & "<HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",A" & LR & ")"
    .Range("J" & LR).Formula = "=IF(OR(A" & LR & "<>HsIndiv!$C$14,C" & LR & "<HsIndiv!$F$12,C" & LR & ">HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",MAX(J$1:J" & LR - 1 & ")+1)"
    .Range("K" & LR).Formula = "=IF(OR(A" & LR & "<>Heures!$B$5,G" & LR & "<>""A récupérer""),"""",MAX($K:K" & LR & ")+1)"
Case "Ré"
    .Range("F" & LR).Formula = "=E" & LR & "-D" & LR
    .Range("G" & LR).Formula = "=IF(A" & LR & "<>Heures!$B$5,"""",MAX($G:G" & LR & ")+1)"
Case "Congés"
        ' & blabla...
End Select
.Select
End With

End Sub

A+

C'est très gentil à toi.

Oui je code avec les pieds puisque je n'y connais rien et que je demande au fur et à mesure que j'ai besoin de changer quelque chose.

En même temps cela me permet d'apprendre car je voudrais vraiment maîtriser un peu.

Mais le code si j'ai pas de TP à réaliser, un livre reste vraiment très rébarbatif.

De plus je voudrais terminer ce tableau pour mon boulot d'ici la fin de l'année.

J'aimerais vraiment trouver qqun qui pourrait m'aider jusqu'au bout parce qu'en fait sur le forum chacun apporte un peu d'eau à mon moulin mais au fur et à mesure, cela devient une usine à gaz, alors que si une personne m'aidait du début à la fin, cela m'enrichirait vraiment beaucoup plus.

Ceci dit, merci à tous vous êtes vraiment formidables.

-- Mar Déc 15, 2009 3:03 pm --

peux-tu m'expliquer un peu le fonctionnement stp ?

pour que je comprennne.

merci d'avance.

bonsoir,

Le code commenté.

Private Sub Worksheet_Change(ByVal Target As Range)
Dim iR%, iC%, Z$, S$
iR = Target.Row     'on enregistre les valeurs de target
iC = Target.Column  'dans des variables integer (%)
Z = Target.Value    'variable string ($)

On Error Resume Next 'Danger... à supprimer !!!

Select Case Z       'selon la valeur de Target (Z)
Case Hs, Ré: S = Z  'on détermine le nom de la feuille cible dans une autre variable (S)
    'Et on appelle une autre macro qui fera le boulot avec les bons paramètres
    NomDate S, iR, iC  'Call (voir plus bas)

Case "C", "Dc": S = "Congés"
    NomDate S, iR, iC  'Attention à la syntaxe des call ! (bien passer les pramètres dans l'ordre)

End Select
End Sub

Private Sub NomDate(S$, iR%, iC%)
'cette macro fait le boulot avec les bons paramètres
'S est le nom de la feuille
'IR et iC les N° de lignes et de colonne de la feuille source
With Sheets(S)
LR = .Range("A65536").End(xlUp).Row + 1 'LR est le N° de ligne cible
    .Range("A" & LR) = Cells(iR, 2)
    .Range("C" & LR) = Cells(3, iC)
'Selon le nom de la feuille cible (S) on exécute les formules que TU as déterminées
Select Case S
Case "Hs"
    .Range("F" & LR).Formula = "=E" & LR & "-D" & LR
    .Range("I" & LR).Formula = "=IF(A" & LR & "=HsIndiv!$C$14,"""",IF(OR(C" & LR & "<HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",A" & LR & ")"
    .Range("J" & LR).Formula = "=IF(OR(A" & LR & "<>HsIndiv!$C$14,C" & LR & "<HsIndiv!$F$12,C" & LR & ">HsIndiv!$F$13,G" & LR & "<>""A payer""),"""",MAX(J$1:J" & LR - 1 & ")+1)"
    .Range("K" & LR).Formula = "=IF(OR(A" & LR & "<>Heures!$B$5,G" & LR & "<>""A récupérer""),"""",MAX($K:K" & LR & ")+1)"
Case "Ré"
    .Range("F" & LR).Formula = "=E" & LR & "-D" & LR
    .Range("G" & LR).Formula = "=IF(A" & LR & "<>Heures!$B$5,"""",MAX($G:G" & LR & ")+1)"
Case "Congés"
        ' & blabla...
End Select
.Select
End With

End Sub

A+

je te remercie beaucoup.

La je quitte le travail et demain je vais étudier ça à tête reposée.

Je pense que je vais te reposer quelques questions, car je vais le mettre en application sur un autre document.

Ou as-tu a^ppris le VBA ?

Et quel est ton prénom M. l'athlète ?

Euh... C'est une vieille histoire : Je suis tombé dedans quand j'étais petit !

Nan, sérieusement j'ai commencé à m'intéresser à l'informatique quand Windows n'existait pas encore... Alors après c'est comme apprendre à parler une autre langue... on se rend pas vraiment compte : y suffit de pratiquer !

A+

Roger

Alors me revoila Roger.

Tu m'as beaucoup apporté, j'ai compris pas mal de choses, notamment la structure, et l'utilité de déclarer les variables.

J'ai essayé d'apporter des modifs, mais il y a des choses qui ne fonctionnent pas et je ne vois pas pourquoi.

Je te redonne la feuille modifiée.

Peux-tu regarder et m'aider à comprendre ce qui ne va pas stp ?

Donc au choix C ou Dc, ça me mets les bonnes infos dans l'onglet BdCongés

Dans le code j'ai rajouté ça :

Case "BdCongés"

.Range("B" & LR) = Cells(iR, Z)

pour qu'en colonne B cela m'affiche ce que j'ai choisi (C ou Dc).

Mais ça marche pas.

Je ne trouve pas la solution...

De plus est-il possible que :

si je supprime C ou Dc dans le tableau, cela supprime la ligne qui avait été créée ?

bonsoir,

Heu... Qu'est ce que t'a fumé ?

Là, je peux pas te dire grand chose : c'est incompréhensible.

Je ne sais pas ce que tu attends dans la colonne B. De plus la méthode cells dans Cells(iR, Z) attend comme paramètre(IR et iC) surtout pas Z

Quand à la suppression. YFO pas rêver.

Je vais pas développer cette affirmation, mais il me semble hautement improbable que tu y arrives avec la méthode employée. (Worksheet_Change).

A+

bug n serie

Bonjour, j'étais en vacances, je viens de rentrer, j'espère que vous avez passé un bon noël.

Alors je me suis très mal exprimé j'ai l'impression.

Mais entre-temps j'ai compris, tu as raison, j'ai mis cells(iR,iC) et j'obtiens ce que je veux.

Sinon pour contourner les suppressions, comment faire pour afficher un message d'erreur en cas de doublon de dates dans la feuille BdCongés ?

merci d'avance.

Rechercher des sujets similaires à "fonction vba"