Excel appliquer une macro à partir d'une cell

unpetitange Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   -  
unpetitange Messages postés 8 Date d'inscription   Statut Membre Dernière intervention   - 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   Statut Modérateur Dernière intervention   2 759
 
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   Statut Membre Dernière intervention  
 
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   Statut Modérateur Dernière intervention   2 759
 
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 18395 Date d'inscription   Statut Contributeur Dernière intervention   5 131
 
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   Statut Modérateur Dernière intervention   2 759
 
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 18395 Date d'inscription   Statut Contributeur Dernière intervention   5 131
 
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   Statut Membre Dernière intervention  
 
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