Pour compéter ma demande, je souhaite ajouter à ma dernière feuille, en plus du numéro de facture donc, les informations suivantes :
Nom de l'onglet
La date de la saisie, à savoir celle du jour (aujourd'hui)
Et le mois de la date de la facture.
C'est ce dernier point qui pose problème, ayant normalement réussi à régler les 2 premiers.
Tous mes onglets, il y en a plus de 10 dans le fichier original, sont organisés de la même façon.
Je sélectionne une cellule(encadrée pour l'exemple), je démarre la macro.
Celle-ci insère un numéro, en feuille recap, puis dans ma cellule sélectionnée, copie la cellule du dessous de la même feuille, puis insère la date du jour en colonne D de la feuille recap, et enfin colle la date copiée en colonne C.
Ce que j'aimerais, est d'extraire le mois de cette dernière date. Exemple en C35 et C36 de recap.
J'ai essayé avec indirect mais sans succès. J'ai laissé la ligne dans la macro.
Une seconde question : mon code est il cohérent de la manière dont je l'ai rédigé (avec votre aide d'ailleurs pour le début) et fonctionnera t'il ainsi sans soucis ?
Code:
Sub Bouton_Facture()
x = Sheets("Recap").Range("B" & Rows.Count).End(xlUp).Row
ActiveCell = Sheets("Recap").Range("B" & x) + 1
ActiveCell.Offset(1, 0).Copy
Nom_Onglet = ActiveSheet.Name
Sheets("Recap").Range("B" & x + 1) = ActiveCell
Sheets("Recap").Select
Range("A300").End(xlUp).Offset(1, 0).Select
ActiveCell = Nom_Onglet
ActiveCell.Offset(0, 3).Select
ActiveCell.FormulaR1C1 = "=TODAY()"
ActiveCell.Offset(0, -1).Select
ActiveSheet.Paste
'Comment remplacer ici la cellule D36 par la cellule active ?
'ActiveCell.Formula = "=TEXT(indirect(""d36""),""mmmm"")"
End Sub
Calvus
Voici ma "revisitation"* de ton code.
Si tu as des questions , n'hésites pas
(Enfin, laisses passer la nuit, car là présentement, je vais au dodo)
Code:
Sub Bouton_Facture()
Dim x As Long, r As Range
Set r = ActiveCell
With Sheets("Recap")
x = .Range("B" & Rows.Count).End(xlUp).Row
r = .Range("B" & x) + 1
.Range(.Cells(x + 1, "A"), .Cells(x + 1, "D")) = _
Array(r.Parent.Name, r.Value, Format(r.Offset(1, 0).Text, "mmmm"), Date)
End With
End Sub
NB: *: c'est juste pour la beauté du geste car ton code tel que tu l'as écrit fonctionne.
.
Si, merci également, mais j'avoue que je ne comprends pas très bien...
Ma demande me semblait claire depuis le début et j'avais indiqué dès le premier post que plusieurs onglets étaient concernés. Je l'ai à nouveau précisé en post 7, mais peut être pas de façon assez précise finalement. Pourtant j'avais joint un fichier avec les numéros affichés sur plusieurs onglets..
Mais bon.
Mais si puisque maintenant tu fournis un fichier support plus précis (feuilles, cellules concernées mises en évidence) !
La macro de Staple à ma sauce (première réponse) dans ThisWorbook* donnerait :
Code:
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal R As Range)
If Sh.Name = "Recap" Then Exit Sub
If Not IsDate(R(2, 1)) Then Exit Sub
Dim C As Range
Set C = Feuil3.[A65000].End(xlUp)(2)
R = C(0, 2) + 1
C.Resize(1, 4) = Array(Sh.Name, R, (R(2, 1)), Date)
C(1, 3).Resize(1, 2).NumberFormat = "m/d/yyyy"
End Sub
* il y a tellement des problèmes avec les "ActiveX" en ce moment que je préfère les éviter dans mes réponses
Si des tris étaient effectués dans l'onglet "Recap", le code suivant devrait éviter de mauvaises surprises...
Code:
Option Explicit
Sub Numéro_sans_surprise()
Selection = Application.WorksheetFunction.Max(Sheets("Recap").Columns("a:a")) + 1
With Sheets("Recap").Range("a" & Rows.Count).End(xlUp)(2)
.Value = Selection
.Offset(, 1) = ActiveSheet.Name
.Offset(, 2) = Date
.Offset(, 3) = Format(Date, "mmmm")
End With
End Sub
Pour échapper à la guerre des boutons , un autre essai avec ce code, logé dans le module "ThisWorkbook" :
Code:
Option Explicit
Private Sub Workbook_SheetBeforeDoubleClick(ByVal o As Object, ByVal c As Range, Cancel As Boolean)
If o.Name <> "Recap" Then
c = Application.WorksheetFunction.Max(Sheets("Recap").Columns("a:a")) + 1
With Sheets("Recap").Range("a" & Rows.Count).End(xlUp)(2)
.Value = c
.Offset(, 1) = o.Name
.Offset(, 2) = Date
.Offset(, 3) = Format(Date, "mmmm")
End With
End If
Cancel = True
End Sub
Encore une fois, merci à vous trois ainsi qu'à Pierrejean qui m'a mis sur la voie.
Staple, je ne comprends rien à ton code. J'ai essayé pourtant ! J'ai saisi l'idée mais je dois chercher ce que font Array etc.
Si, ton fichier fonctionne nickel, malgré le format en colonne C. Finalement se serait bien de le conserver en inscrivant le mois en lettres à coté. Je vais voir si je trouve.
Merci pour les explications, je peux ainsi comprendre la fonction de chaque ligne, même si ce qui y est inscrit est parfaitement incompréhensible. Tu m'as encore plus paumé que Staple !
Suze , merci de ton aide. Huitième boite de Doliprane à la tentative de compréhension de ton code !
J' ai tout de même saisi les grandes lignes là aussi me semble t-il. Il ressemble à celui de Staple d'ailleurs. Les Offset sont plus compréhensibles pour moi.
Par contre, une petite erreur à signaler, le mois affiché en colonne C' est systématiquement février.
Et le tri uniquement pour que ce soit en colonne A ?
Je vais donc avancer et revenir vous embêter pour des explications.
En attendant, mon bout de code à moi :
Option Very Explicite
In excel
with
.moult.tentatives
.several.arrachages_de_cheveux
I'm a Very Big Ane
End with
est-il vrai qu'après un abus de Suze, l'âne rit ?
Désolé pour ce mauvais jeu de mot mais c'était surtout pour te faire un clin d'oeil avant de dire à Calvus que son Calv...aire n'est pas fini. Le plus dur reste à faire : tout remettre en place après suppression d'un numéro déjà attribué.
Nota : pour avoir seulement le nom du mois le format est "mmmm"
Staple, je ne comprends rien à ton code.
J'ai essayé pourtant ! J'ai saisi l'idée mais je dois chercher ce que font Array etc. (c'est l'essentiel )
Si, ton fichier fonctionne nickel, malgré le format en colonne C. Finalement se serait bien de le conserver en inscrivant le mois en lettres à coté. Je vais voir si je trouve.
Merci pour les explications, je peux ainsi comprendre la fonction de chaque ligne, même si ce qui y est inscrit est parfaitement incompréhensible. Tu m'as encore plus paumé que Staple !
NB:
[phrase d'évitement du quiproquo post-apéritif]
Étant entendu que la patate n'est pas un membre du forum présent dans ce fil.
/[phrase d'évitement du quiproquo post-apéritif]
est-il vrai qu'après un abus de Suze, l'âne rit ?
Désolé pour ce mauvais jeu de mot mais c'était surtout pour te faire un clin d'oeil avant de dire à Calvus que son Calv...aire n'est pas fini. Le plus dur reste à faire : tout remettre en place après suppression d'un numéro déjà attribué.
Nota : pour avoir seulement le nom du mois le format est "mmmm"
Je vois que tu n'as pas attendu pour l'apéro...et apparemment, ça ne te fait pas peur d'abuser de la boisson...
Et qui te dit que je suis petit d'abord ??
NB:
[phrase d'évitement du quiproquo post-apéritif]
Étant entendu que la patate n'est pas un membre du forum présent dans ce fil.
/[phrase d'évitement du quiproquo post-apéritif]
Notre ami n'est pas en reste non plus !
Et tu ne vas pas te débarrasser de moi comme ça. Je sais nager en eaux troubles !
D'ailleurs, quelqu'un a des nouvelles de Carcharodon ?
Comment as-tu deviné que je préfère le Calva... mais pas pour accompagner les patates de Staple (qui aurait été plus sympa en me refilant aussi ses endives, au lieu de m'asticot er) !
J'espère que n'as pas perdu espoir : je ne tenais vraiment à te décourager .
Il y a des cas où une solution donnée compte plus que sa construction. Maintenant pour celui qui veut progresser dans la programmation ...
Si, j'ai hésité entre ton code et celui de DoubleZéro, et finalement opté pour le tien, le fait de se placer sur ma cellule pour déclencher l’événement me convenant. (DB, désolé de ne pas t'avoir retenue sur ce coup là, j'espère tu ne va pas encore me traiter de petit...).
En revanche comment faire pour avoir la colonne C ( sur ton fichier joint) en format "mmmm" et la colonne D en "m/d/yyyy" ?