Remplissage automatique par VBA

Bonjour,

J’ai besoin d’aide pour réaliser un fichier en VBA.

Dans « Suivi chantier »

Sur la ligne 2, lorsque je rempli les cellules de B à E,

Dans « recap dossier »

Ces mêmes infos se remplissent automatiquement dans les cellules de B à E.

Idem pour les autres lignes de 3 à l’infini.

Merci pour votre aide.

Bonjour,

une solution possible, il faudra "tirer" la formule sur tout les cases que vous avez besoin

Bonjour,

Merci de votre réponse rapide.

Mais je voudrais cela en Vba parce que comme je ne suis pas le seul qui utilise le fichier, les formules sont souvent supprimées.

Merci,

à tester :

Private Sub Worksheet_Change(ByVal Target As Range)
dim ligne as integer
dim colonne as integer
 If Not Application.Intersect(Target, column("B:E")) Is Nothing Then
   ligne = target.row
   colonne = target.column

  sheets("RECAP DOSSIER").cells(ligne,colonne) = target

 End If
End Sub

inconvénient est que si vous modifier plusieurs cellule en même temps cela ne s'effectue pas sur l'autre feuille (ex : supprimer une plage )


désolé le fichier joint n'est pas la bonne et il manque un "s" à "column" dans :

    If Not Application.Intersect(Target, column("B:E")) Is Nothing Then  

Re,

il ya une erreur de compilation (voir image).

Merci de ton aide.

erreur

oui comme je l'avais plutôt il manque un "S" a "column"

Ça fonction très bien. je te remercie Beaucoup.

maintenant si c'est encore possible je souhaiterais que

Dans « Suivi chantier »

lorsque je rempli les cellules de B à E,

Dans « recap dossier »

la date du jour se met automatiquement dans la cellule "Réception demande" de la ligne concernée. et cette date ne doit plus jamais changer sauf manuellement.

J'attache le fichier mis à jour au cas ou.

Merci,

La date du jour se met automatique si les 4 colonne sont rempli ou si juste un des 4 suffit ?

uniquement la cellule D

j'ai mal formuler la question ^^

vous remplissez toujours les 4 (B:E) en même temps ?

la date s'affiche si les colonne précédent(B:E) sont tous remplie ou par exemple B2 est remplie donc on a une date en D2 (alors que C2,D2 et E2 sont vide)

Vous remplissez toujours les 4 (B:E) en même temps ?

Non, parfois oui et parfois non.

la date s'affiche si les colonne précédent(B:E) sont tous remplie ou par exemple B2 est remplie donc on a une date en D2 (alors que C2,D2 et E2 sont vide)

Dans recap dossier

Dès lors que la cellule D est remplie, automatiquement, une date est remplie dans la cellule F

Merci,

le code pour récuperer la cate du jour :

à mettre dans la feuille "RECAP DOSSIER"

Private Sub Worksheet_Change(ByVal Target As Range)
dim ligne as integer
dim colonne as integer
 If Not Application.Intersect(Target, column("D")) Is Nothing Then
   ligne = target.row
   colonne = target.column

  cells(ligne,colonne) = now  'now retourne la date du jour sous forme dd/mm/yyyy

 End If
End Sub

je ne sais pas par contre comment protéger la cellule contre tout modification


j'écris n'importe quoi ...

remplace

   cells(ligne,colonne) = now  

par :

 Range("F" & ligne) = now 

ça fonctionne parfaitement.

Merci pour ce travail.

Il me reste encore 3 choses à faire.

la première :

« Suivi chantier »

dans cellule F, si je mets non, alors dans "RECAP DOSSIER" en cellule H, la date du jour se met automatiquement et cette date reste inchangeable sauf manuellement. et en cellule I, on voit apparaitre "non et la cellule se met en rouge.

« Suivi chantier »

dans cellule F, si je mets oui, alors dans "RECAP DOSSIER" en cellule I, on voit apparaitre "oui" et la cellule se met en blanc.

la seconde en cours de réflexion.

Merci,

le code est presque le même que les deux précédent il suffit de l'adapter

VOICI COMMENT J'AI ADAPTE SANS PRENDRE EN COMPTE CETTE PARTIE (et en cellule I, on voit apparaitre "non et la cellule se met en rouge) MAIS CA NE FONCTIONNE PAS.

il ne me signal aucune erreur mais rien ne fonctionne.

DANS SUIVI CHANTIER

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ligne As Integer

Dim colonne As Integer

If Not Application.Intersect(Target, Columns("B:E"), Columns("f")) Is Nothing Then

ligne = Target.Row

colonne = Target.Column

Sheets("RECAP DOSSIER").Cells(ligne, colonne) = Target

End If

End Sub

ET DANS RECAP DOSSIER

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ligne As Integer

Dim colonne As Integer

If Not Application.Intersect(Target, Columns("D"), Columns("f")) Is Nothing Then

ligne = Target.Row

colonne = Target.Column

Range("F" & ligne) = Now 'now retourne la date du jour sous forme dd/mm/yyyy

Range("h" & ligne) = Now 'now retourne la date du jour sous forme dd/mm/yyyy

End If

End Sub

il faudra faire un autre if je t'envoi le code d'ici 5min dès que j'aurai le temps

voila le code a tester

Private Sub Worksheet_Change(ByVal Target As Range)
'code deja présent
Dim ligne As Integer
Dim colonne As Integer
 If Not Application.Intersect(Target, Columns("B:E")) Is Nothing Then
   ligne = Target.Row
   colonne = Target.Column

  Sheets("RECAP DOSSIER").Cells(ligne, colonne) = Target

 End If

 'code a ajouter
 If Not Application.Intersect(Target, Columns("F")) Is Nothing Then
 ligne = Target.Row
 colonne = Target.Column
    If UCase(Target.Value) = UCase("non") Then
        If Sheets("RECAP DOSSIER").Range("H" & ligne) = "" Then
            Sheets("RECAP DOSSIER").Range("H" & ligne) = Now
        End If
        Sheets("RECAP DOSSIER").Range("I" & ligne) = "Non"
        Sheets("RECAP DOSSIER").Range("I" & ligne).Interior.Color = RGB(255, 0, 0)
    End If
    If UCase(Target.Value) = UCase("oui") Then
        Sheets("RECAP DOSSIER").Range("I" & ligne) = "Oui"
        Sheets("RECAP DOSSIER").Range("I" & ligne).Interior.Color = xlNone
    End If

 End If

End Sub

le tout est a mettre dans "suivie chantier" il n'y a rien a changer dans "RECAP DOSSIER"


Private Sub Worksheet_Change(ByVal Target As Range)
'code deja présent
Dim ligne As Integer
Dim colonne As Integer
 If Not Application.Intersect(Target, Columns("B:E")) Is Nothing Then
   ligne = Target.Row
   colonne = Target.Column

  Sheets("RECAP DOSSIER").Cells(ligne, colonne) = Target

 End If

 'code a ajouter
If Not Application.Intersect(Target, Columns("F")) Is Nothing Then
 ligne = Target.Row
 colonne = Target.Column

    'petite modification apporter ici 
    If Sheets("RECAP DOSSIER").Range("H" & ligne) = "" Then
            Sheets("RECAP DOSSIER").Range("H" & ligne) = Now
    End If
    If UCase(Target.Value) = UCase("non") Then
        Sheets("RECAP DOSSIER").Range("I" & ligne) = "Non"
        Sheets("RECAP DOSSIER").Range("I" & ligne).Interior.Color = RGB(255, 0, 0)
    End If
    If UCase(Target.Value) = UCase("oui") Then
        Sheets("RECAP DOSSIER").Range("I" & ligne) = "Oui"
        Sheets("RECAP DOSSIER").Range("I" & ligne).Interior.Color = xlNone
    End If

 End If

End Sub

Merci, le code fonctionne très bien.

je vais tenter de faire les autres choses à faire et vous demander de l'aide si besoins.

re,

j'ai un peu de mal dans le dernier point.

dans "suivi chantier" si on rentre une date dans p, dans "recap chantier" un "oui " apparait dans la cellule "m"

et si

dans "suivi chantier" si la cellule " p" est vide, dans "recap chantier" un "non " apparait dans la cellule "m"

après cela le tableau est terminé.

Merci,

Bonjour,

Une petite contribution.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
Dim ws As Worksheet
Dim rw As Long
Dim rCell As Range

    Set ws = ActiveWorkbook.Worksheets("RECAP DOSSIER")

    If Not Application.Intersect(Target, Columns("B:E")) Is Nothing _
       And Target.Count = 1 Then
        ws.Range(Target.Address).Value = Target.Value
    End If

    If Not Application.Intersect(Target, Columns("F")) Is Nothing _
       And Target.Count = 1 Then
        rw = Target.Row
        Set rCell = ws.Range("I" & rw)
        If ws.Range("H" & rw) = "" Then ws.Range("H" & rw) = Date
        Select Case True
            Case UCase(Target.Value) = "NON"
                With rCell
                    .Value = "Non"
                    .Interior.Color = RGB(255, 0, 0)
                End With
            Case UCase(Target.Value) = "OUI"
                With rCell
                    .Value = "Oui"
                    .Interior.Color = xlNone
                End With
            Case Else
                With rCell
                    .Value = vbNullString
                    .Interior.Color = xlNone
                End With
        End Select
    End If

    Set rCell = Nothing: Set ws = Nothing

End Sub
Rechercher des sujets similaires à "remplissage automatique vba"