Office 365 Report du contenu d'une cellule dans un calendrier

Kinou25

XLDnaute Nouveau
Bonjour à tous !

Voici mon problème : j'ai une feuille intitulée "apprentissage" dans laquelle j'ai une colonne "items" (avec un numéro et un intitulé pour chaque item) suivie de 8 colonnes dans lesquelles on retrouve 8 dates auxquelles je dois revoir cet item. Dans une autre feuille intitulée "calendrier" se trouve donc (comme son nom l'indique) un calendrier où j'aimerais voir apparaître l'intitulé et le numéro de l'item au niveau des 8 dates correspondantes aux colonnes de la feuille "apprentissage"

j'ai essayé d'être le plus clair possible, je vous joint le fichier excel ça vous parlera sûrement plus que mon explication.

Merci d'avance pour vos réponses
 

Fichiers joints

job75

XLDnaute Barbatruc
Bonjour Kinou25, bienvenue sur XLD, bonjour le forum,

Voyez le fichier joint et cette macro dans le code de la feuille "Calendrier" (clic droit sur l'onglet et Visualiser le code) :
VB:
Private Sub Worksheet_Activate()
Dim d As Object, c As Range, tablo, i&, x$, j%, y$
Application.ScreenUpdating = False
'---liste des adresses (pour accélérer)---
On Error Resume Next 'si aucune SpecialCell
Set d = CreateObject("Scripting.Dictionary")
For Each c In [C:I].SpecialCells(xlCellTypeConstants, 1)
    d(c.Value) = c(2).Address
Next
On Error GoTo 0
'---récupération des textes en feuille Apprentissage---
With Sheets("Apprentissage")
    If .FilterMode Then .ShowAllData 'si la feuille est filtrée
    tablo = .Range("B5:AG" & .Range("A" & .Rows.Count).End(xlUp).Row) 'matrice, plus rapide
    For i = 1 To UBound(tablo)
        x = tablo(i, 1) & " " & tablo(i, 2)
        For j = 4 To 32 Step 4
            If d.exists(tablo(i, j)) Then
                With Range(d(tablo(i, j)))
                    y = .Value
                    If InStr(y, x) = 0 Then .Value = IIf(y = "", "", y & vbLf) & x
                End With
            End If
    Next j, i
End With
End Sub
Elle se déclenche quand on active la feuille.

Bonne journée.
 

Fichiers joints

Kinou25

XLDnaute Nouveau
C'est exactement ce qu'il me fallait, merci beaucoup !
Par contre j'avais juste oublié de préciser dans mon précédent post : est-il également possible que les cellules du calendrier se mettent à jour lorsque je supprime une ou plusieurs dates des 8 colonnes correspondantes à un item ?
 

job75

XLDnaute Barbatruc
Pour mettre à jour les cellules du calendrier voyez ce fichier (2) et le code dans la feuille "Apprentissage" :
VB:
Private Sub Worksheet_Change(ByVal R As Range)
Dim c As Range, n&, a(), x$
Set R = Intersect(R, [E:E,I:I,M:M,Q:Q,U:U,Y:Y,AC:AC,AG:AG])
If R Is Nothing Then Exit Sub
ReDim a(1 To R.Count, 1 To 2)
For Each c In R
    n = n + 1
    a(n, 1) = c
Next
Application.ScreenUpdating = False
Application.EnableEvents = False
n = 0
Application.Undo 'annule les modifications
For Each c In R
    n = n + 1
    If c <> a(n, 1) Then a(n, 1) = c: a(n, 2) = Cells(c.Row, 2) & " " & Cells(c.Row, 3) Else a(n, 1) = ""
Next
Application.Undo 'rétablit les modifications
Application.EnableEvents = True
With Sheets("Calendrier ") 'espace superflu !!!
    For n = 1 To UBound(a)
        If a(n, 2) <> "" Then
            Set c = .Range("C:I").Find(a(n, 1), , xlFormulas, xlWhole)
            If Not c Is Nothing Then
                x = c(2)
                If InStr(x, a(n, 2)) Then
                    x = Replace(x, vbLf & a(n, 2), "")
                    c(2) = Replace(x, a(n, 2), "")
                End If
            End If
        End If
    Next
End With
End Sub
Pour tester modifiez la date en M5 ou supprimez-la.
 

Fichiers joints

job75

XLDnaute Barbatruc
Une précision : j'ai supposé que les dates de la feuille "Apprentissage" seront entrées manuellement et non pas par des formules.
 

Kinou25

XLDnaute Nouveau
J'ai oublié de vous le précisez mais uniquement les dates de la colonne E sont entrées manuellement, les autres colonnes (I, E, ect...) sont l'objet de formules permettant d'ajouter le nombre de jours voulu à la date de départ de la colonne E.
L'action que vous effectuez pour M5 est exactement ce que je recherche à la différence près que dans la feuille "apprentissage" je ne souhaite entrer manuellement les dates que dans la colonne E

Je vous joint un fichier avec une date à J0 de la feuille "apprentissage" qui correspond au début du calendrier de la feuille "calendrier" pour qu'il n'y ait pas de confusion.

(désolé si je ne m'exprime pas assez clairement mais je suis novice avec Excel) Merci pour votre patience.
 

Fichiers joints

job75

XLDnaute Barbatruc
Fichier (3) avec cette nouvelle macro dans le code de la feuille "Apprentissage" :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo1, tablo2, i&, j%, c As Range, x$, y$
Set Target = Intersect(Target, [E:E,J3,N3,R3,V3,Z3,AD3,AH3])
If Target Is Nothing Then Exit Sub
If FilterMode Then ShowAllData 'si la feuille est filtrée
tablo1 = Range("B5:AG" & Range("A" & Rows.Count).End(xlUp).Row)
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Undo 'annule les modifications
tablo2 = Range("B5:AG" & Range("A" & Rows.Count).End(xlUp).Row)
Application.Undo 'rétablit les modifications
Application.EnableEvents = True
With Sheets("Calendrier ") 'espace superflu !!!
    For i = 1 To Application.Min(UBound(tablo1), UBound(tablo2))
        For j = 4 To 32 Step 4
            If tablo1(i, j) <> tablo2(i, j) Then
                Set c = .Range("C:I").Find(tablo2(i, j), , xlFormulas, xlWhole)
                If Not c Is Nothing Then
                    x = c(2)
                    y = tablo2(i, 1) & " " & tablo2(i, 2) & Chr(160) 'texte bordé par le caractère 160
                    If InStr(x, y) Then
                        x = Replace(x, vbLf & y, "")
                        c(2) = Replace(x, y, "")
                    End If
                End If
            End If
    Next j, i
End With
End Sub
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Il y avait un problème avec un texte comme Diabète qui apparaît dans plusieurs items.

Pour l'éviter, dans les 2 macros du fichier précédent, j'ai bordé le texte par l'espace insécable de code 160.
 

Kinou25

XLDnaute Nouveau
Je viens de tester et tout semble marcher à merveille, c'est exactement ce que je recherchais !

Je vous remercie beaucoup pour votre aide et votre réactivité ! Bonne soirée
 

Amilo

XLDnaute Accro
Bonjour Kinou25, job75, le forum,
Une proposition avec Power query pour le fun…. même si cela ne vaut pas l'excellent travail de job75 et le calendrier d'origine mais on peut encore améliorer un peu le calendrier Power query.
Cordialement
 

Fichiers joints

Dernière édition:

job75

XLDnaute Barbatruc
Bonjour Amilo,

Je n'ai pas Power Query et je n'ai pas l'intention de l'installer.

Avec ma solution on peut obtenir plusieurs textes (items) dans une cellule du calendrier.

Est-ce possible avec Power Query ?

A+
 

Amilo

XLDnaute Accro
Bonjour Amilo,

Je n'ai pas Power Query et je n'ai pas l'intention de l'installer.

Avec ma solution on peut obtenir plusieurs textes (items) dans une cellule du calendrier.

Est-ce possible avec Power Query ?

A+
Bonsoir job75,

désolé pour le retour tardif et merci pour votre remarque pertinente,
Après vérification, effectivement le multi items ne fonctionne pas dans mon fichier tel que construit alors que le votre répond parfaitement.

Pour le test, j'ai indiqué une même date dans différentes cellules de la 1ère colonne et cela ne reprend qu'un seul Item,

Sinon, cela reste toujours possible avec Power query mais pas certain que cela vaut la peine de m'y pencher....sachant que votre solution fonctionne très bien et satisfait pleinement kinou25

Personnellement, concernant l'installation de Power query et compte tenu de votre niveau Excel et VBA, je ne pense pas que cela vous apporte un réel avantage sauf si les données à analyser dépassent le million de lignes où Power query peut contenir sans trop de difficulté plusieurs millions de lignes.

Par contre, je le conseillerais fortement pour ceux qui n'ont pas la patience et la motivation de se lancer dans le VBA que je regrette de ne pas maîtriser.

Edit : je me suis déjà posé la question à savoir, s'il y avait des membres MVP sur ce forum….même si je suis conscient de ce que cela implique pour prétendre à la certification : il me semble à la fois, bien sûr de maitriser parfaitement et être un expert d'Excel (ce que l'on trouve sur ce forum) mais aussi avoir écrit un livre sur Excel, participer activement à des forums, avoir créé ou tenir un site sur Excel, animer des conférences, etc...

Il paraît, si je ne me trompe pas, qu'on les compte, sur les doigts d'une, voire de quelques mains par pays…???

Bonne soirée
 
Dernière édition:

job75

XLDnaute Barbatruc
Merci Amilo pour cette réponse pertinente.

Je ne sais pas s'il y a des MVP sur ce forum mais a priori Jacques Boisgontier mérite ce titre.
 

Discussions similaires


Haut Bas