Code VBA afin de compléter automatiquement une cellule

Bonjour,

Selon les explications inscrites dans le fichier ci-joint, je désirerais que la cellule fusionnée D4:E4 soit automatiquement complétée par une macro avec la même date qu'en D3:E3 si la date indiquée en D3:E3 est comprise dans les années 1995 - 2004 (et, si possible, que la cellule D5:E5 soit alors sélectionnée).

Pouvez-vous m'aider à réaliser cela ?

Bonnes salutations.

41demo.zip (43.67 Ko)

Bonjour Yvouille,

Avec une formule en D4, ca devrait fonctionner?

Amicalement,

Elfi

39demo.zip (42.73 Ko)

Bonjour,

Si l'on veut aussi que soit sélectionné la cellule D5, il faut passer par code :

A essayer :

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
'Macro Dan pour Yvouille le 28/05/2010
'http://forum.excel-pratique.com/excel/code-vba-afin-de-completer-automatiquement-une-cellule-t17452.html
If ok = True Then Exit Sub
If Not Intersect(Target, Range("D3:E3")) Is Nothing Then
If Year(Target) >= 1995 And Year(Target) <= 2004 Then ok = True: Target.Offset(1, 0) = Target
End If
ok = False
Target.Offset(2, 0).Select
End Sub

Code à placer en VBA dans la feuille "Calculs"

Amicalement

Salut Palbrousse,

Merci pour ta réponse. Malheureusement celle-ci ne convient pas pour plusieurs raisons assez difficiles à expliquer en détail (cellules non désirées protégées, etc.).

Salut Dan,

Merci également à toi pour ton aide. Tu t'approches passablement de la solution désirée. Il y a juste quelques petits problèmes :

Lorsque l'on a rempli une des cellules fusionnées D2:E2, D3:E3, D4:E4, ou D5:E5, le curseur saute deux cellules plus loin au lieu de sélectionner la suivante. Le curseur ne devrait passer deux cellules plus loin que lorsque l'on rempli la cellule fusionnée D3:E3 ET QUE LA MACRO EST DECLENCHEE car la date est comprise entre 1995 et 2004.

Lorsque l'on veut vider la cellule fusionnée D3 :E3 - ou un groupe de cellules comportant celle-ci - la fenêtre de débogage s'ouvre.

Peux-tu encore m'aider à résoudre ces problèmes ?

A tout hasard, je joins mon fichier incluant ta macro.

Bonnes salutations à vous tous.

29demo-v4.zip (23.22 Ko)

re,

essaie comme ceci :

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
'Macro Dan pour Yvouille le 28/05/2010
'http://forum.excel-pratique.com/excel/code-vba-afin-de-completer-automatiquement-une-cellule-t17452.html
If ok = True Then Exit Sub
If Not Intersect(Target, Range("D3:E3")) Is Nothing Then
If Year(Target) >= 1995 And Year(Target) <= 2004 Then
ok = True
    With Target
        .Offset(1, 0) = Target
        .Offset(2, 0).Select
    End With
End If
ok = False
End If
End Sub

Une remarque toutefois, si tu peux éviter les cellules fusionnées c'est préférable car les codes n'aiment pas beaucoup cela.

Si ton texte dans D3 dépasse la largeur de la cellule cela ne gênera pas puisqu'il se superposera sur la cellule E3. Au niveau code c'est nettement mieux pour éviter les bug.

Amicalement

Re-salut Dan,

Le problème de la sélection des cellules suivantes est parfaitement résolu avec ton nouveau code. Merci pour ton aide.

Désolé pour ces cellules fusionnées ! Si c'est nécessaire, je vais modifier ce fichier, mais comme le fichier original est complètement en allemand, je ne sais pas si les textes joueront de la même manière.

Veux-tu essayer de résoudre le dernier problème ainsi ou veux-tu que je modifie au préalable ces cellules ?

En fait de dernier problème, il y a juste cette histoire de fenêtre de débogage qui s'ouvre lorsque j'efface la cellule fusionnée D3:E3 ou un groupe de cellule l'a comprenant.

Peux-tu encore m'aider à ce niveau ? Je joins le fichier en l'état actuel.

Bonne fin de nuit.

27demo-v5.zip (23.15 Ko)

Re,

Je pense voir de quoi tu parles.

Essaie en ajoutant cette instruction juste avant IF OK = TRUE

If Target.Count > 1 Then Exit Sub

Amicalement

Salut Dan,

C'est super, ton code correspond maintenant exactement à ma première attente. Merci infiniment.

Pendant la nuit j'ai pensé à autre chose . Aurais-tu encore le courage de te pencher là-dessus ?

Je me suis dit que si une date entre 1995 et 2004 est inscrite dans la cellule fusionnée D3:E3, il faudrait - en plus du fait qu'une date soit inscrite automatiquement en D4:E4 - que la cellule devienne verrouillée et que son fond soit transformé en "Aucun remplissage", de manière à ce que l'utilisateur voie immédiatement que dans de tels cas il faut laisser une telle date en D4:E4.

De la manière inverse, si une date autre est inscrite en D3:E3 (uniquement possible de 1985 à 1994 et de 2005 à 2010), la cellule D4:E4 devrait être vidée, à nouveau libérée et remplie en jaune comme les cellules adjacentes.

Si tout ceci est bien trop compliqué, ce fichier pourrait très bien être utilisé en l'état.

Bonne journée.

34demo-v6.zip (23.11 Ko)

Re,

Pas besoin de remettre ton fichier, je travaille sur ton fichier d'origine.

Essaie ce code que j'ai du remanier au vu de ta demande.

Dim ok As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
'Macro Dan pour Yvouille le 28/05/2010
'http://forum.excel-pratique.com/excel/code-vba-afin-de-completer-automatiquement-une-cellule-t17452.html
If Target.Count > 1 Then Exit Sub
If ok = True Then Exit Sub
If Not Intersect(Target, Range("D3")) Is Nothing Then
ok = True
ActiveSheet.Unprotect
    Select Case Year(Target)
    Case 1995 To 2004
        With Target
            .Offset(1, 0) = Target
            .Offset(1, 0).Interior.ColorIndex = -4142
            If .Offset(1, 0).Locked = False Then .Offset(1, 0).Locked = True
            .Offset(2, 0).Select
        End With
    Case 1985 To 1994, Is > 2004
        With Target
           If .Offset(1, 0).Locked = True Then .Offset(1, 0).Locked = False
            .Offset(1, 0) = ""
            .Offset(1, 0).Interior.ColorIndex = 36
            .Offset(2, 0).Select
        End With
    End Select
ok = False
ActiveSheet.Protect
End If
End Sub

Cela suppose que tu protèges ta feuille comme je l'ai constaté précédemment.

Amicalement

Re,

J'ai constaté deux problèmes :

Si j'inscris une date 1995-2004 en D3:E3, la date voulue est bien inscrite en D4:E4, mais le code bloque sur :

capture 29 05 1

Si j'inscris une date 1985-1994 ou 2005 et plus, le curseur saute à la cellule fusionnée D5:E5, ce qui ne devrait pas être le cas, il devrait atteindre la cellule D4:E4.

A te relire.

re,

Si j'inscris une date 1995-2004 en D3:E3, la date voulue est bien inscrite en D4:E4, mais le code bloque sur :

Au démarrage du code, ta feuille est protégée ? et ta cellule est verrouillée ou pas ?

Si j'inscris une date 1985-1994 ou 2005 et plus, le curseur saute à la cellule fusionnée D5:E5, ce qui ne devrait pas être le cas, il devrait atteindre la cellule D4:E4.

Dans la partie "Case 1985 To 1994, Is > 2004"

remplace

.Offset(2, 0).Select

par

.Offset(1, 0).Select

A te relire

Yvouille a écrit :

Si j'inscris une date 1995-2004 en D3:E3, la date voulue est bien inscrite en D4:E4, mais le code bloque sur ..... :

Dan a écrit :

Au démarrage du code, ta feuille est protégée ? et ta cellule est verrouillée ou pas ?

Au démarrage du code, ma feuille est protégée et la cellule n'est pas verrouillée.

Lorsque ça bloque, avec des dates 1995-2004, la couleur de fond n'est plus jaune, mais "Aucun remplissage", la feuille est déprotégée mais la cellule n'est pas encore verrouillée (ce qui semble logique, puisque ça bloque ).

L'autre problème est parfaitement résolu grâce à ta solution. Merci beaucoup.

Bonne fin d'après-midi.

re,

Concernant ton dernier souci, je n'ai de pb chez moi.

Dis moi si tu as éventuellement une autre macro dans ton fichier ou dis moi en détail ce que tu fais, de manière à ce que je reproduise la même chose.

Essaie aussi en ne fusionnant pas tes cellules D3:E3 et D4:E4.

Partons sur la feuille non protégée et les cellules non protégées( décoche la case dans format cellule protection)

Salut Dan,

Comme tu n'avais jamais vraiment donné de réponse impérative à mon texte ci-dessous, j'avais toujours gardé mes cellules fusionnées.

Yvouille a écrit :

Désolé pour ces cellules fusionnées ! Si c'est nécessaire, je vais modifier ce fichier, ......

Suite à ton dernier message, j'ai alors séparé toutes les cellules fusionnées et tout est rentré dans l'ordre.

Je prends donc note : CELLULES FUSIONNEES = PLUS JAMAIS (bien que parfois c'est difficile de faire autrement).

Merci infiniment de m'avoir aider à résoudre tous ces problèmes ; c'était vraiment sympa - et hautement efficace de ta part.

Bonne fin de soirée.

Rechercher des sujets similaires à "code vba afin completer automatiquement"