Garder une valeur en mémoire

morinn

XLDnaute Nouveau
Bonjour,
j'ai eu beaucoup de mal à trouver un titre pour ce post et il n'est peut être pas adapté. Je m'en vois d'avance désolé.

Je vous explique mon problème :

J'ai un classeur excel, composé de 12 feuilles correspondant au mois de l'année basé sur le modèle Office.com/calendrier/calendrier2012/calendrier de planning hebdomadaire pour étudiants.
Dans ce dernier, pour n'importe quel mois, il est noté de C4 à I9. Donc une semaine en C4:I4, C5:I5, [...], C9:I9.
A droite du mois, il y a une possibilité de prendre des notes par jour (Range K2:M32).

Est-il possible que si je clic sur un jour d'une semaine, par exemple la cellule D5 qui serait donc dans C5:I5, je puisse prendre des notes dans la case L10:M14 qui correspond aux affectations du mardi mais tout en ayant d'autres notes si je choisis une autre semaine.

Concrètement, je choisis le mardi 11 janvier qui est dans la semaine du 10 au 16, je note "prendre le tournevis" dans la cellule M10. Ensuite je choisis le mercredi 19 janvier. Au mardi je n'ai plus rien puisque ce n'est plus la même semaine et je note "Acheter un moule à tarte". Si je reclic sur le 11 janvier, le mercredi n'apparait plus mais le "prendre le tournevis" lui réapparait parce qu'il serait resté "en mémoire".

Si ce n'est pas clair, je peux répondre à vos questions.


Par avance merci.
 

morinn

XLDnaute Nouveau
Re : Garder une valeur en mémoire

Vraiment un grand merci à tous !
Vos codes m'aident beaucoup.

Maintenant, une autre question.
Vu que le USerform qui est crée va prendre le nom "mm/year/d" (par exemple FEVRIER/2012/12) est il possible de récupérer le texte de ce userform pour le mettre dans une cellule.

Par exemple un code du genre :

a = Month(ActiveCell)
a = MonthName(a)
b = Day(ActiveCell)
c = Year(ActiveCell)

'ici le code de récupération du texte de la user form tel que mon imagination la dicte :)

Range("G11") = Text.Userform.Name(a, c, b)

qui voudrait dire la cellule g11 est égal au texte de la userform qui s'appelle a, c, b soit Mois/année/jour de la cellule active :)


Merci encore à tous
 

ROGER2327

XLDnaute Barbatruc
Re : Garder une valeur en mémoire

Bonjour à tous


Oui si je dois passer par une macro VB ce n'est pas un problème mais je ne voyais pas comment faire :confused:

Merci de votre aide

Dans ce cas, voyez si l'essai joint est une base de travail acceptable...​


ROGER2327
#5748


Samedi 14 Clinamen 139 (Sortie de Albrecht Dürer, hermétiste - fête Suprême Quarte)
16 Germinal An CCXX, 0,1019h - laitue
2012-W14-4T00:14:40Z
 

Pièces jointes

  • Student Calendar_Mon Start11.xlsm
    108.6 KB · Affichages: 60

morinn

XLDnaute Nouveau
Re : Garder une valeur en mémoire

Bonjour à tous,

@Roger : Les macros proposés avec le userform me vont très bien. Encore un grand merci à tous :)

@Job : J'ai besoin de pouvoir récupérer les données du userform pour que les personnes qui vont utiliser ou imprimer les feuilles du classeur puissent voir les messages dans des cases précises question de pratique. S'il est possible de récupérer le texte et de l'assigner dans une case, c'est génial, et je suis preneur de la solution.

Merci encore pour tout :)
 

job75

XLDnaute Barbatruc
Re : Garder une valeur en mémoire

Bonjour le fil, le forum,

Excellente solution que celle de Roger :)

En voici une autre SANS USERFORM qui utilise les cellules AFFECTATIONS.

Roger mémorise dans une feuille auxiliaire, je persiste à mémoriser dans des noms définis.

Les 2 macros dans ThisWorkbook du fichier joint :

Code:
Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
  ByVal Target As Range, cancel As Boolean)
If Intersect(Target, Sh.[C4:I9]) Is Nothing Then Exit Sub
cancel = True
If Weekday(Target, 2) > 5 Then Exit Sub 'week-end exclu
Dim t, txt$
Sh.[L4:M32].ClearContents 'RAZ facultative...
Sh.[L4].Offset(6 * Weekday(Target, 2) - 6).Select
On Error Resume Next 'si le nom n'est pas encore défini
For Each t In Evaluate(Format(Target, "mmmm_yyyy_dd"))
  txt = txt & t 'concatène les éléments du tableau
Next
ActiveCell = IIf(txt = "", Format(Target, "dd/mm/yyyy") & vbLf, txt)
SendKeys "{F2}" 'touche F2
End Sub

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
If InStr("L4L10L16L22L28", Source.Address(0, 0)) = 0 Then Exit Sub
If InStr(Source, vbLf) = 0 Then Exit Sub 'date délimitée par le saut de ligne
Dim dat$, tablo$(), i&
dat = Left(Source, InStr(Source, vbLf) - 1)
If Not IsDate(dat) Then Exit Sub
ReDim tablo(Int(Len(Source) / 255), 0) '255 caractères par élément
For i = 0 To UBound(tablo)
  tablo(i, 0) = Mid(Source, 255 * i + 1, 255)
Next
ThisWorkbook.Names.Add UCase(Format(CDate(dat), "mmmm_yyyy_dd")), tablo
End Sub
Edit : bien noter dans la 1ère macro que l'instruction Sh.[L4:M32].ClearContents est facultative...

A+
 

Pièces jointes

  • Student Calendar_Mon Start11 SANS USF(1).xls
    233.5 KB · Affichages: 38
Dernière édition:

morinn

XLDnaute Nouveau
Re : Garder une valeur en mémoire

Alors là, un énorme merci, c'est exactement ce que je désirais faire !

Serait-ce abuser si je demandais une dernière chose ?
Comment faire pour que si je double clique ou sélectionne une cellule quelconque que je pourrai définir , par exemple le mardi 04/01/2012, je puisse afficher tout ce qui a été rentré pour la semaine. Donc je verrai le lundi 03, mardi 04 ... jusqu'à vendredi07 ?

J'ai conscience d'abuser de votre temps, mais si quelqu'un pense cela être faisable, je lui en serai reconnaissant.


Un grand Merci Encore !
:eek:
 

ROGER2327

XLDnaute Barbatruc
Re : Garder une valeur en mémoire

Re...
Alors là, un énorme merci, c'est exactement ce que je désirais faire !
(...)
Parfait !
J'ai dû rêver, je croyais avoir lu :
Je clique sur le 4 janvier(cellule D5 du range("C5:I5"), et je note à mardi (cellule M10) "tournevis".
Puis je clique sur la cellule E6 du range ("C6:I6"). En M10, il n' y a plus rien puisque tournevis est affecté à la semaine d'avant et non à la semaine sélectionnée. En M16, je note "moule à tarte".
Si je clique de nouveau sur une des cellules du range ("C5:I5"), il n' y a plus rien en M16 mais le tournevis de M10 réapparait et vice versa :)


ROGER2327
#5750


Samedi 14 Clinamen 139 (Sortie de Albrecht Dürer, hermétiste - fête Suprême Quarte)
16 Germinal An CCXX, 3,9537h - laitue
2012-W14-4T09:29:20Z
 

morinn

XLDnaute Nouveau
Re : Garder une valeur en mémoire

Ma commande était donc incomplète dès le départ. Damned. Vu que je me suis "trompé", je n'ose vous en demander plus.

Mon explication était incomplète car j'aurai du vous demander "le tournevis de M10 réapparait ainsi que tout ce qui a été rentré dans les cellules de la semaine concernée".

Ce n'est pas grave, merci pour tout :) :)
 

job75

XLDnaute Barbatruc
Re : Garder une valeur en mémoire

Bonjour morinn,

Excellente idée d'afficher toute la semaine :)

La macro paramétrée Affiche permet donc d'afficher les AFFECTATIONS de la semaine :

Code:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Source As Range)
If InStr("L4L10L16L22L28", Source.Address(0, 0)) = 0 Then Exit Sub
If InStr(Source, vbLf) = 0 Then Exit Sub 'date délimitée par le saut de ligne
Dim dat$, tablo$(), i&
dat = Left(Source, InStr(Source, vbLf) - 1)
If Not IsDate(dat) Then Exit Sub
ReDim tablo(Int(Len(Source) / 255), 0) '255 caractères par élément
For i = 0 To UBound(tablo)
  tablo(i, 0) = Mid(Source, 255 * i + 1, 255)
Next
ThisWorkbook.Names.Add UCase(Format(CDate(dat), "mmmm_yyyy_dd")), tablo
End Sub

Private Sub Workbook_SheetBeforeDoubleClick(ByVal Sh As Object, _
  ByVal Target As Range, cancel As Boolean)
If Intersect(Target, Sh.[C4:I9]) Is Nothing Then Exit Sub
Dim cel As Range
cancel = True
For Each cel In Intersect(Target.EntireRow, Sh.[C:G])
  Affiche Sh, cel
Next
If Weekday(Target, 2) > 5 Then Exit Sub 'week-end exclu
Sh.[L4:L28].Cells(6 * Weekday(Target, 2) - 5).Select
SendKeys "{F2}" 'touche F2
End Sub

Sub Affiche(Sh As Object, cel As Range)
Dim t, txt$
On Error Resume Next 'si le nom n'est pas encore défini
For Each t In Evaluate(Format(cel, "mmmm_yyyy_dd"))
  txt = txt & t 'concatène les éléments du tableau
Next
Sh.[L4:L28].Cells(6 * Weekday(cel, 2) - 5) _
  = IIf(txt = "", Format(cel, "dd/mm/yyyy") & vbLf, txt)
End Sub
Nota : l'affichage se fait aussi si l'on double-clique sur un samedi ou un dimanche.

Fichier (2).

A+
 

Pièces jointes

  • Student Calendar_Mon Start11 SANS USF(2).xls
    236 KB · Affichages: 41

ROGER2327

XLDnaute Barbatruc
Re : Garder une valeur en mémoire

Re...

(...) j'aurai du vous demander "le tournevis de M10 réapparait ainsi que tout ce qui a été rentré dans les cellules de la semaine concernée".
(...)
...ce que fait ma proposition...​


ROGER2327
#5751


Samedi 14 Clinamen 139 (Sortie de Albrecht Dürer, hermétiste - fête Suprême Quarte)
16 Germinal An CCXX, 5,8237h - laitue
2012-W14-4T13:58:37Z
 

Discussions similaires