Lancer un code automatiquement

Bonjour, j'ai une liste de nom, qui est mise en forme (couleur, etc...)

Seulement, je voudrais éviter de préparer 50 cellules, alors que seules quelques cellules peuvent être remplies.

Imaginons que les noms soit en B1-B2-B3.... j'aurai souhaité :

Si j'ai 4 noms (B1-B2-B3-B4) que la B5 soit vide mais se mette en forme.

Si je remplis B5, la B6 se mets en forme

Le code de mise en forme, je dois pouvoir me débrouiller, mais comment faire en sorte que le code se lance tout seul lorsque l'on modifie une cellule qui change à change fois?

Je serai capable, par bouton, de colorier la cellule vide se situant sous le dernier nom, mais je veux éviter de devoir cliquer à chaque fois que je souhaite rajouter un nom.

Merci

Bonsoir

Quelle mise en forme veux-tu avoir ?

Ce serait mieux de mettre un fichier exemple ou le fichier original sans données confidentielles

A te relire

Mise en forme je parlais de taille de celulles, couleurs etc.

Je pensais faire :

If Target.Count = 2 Then Exit Sub

MsgBox ("ok")

End Sub

ou le "2" serait remplacé par la colonne de la cellule contenant l'entête "nom".

Ensuite je calcule la position de la dernière (tant que pas vide, je descends...) et quand j'ai trouvé la vide je copie la mise en forme de celle du dessus en supprimant le texte.

C'est envisageable?

Ha bas il semblerai que le if target s'active si je modifie n'importe quelle cellule ^^ (même le fait de juste cliquer dessus).

Il me faudrait juste une commande qui s'active lorsque l'on modifie une cellule d'une colonne précise.

Pour l'exemple, je commence le truc, donc j'ai juste une case à remplir (déjà en forme). Je sais pas si ça sera très utile

Re

Sans fichier comme demandé, j'ai d'autres questions.

Quelles sont les cellules concernées, une seule colonne, toute ta feuille ??

A partir de quelle cellule dois tu commencer, ligne 2, 3, 4 ??

Peux tu avoir plusieurs cellules vides entre tes données ??

Si tu y tiens, je peux te le fournir, ce n'est pas un refus, mais je n'ai qu'une seule cellule.

Je me base sur une colonne, celle de la cellule qui a pour nom NOM (pas le contenu, mais pour appellation définie)

Je commence à partir de la ligne située en dessous de la cellule NOM.

Non, pas de cellule vide.

Je partais sur :

Private Sub Worksheet_Change(ByVal Target As Range)
x = 2
  If ActiveCell.Row = x Then

MsgBox ("lo")
Else
MsgBox ("bug")
End If

Le x sera remplacé par Range"NOM".column). Ainsi, en modifiant un truc de la colonne, je pense activer la suite de mon code (ça je saurai le faire")

Mais mon code ne fonctionne pas, ça ne doit pas être la bonne fonction.


Hum, je viens de voir, en fait ça fonctionne, si après avoir remplie la cellule, je fasse ENTER ou si je clique sur une autre cellule de la même colonne pour valider l'opération.

Si je clique sur une autre cellule d'une autre colonne, c'est comme si je n'avais pas cliqué sur une cellule de la bonne colonne.

Assez embêtant pour d'autres personnes qui ne le savent pas.

On sait régler ça?

re

C'est un message ou une mise en forme que tu veux ??

Je ne comprends pas de trop ce que tu cherches

Si c'est uniquement de recopier la mise en forme de la cellule précédente, essaie ceci

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
With Target
    .Offset(-1, 0).Copy
    .PasteSpecial Paste:=xlFormats
End With
 Application.CutCopyMode = False
End Sub

Code à placer dans la feuille concernée par la mise en forme bien entendu.

Clique droite sur l'onglet, puis choisir "visualiser le code" et coller le code ci-avant dans la fenêtre

Cordialement

En fait ça ne doit faire ça que sur une seule colonne.

Et ça doit copier la mise en forme + hauteur ligne

d'où ma ligne de code :

if activecell.column = "macelluleentête".column

Seulement, si pour quitter la cellule dans laquelle j'écris j'appuie sur une cellule d'une autre colonne (sans y entrer, juste pour quitter ma sélection) ça considère que ce n'est pas une cellule appartenant à la colonne référence et la mise en forme ne se fait pas.

re

d'ou mes questions avant. Quelle colonne ?

Aussi quelle hauteur de ligne veux tu ?

Je me base sur la colonne d'une cellule référence portant un nom (elle s'appelle FirstNom)

Je récupère sa colonne et je me base sur elle.

hauteur, je mets 25.

if activecell.column = range("FirstNom").column

alors je fais le code de mise en forme

Re

Je me base sur la colonne d'une cellule référence portant un nom (elle s'appelle FirstNom)

Elle est toujours dans la même colonne ?

Non, justement, c'est pour ça que je lui ai donné un nom.

SI B2 à pour nom FirstName, si j'insère une colonne avant, c'est C2 (ancien B2) qui aura le nom FirstName.

Donc pas de problème.

par nom j'entends bien le nom de base de la cellule, pas le texte dedans.

re

essaie comme ceci en considérant le nom en ligne 2 :

Private Sub Worksheet_Change(ByVal Target As Excel.Range)
If Cells(2, Target.Column) = "firstname" Then
    With Target
        .Offset(-1, 0).Copy
        .PasteSpecial Paste:=xlFormats
        .RowHeight = 25
    End With
    Application.CutCopyMode = False
End If
End Sub

Remplace Firstname par le nom en respectant bien les majuscules et minuscules de ta cellule

Cordialement

Merci bien, j'essayerai ça un peu plus tard, je dois partir.

Merci de ton aide.

Je testerai ton code demain, mais à voir, si je comprends, il va modifier la cellule en dessous si je clique sur la cellule FirstName.

Hors, celle sur laquelle je clique peut être 10 lignes en dessous.

En gros :

A1 = Firstname

A2, A3, A4 ont des noms d'élèves et A5 et prête.

Si je remplie A5, A6 se met en forme pour recevoir le 6ème nom.

et le problème de if target, c'est que si j'entre un nom dans la cellule, mais que je clique sur une autre cellule pour valider (oui, on fait pas toujours ENTER ^^, ça compte comme-ci j'avais pas cliquer sur la bonne cellule, ce qui est embêtant.

Re,

Faudrait que tu sois plus précis la car une fois tu parles de B2 puis une autre fois de A1 Puis de if target alors que le code ne contient pas cette instruction

Le code que je t ai proposé vérifie qu'en ligne 2 tu as le mot firstname et si oui, met en forme la cellule dans laquelle tu mets une donnée sur base de la cellule précédente dans la même colonne

Exemple : si tu as une donnée en B3 et que tu mets une donnée en B4, la cellule B4 prendra la mise en forme identique à la cellule B3 et ce, si et uniquement si tu as le mot Firstname en B2

A te relire après les tests que tu vas faire

Rechercher des sujets similaires à "lancer code automatiquement"