Excel appliquer une macro à partir d'une cell

Fermé
unpetitange Messages postés 8 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 22 octobre 2011 - 10 sept. 2009 à 17:39
unpetitange Messages postés 8 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 22 octobre 2011 - 11 sept. 2009 à 16:56
Bonjour à tous,

Je consulte comment ca marche depuis plus d'un an et je vous remercie pour tous ce que j'y ai déjà apris.

Dans le cadre de mon activité d'architecte, je créée un fichier excel me permettant de gérer les payements fait par mes clients à des fournisseurs. Il y a donc plusieurs fournisseurs (maçon, charpentier, etc ...) qui se font payer à différents moments du chantier par le client.
Mon fichier excel comprends deux types de feuille,
1. la première feuille (feuille de payement générale) reprends tous les payements fait les un après les autres, avec un identifiant unique qui s'autoincrémente pour moi et mon client nous permettant de voir ce que nous avons payé.
2. la ou les autre(s) feuille(s) (feuille entreprise) reprends les mêmes informations de payement mais dans un tableau propre à l'entreprise en question.

Je cherche donc à créer deux macro.

La première me permettrait en me positionnant sur la permière cellule de la première ligne vide de mon tableau (ma feuille) entreprise, de
- rechercher le dernier identifiant dans mon tableau payement général et attribuer un nouveau numéro (+1) dans la colonne de l'identifiant sans que ce numéro n'évolue avec les autres payement que je ferai ultérieurement
- attribuer la date du jour sans que celle-ci ne change automatiquement

Voici ce que j'ai pu créer automatiquement ... :

Sub AJOUTIDETDATE()
'
' AJOUTIDETDATE Macro
' plageActive
' Touche de raccourci du clavier: Ctrl+Maj+D
'
ActiveCell.FormulaR1C1 = ""
Range("A178").Select
Selection.Copy
Range("B179").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.ScrollWorkbookTabs Position:=xlFirst
Sheets("Projet").Select 'la date du jour est dans une autre feuille'
Application.CutCopyMode = False
Selection.Copy
ActiveWindow.ScrollWorkbookTabs Sheets:=19
Sheets("0").Select 'Ceci est la feuille de l'entreprise'
Range("C179").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
End Sub

Le problème de cette macro c'est qu'elle prend systématiquement comme référence A178 une cellule que j'ai défini lors de l'enregistrement de cette dernière, hors je voudrais que ces ajouts automatiques se fassent à droite de la cellule où je positionne mon curseur. ou encore mieux mais pas nécessaire qu'il me fasse les ajouts de l'ID et de la date après la dernière ligne de payement.

La seconde macro est un petit peu plus compliquée.

Une fois les informations de payements remplies, dans la feuille entreprise, dont le montant, la date, les références du payement, etc ... je désire que ces informations "repeuple" mon tableau ou feuille de payement général.
Pour cette second macro, il faudrait à nouveau qu'elle soit liée à mon positionnement sur la ligne active ou cellule en question.
Lancer la macro me permettrait de recopier automatiquement, après la dernière ligne occupée de mon tableau des payements généraux, les valeurs concernées (ID, nom, corps de métier, montant, coordonnée bancaires) données présentes dans la feuilles de l'entreprise (afin de permettre à mon client de faire le payement).

Voilà, je vous remercie pour cette aide précieuse, je ne pense pas pouvoir m'en sortir, et suis au même stade depuis une bonne dizaine de jours.

Bonne soirée à tous.
Damien
A voir également:

6 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
10 sept. 2009 à 18:32
bonjour,
J'ai placé les codes au milieu de vos questions en gras :
1- Le problème de cette macro c'est qu'elle prend systématiquement comme référence A178 une cellule que j'ai défini lors de l'enregistrement de cette dernière, hors je voudrais que ces ajouts automatiques se fassent à droite de la cellule où je positionne mon curseur : ActiveCell.Offset(0, 1). ou encore mieux mais pas nécessaire qu'il me fasse les ajouts de l'ID et de la date après la dernière ligne de payement : Range("A65356").End(xlUp).Offset(1, 0).Select.
2- on verra plus en profondeur après la solution au 1 mais c'est quelque chose comme :
Sheets("entreprises").Rows(1).Copy Sheets("feuille de payement").End(xlUp).Offset(1, 0)
Mais répondons déjà à votre 1er questionnement...
0
unpetitange Messages postés 8 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 22 octobre 2011
10 sept. 2009 à 18:57
Merci beaucoup pour la réponse,

Je rajoute quelques clarification concernant ma macro.
En A178 sur la feuille de l'entreprise il y a la valeur suivante :
=MAX(feuillepayementgénérale!B12:B171)+1
Si je met mon curseur en A179, je voudrais que en B179 il y ait le nouvel ID qui se crée automatiquement et en C179 la date qui se rajoute automatiquement

Où dois-je placer dans ma macro ActiveCell.Offset(0, 1) ?
Merci beaucoup, Pijaku.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
11 sept. 2009 à 10:51
Bonjour,
juste une petite précision : ton ID est calculé par la formule MAX(feuillepayementgénérale!B12:B171)+1. Comment "évolue" t'il? Le suivant est : MAX(feuillepayementgénérale!B12:B172)+1?

0
Mike-31 Messages postés 18320 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 20 juin 2024 5 085
11 sept. 2009 à 11:26
Salut tout le monde,

Sub AJOUTIDETDATE()

Sheets("Entreprise").Select
[A65356].End(xlUp).Offset(1, 0).Select
ActiveCell = ActiveCell.Offset(-1, 0) + 1

End Sub

ce petit bout de code te permet de sélectionner la feuille Entreprise, rechercher la première cellule vide colonne A et d'ajouter une suite logique de numéro exemple en A1 saisis une valeur 1

Pour la suite je pense qu'il serait bien d'avoir un exemple de ton fichier sans données confidentielles, afin d'adapter le code,

à joindre avec ce lien

https://www.cjoint.com/

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 748
11 sept. 2009 à 11:39
Salut Mike-31,
J'ajouterais à ton code la date du jour en colonne C:
Sub AJOUTIDETDATE()
Sheets("Entreprise").Select
[A65356].End(xlUp).Offset(1, 0).Select
ActiveCell = ActiveCell.Offset(-1, 0) + 1
ActiveCell.Offset(0, 2) = CDate(Date)
End Sub

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Mike-31 Messages postés 18320 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 20 juin 2024 5 085
11 sept. 2009 à 11:49
Salut pijaku,

Tout à fait, mais avant de ce lancer un code, il serait bon de voir la structure du fichier qui ne me semble pas claire et le code de unpetitange n'apporte rien de constructif

Attendons de voir

A+
Mike-31

Un problème sans solution est un problème mal posé  (Einstein)
0
unpetitange Messages postés 8 Date d'inscription jeudi 10 septembre 2009 Statut Membre Dernière intervention 22 octobre 2011
11 sept. 2009 à 16:56
Bonjour à tous, Pijaku, Mike,
Pour répondre à la première question 3 de pijaku, la matrice ou zone dans laquelle je cherche l'ID le plus élevé reste à B171 qui aurait pu être plus ou moins. je n'ai pas eu à ce jour plus de 170 payements de fournisseurs à faire sur un chantier.
Mike, si je ne cherche pas la valeur le plus petite dans une colonne mais uniquement dans un plage?
Le code n'est en effet pas clair puisque il a été créé par l'enregistrement automatique d'une macro.
Je vous envoie le fichier en fin d'après-midi.
Merci beaucoup,
Damien
0