Insérer date en auto si nouvelle ligne

Bonjour à tous,

Je me permets de poster ici aujourd'hui car j'ai un problème que je n'arrive pas à résoudre.

Étant novice dans le VBA, je fais donc appel à vos connaissances afin d'essayer de résoudre mon problème.

Dans mon fichier (en pièce jointe) j'ai un tableau "Tableau1" qui se situe dans la feuille "Plan_Actions", et j'aimerai que lorsque j'ajoute une nouvelle ligne, si la date n'est pas renseignée, alors ça m’insère la date du jour.

Pour cela, j'aimerai que le programme effectue un test du genre:

si dans les colonnes de "A" jusqu'à "K" il y a quelque chose, et que la cellule de la date est vide, alors ça me mets la date d'aujourd'hui.

Après avoir essayé plusieurs code trouvé sur le net, je n'ai toujours pas réussi à trouver la solution..

Petite précision, parfois j'ajoute une nouvelle ligne juste en écrivant en dessous la dernière ligne du tableau: excel ajoute en auto la ligne dans le tableau.

De plus, j'ai déjà un code dans le worksheet que je dois conserver (pour colorer la ligne sélectionnée".

Merci d'avance pour vos solutions si vous en avez.

Bonne journée à tous.

Bonjour

si dans les colonnes de "A" jusqu'à "K" il y a quelque chose, et que la cellule de la date est vide, alors ça me mets la date d'aujourd'hui.

Pourquoi ne mettez-vous pas simplement une formule en L qui vous mettra la date d''aujourd'hui si toutes les colonnes A à K sont complétées --> =SI(NBVAL(A2:K2)=11;AUJOURDHUI();"")
Une fois fait, vu que votre tableau est au format structuré, la formule sera recopiée automatiquement en cas d'ajout de nouvelle ligne
C'est sans code VBA et donc plus simple à priori

Cordialement

Edit : Après votre code dans la feuille comme ceci

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Target.Cells.Count > 1 Then Exit Sub
With ListObjects(1)
    .DataBodyRange.Interior.Color = xlNone
    If Not Intersect(Target, .DataBodyRange) Is Nothing Then
        .ListRows(Target.Row - .HeaderRowRange.Row).Range.Interior.ColorIndex = 43
    End If
End With
End Sub

Bonjour Dan, et un grand merci pour votre réponse !

Je ne peux pas mettre de formule car c'est un fichier utilisé par beaucoup de personne, et c'est vide un bordel..

Je vais tester le code, merci encore :)

Re bonjour,

Le code est uniquement une amélioration du code pour surligner la ligne :/

Savez vous quel code puis-je mettre pour résoudre mon problème sans utiliser une formule directement dans le excel ?

Le code est uniquement une amélioration du code pour surligner la ligne :/

Oui

Je ne peux pas mettre de formule car c'est un fichier utilisé par beaucoup de personne, et c'est vide un bordel..

Oui je sais Quel souci voyez vous à la formule ? Une fois placée vous avez peur que quelqu'un la vire ?

Est-ce cette date doit être figée ou doit pouvoir être modifiée si on modifie une cellule sur la ligne entre A et K ?

EDIT : Sinon, vous pouvez toujours essayez ce code-ci

Dim stpevt As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or stpevt = True Then Exit Sub

With ListObjects(1)
    If Not Intersect(Target, .DataBodyRange) Is Nothing Then
        stpevt = True
        If WorksheetFunction.CountA(.DataBodyRange(Target.Row - .HeaderRowRange.Row, 1).Resize(, 11)) = 11 Then
            .DataBodyRange(Target.Row - .HeaderRowRange.Row, 12) = Format(CDate(Date), "dd/mm/yy")
        Else: .DataBodyRange(Target.Row - .HeaderRowRange.Row, 12).ClearContents 'supprime la date si une des colonnes A à K ne sont pas remplies
        End If
    End If
End With
stpevt = False
End Sub

Attention que la ligne Dim strpevt doit absolument être en première ligne. Donc le mieux est de placer ce code avant celui que je vous ai donné dans mon post précdent.

La date doit pouvoir être modifiable..

Le programme ne fonctionne pas :/

Le programme ne fonctionne pas :/

C'est à dire ?

Oubliez pas que la date ne se met que si vous avez complété les colonnes A à K
Si vous avez une des cellules non complétées dans une ligne la date ne sera pas ajoutée
Si vous vider une cellule dans une ligne, la date sera effacée

Important : En cas d'ajout, vous devez toujours ajouter juste en dessous de la dernière ligne. Donc dans votre fichier posté, la prochaine ligne est la ligne 3

Dès que j'ajoute une ligne et que je commence à remplir le type d'action, ça me marque ça ,(voir capture ci-dessous)

Par contre est-il possible que ça ne soit pas forcément tout de complété ? mais plutôt s'il y a une case contenant quelque chose alors ? car parfois les personnes ne complètes pas toutes les cases..

image

Dès que j'ajoute une ligne et que je commence à remplir le type d'action, ça me marque ça ,(voir capture ci-dessous)

Il faudrait que je vois ce que vous avez comme codes dans la feuille. Parce que de mon coté je n'ai pas d'erreur. Avez-vous essayé sur le fichier joint ?

Vous ne devez avoir que les deux codes et placé comme je vous ai écrit.

Votre erreur ne me dit rien. Cliquez sur "debogage" pour voir la ligne qui pose souci

image

Ce n'est pas le code que je vous ai donné ici --> https://forum.excel-pratique.com/s/goto/1177214 et qui, de surcroit est plus compliqué.
Du travail pour rien en fait (?)

Par contre est-il possible que ça ne soit pas forcément tout de complété ?

Oui c'est possible. Dans la ligne If worksheetfunction .... =11 then vous remplacez le = 11 par = 1

Bonjour est désolé pour le temps de réponse

Oui je n'ai pas testé le bon programme car en attendant votre réponse j'ai testé un autre programme qui lui ne fonctionnait pas ^^

En revanche votre programme fonctionne parfaitement, et je vous en remercie énormément :)

Une dernière petite question, pourquoi ce n'est pas le même format que la première date saisie manuellement ?

image

Re

Oui j'ai aussi remarqué cela. Allez dans le code Private Sub Worksheet_Change(ByVal Target As Range) et modifié ces trois lignes

        If WorksheetFunction.CountA(.DataBodyRange(Target.Row - .HeaderRowRange.Row, 1).Resize(, 11)) >= 1 Then
            .DataBodyRange(Target.Row - .HeaderRowRange.Row, 12) = CDate(Format(Date, "dd/mm/yy"))
        Else: .DataBodyRange(Target.Row - .HeaderRowRange.Row, 12).ClearContents 'supprime la date si une des colonnes A à K ne sont pas remplies
        End If

Dans cette correction, j'ai aussi tenu compte de votre demande au sujet de la date qui sera mise dès que vous avez ajouté une donnée dans une des colonnes A à K.

Cordialement

Super, ça fonctionne parfaitement !

Voici du coup le programme final (capture ci-dessous), je dois insérer où le programme pour avoir la ligne active en couleur ?

image

Voici du coup le programme final (capture ci-dessous), je dois insérer où le programme pour avoir la ligne active en couleur ?

Vous n'en avez pas besoin d'ajouter une ligne dans ce code puisque c'est le code que je vous ai donné ici --> https://forum.excel-pratique.com/s/goto/1177201 qui le fait.

Vous devez avoir les deux codes...

Si terminé, pensez à

Cordialement

Rechercher des sujets similaires à "inserer date auto nouvelle ligne"