Code VBA

Voici un fichier qui explique l'aide dont j'ai besoin.

Quelqu'un peut-il m'aider s'il vous plaît ?

Bonjour,

modifie ton code de cette façon

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Application.Intersect(Target, Range("C8:AG218")) Is Nothing Then
        Select Case Target.Value
            Case "Hs", "Ré", "A"
                Dim DerLig As Integer
                DerLig = Sheets("Hs").Range("A65536").End(xlUp).Row + 1
                Sheets(Target.Value).Range("A" & DerLig) = Cells(Target.Row, 2)
                Sheets(Target.Value).Range("C" & DerLig) = Cells(3, Target.Column)
                Sheets(Target.Value).Select
        End Select
    End If
End Sub

Je suis en congés je reprends jeudi, vous êtes vraiment des amours.

Bonjour, je viens donc d'essayer.

Alors ça extrait bien le nom et la date dans la feuille "Hs" mais pas dans la feuille "Ré" ni "A" en fonction du choix bien sur, pas dans les trois feuilles en même temps hein..

J'arrive un peu à comprendre les commandes mais je ne connais pas le VBA (comme si en anglais je comprenais à demi-mots mais que je ne savais écrire).

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

J'imagine que c'est cette commande qui déclenche la ligne supplémentaire,

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

cette commande qui extrait le nom.

Ce que je voudrais c'est qu'en choisissant "Ré" ou "A" dans la feuille du mois en cours, ça fasse pareil que si je choisissais "Hs", c'est à dire que ça bascule sur la feuille correspondante (ça ça marche pas de pb) mais que ça extrait le nom et la date aussi.

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

n'est-ce pas sur cette commande qu'il faudrait déclencher la ligne supplémentaire en fonction du choix ?

Je ne sais pas comment faire...

Merci d'avance pour votre aide

tu as raison, je suis allé un peu trop vite, la bonne ligne devrait se lire:

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

bonne journée

Ca marche merci beaucoup...

Merci pour ta patience.

Par contre une question supplémentaire :

Il y a sur la feuille "Hs" dans les colonnes de droites, des formules.

Comment faire pour qu'en ajoutant la ligne, cela ajoute les formules correspondantes si c'est possible bien sur.

Ex, feuille "Hs" sur la 1ère ligne il y a la colonne Nom, motif, Heure début, heure fin, et sur la colonne I, une formule d'indexation.

Quand ça ajoute la ligne, est-ce possible que cela ajoute la formule d'indexation de la ligne suivante ?

Désolé je ne vois pas ces formules dans ton fichier ...

voilà qui est réparé, donc dans la colonne F il y a le total et dans la colonne I, une formule d'indexation.

Donc si je clique sur "Hs" dans le tableau "Janvier", ça bascule sur la feuille "Hs", ça rajoute une ligne et ça m'extrait le nom et la date (ça c'est déjà génial.)

Est-il possible que ça rajoute aussi les formules dans les colonnes sur la ligne qui a été ajoutée ?

Il faut bien sur que la formule corresponde à la ligne ajoutée.

Bonjour,

voici le code avec les formules

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)"

    .Select
  End With

End Sub

pour la formule de la colonne I j'ai eu plus de misère, assure toi que ça donne le bon résultat. A première vue ça me semblait bon.

Je vais vérifier et tester tout ça, c'est vraiment gentil de ta part..

Je te remercie encore mille fois.

Alors après avoir regardé le code très instructif pour moi, voici où ça pêche :

Formule d'origine dans la colonne I, ligne 2 :

=SI(OU(A2<>HsIndiv!$C$14;C2<HsIndiv!$F$12;C2>HsIndiv!$F$13;G2<>"A payer");"";MAX(I$1:I1)+1)

Mais sur la ligne 3 ça donne :

=SI(OU(A3<>HsIndiv!$C$14;C3<HsIndiv!$F$12;C3>HsIndiv!$F$13;G3<>"A payer");"";MAX(I$1:I2)+1)

(regarde la derniere fonction MAX :

ligne 2 : I$:I1)+1

Ligne 3 : I$:I2)+1

donc ligne 4 ça doit donner : I$:I3)+1

Hors ça donne toujours sur chaque ligne supplémentaire :

I$:I1)+1

Est-ce que tu vois le pb ?

J'essaie de comprendre le code.

A quoi sert le & ?

merci d'avance

Bonjour,

pour corriger la formule remplace la ligne par

.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)"

Les & servent à concaténer du texte et/ou des variables

ex:

activecell.formula = "=A1 + 2"

pourrait être remplacer par

ValeurAddition = 2
activecell.formula = "=A1 + " & ValeurAddition

Les deux codes donne la même chose soit "=A1 + 2", dans le code, je me suis servie de la variable derlig qui contient le numéro de la ligne où les données sont copiées.

"=E2-D2"

"=E" & derlig & "-D" & derlig

tu peux même t'en servir directement dans excel:

en A1 tu as une liste de nom et en B1 un liste de prenom, tu pourrais en c1 écrire comme formule =B1 & A1 ou =A1 & ", " & B1 pour avoir le nom et prénom.

Bonne journée

C'est vraiment très gentil, j'apprends beaucoup avec vous.

Donc si je comprends un peu, le & aurait une relation avec les pointeurs ?

le & sert uniquement à lier deux chaines

= "Mon" & " Texte"

"Mon Texte"

Texte1 = "Mon"

Texte2 = " Texte"

Texte1 & Texte2

"Mon Texte

je ne comprends pas ce que tu entends par pointeur

merci beaucoup pour ton aide.

Rechercher des sujets similaires à "code vba"