Appliquer une macro à l'ensemble de la colonne

Résolu/Fermé
spiritual_monkey Messages postés 4 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 12 juin 2015 - 11 juin 2015 à 21:17
spiritual_monkey Messages postés 4 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 12 juin 2015 - 12 juin 2015 à 21:40
Bonjour,

Je suis un débutant qui tente de faire une macro dans Excel.
Mon but est de faire apparaître la date du jour dans la cellule de la colonne `'B'' lorsque la cellule adjacente de la colonne `'A'' (un nombre) est modifiée.
J'ai trouvé sur le net une macro qui fait exactement ce que je recherche, sauf qu'elle s'applique à une seule ligne. Comme mon fichier contient des milliers de lignes, je veux éviter d'avoir à copier la macro pour chaque ligne.
Voici ce que j'ai comme macro présentement :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target = Range("A1") Then
Target.Offset(0, 1) = Date
End If
End Sub

J'ai trouvé le même genre de question sur le forum, mais comme les macros sont différentes, les solutions proposées ne semblent pas s'appliquer.
Merci d'avance pour votre aide!
A voir également:

1 réponse

via55 Messages postés 14501 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 novembre 2024 2 735
11 juin 2015 à 21:50
Bonsoir

Private Sub Worksheet_Change(ByVal Target As Range) 
If Target.column >1 then exit sub ' on sort de la macro si changement ailleurs que dans la colonne 1 
' sinon on met la date dans la colonne voisine
Target.Offset(0, 1) = Date 
End If 
End Sub 


Cdlmnt
Via
0
spiritual_monkey Messages postés 4 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 12 juin 2015
11 juin 2015 à 22:48
Bonsoir via55,

Merci d'avoir pris le temps de me répondre.

J'ai copié votre macro et supprimé votre commentaire en vert et je reçois l'erreur suivante:
''Erreur de compilation : End if sans bloc if''
Est-ce qu'il y a quelque chose que je ne fais pas correctement?

Par ailleurs, comment le logiciel comprend que c'est à la colonne B que s'applique la macro?

Merci!
0
via55 Messages postés 14501 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 novembre 2024 2 735 > spiritual_monkey Messages postés 4 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 12 juin 2015
Modifié par via55 le 11/06/2015 à 23:04
Non c'est moi qui ait oublié d'enlever le End if, supprimes cette ligne

Soit il y a une condition et l'exécution qui suit comme dans ma ligne If Target.column >1 then exit sub
Soit il y a une condition et une ou plusieurs lignes de commandes à appliquer si la condition est vraie et à ne pas appliquer si elle est fausse, et dans ce cas il faut un End if pour maquer la fin de ces lignes et passer à la suite de la macro

l'instruction Target.Offset(0, 1) = Date peut se traduire par Cible (la cellule qui a été modifiée).Décaler d'un nombre de lignes de 0 et d'un nombre de colonnes de 1 et y mettre la valeur de la date du jour (=Date)
Ainsi si tu changes une valeur en A2 le décalage 0 ligne 1 colonne va faire passer en B2
0
spiritual_monkey Messages postés 4 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 12 juin 2015 > via55 Messages postés 14501 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 28 novembre 2024
12 juin 2015 à 21:06
Super, ça fonctionne!

Dernière question si je peux me permettre. En jouant avec les Offsets, le résultat (date) est déplacée à l'endroit que je le désire. Mais si je veux aussi décaler la colonne qui contient les chiffres, que dois-je faire? Par exemple, si je veux que lorsque j'entre un chiffre en F3 qu'une date apparaisse en G3. Le Offsett demeure le même (0, 1), mais qu'est-ce que je dois changer à la macro?

Merci beaucoup!
0
spiritual_monkey Messages postés 4 Date d'inscription jeudi 11 juin 2015 Statut Membre Dernière intervention 12 juin 2015
12 juin 2015 à 21:40
Ok, j'ai trouvé :

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 6 Then
Target.Offset(0, 1) = Date
End If
End Sub

Merci!
0