planning et recapt

patrick7676

XLDnaute Occasionnel
bonjour j'espère que vous avez pas un bon weekend

voila mon petit problème
j'ai un fichier avec deux onglets . il s'appelle " Planning et Recapt "

Dans le fichier " planning " les élèves sont inscrit dans les matières en fonction des jours . l'inscription est symbolisé par une croix ( fond jaune )

Je souhaiterai que dans le fichier "Recapt" : A chaque jour nous trouvons les noms des élèves dans chaque matière

Pour être plus clair je vous ai mis un fichier joint

merci
 

Pièces jointes

  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 53
  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 53
  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 54

gosselien

XLDnaute Barbatruc
Re : planning et recapt

Bonjour,

pour les formules, il faudra demander aux experts; j'ai un niveau moyen en formule et vba moi...

j'ai commenté le code:


P.


Option Base 1 ' pour démarrer une recherche à 1 dans une array
Sub Tableau()
Dim Mat2 As Integer
Set WS1 = Sheets("planning") ' WS1 est plus court pour retrouver la feuille
Set Ws2 = Sheets("récapt")
Ws2.Range("A4:A40").ClearContents
Dim Choix() 'ARRAY
Choix = Array("Histoire", "Géographie", "Maths", "Français", "Anglais", "Lecture")
' je mets dans une array mes différentes matières
Ligne = 4 ' la 1ere ligne en Récap est 4
Dim mdate2 'mémoriser une date
Dim Diff As Integer ' différence entre la date mémorisée et la dte qui correspond à la cellule en cours
Dim mNom2 As String
mdate = WS1.Range("B4").Value ' je mémorise la date en B4 feuille planning
For Each C In Range("table") ' j'ai nommé TABLE la zone de planning (avec les couleurs)
' boucle sur chaque contenu de cette zone
mrow = C.Row ' ligne actuelle (qui va changer dans la boucle)
Mcol = C.Column ' colonne actuelle (qui va changer dans la boucle )
If Not C = "" And UCase(C.Value) = UCase("x") Then ' si pas vide et si "X" ds la cellule
mat = WS1.Cells(5, C.Column).Value ' memoriser la matière
mnom = WS1.Cells(mrow, 1).Value ' mémo du nom
Diff = WS1.Cells(4, C.Column).Value - mdate
If Diff <> 0 Then ' si la date départ <> de la cellule actuelle
Ligne = Ligne ' on garde la ligne de départ
Else 'sinon
Ligne = 4 'on revient à la ligne du début (4)
End If
If Not IsError(Application.Match(mat, Choix, 0)) Then
' si on trouve la matière en position 5 dans
' l'array "choix" , on en mémorise sa position avec mat2
' "lecture" est le 6e dans l'Array donc on mets le résultat
' dans la colonne 1 (col A de récap) + numéro de la position 6 = 7e colonne à l'arrivée
Mat2 = Application.Match(mat, Choix, 0) '
Ws2.Cells(Ligne + Diff, 1).Value = mdate + Diff
' la ligne d'arrivée est soit 4 (feuille récup) soit 4 + la différence trouvée plus haut
Ws2.Cells(Ligne + Diff, Mat2 + 1).Value = mnom 'sur cette ligne on y colle la matière mémorisée
End If
End If
Next
End Sub

' ceci est MON approche, il y a surement mieux et ça fige un peu les 2 feuilles, dans le
' sens où elles ne peuvent pas être déplacées, en tout cas pas l'arrivée
' d'autres ici feront certainement mieux :)
 

patrick7676

XLDnaute Occasionnel
Re : planning et recapt

déjà merci pour le travail que tu as accompli . mais c'est vrai en décortiquant la VBA, que tu as faite , je ne pourrais pas la retranscrire dans un autre fichier . c'est pour cela que l'utilisation de formules ou de matrices sera plus simple pour moi .

C'est pour cela que je cherche un début de piste pour maider

merci
 

Pièces jointes

  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 39
  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 39
  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 39

klin89

XLDnaute Accro
Re : planning et recapt

Bonsoir patrick7676, gosselien, le forum

A tester :
VB:
Option Explicit
Sub Reorganise()
Dim a, b(), i As Long, j As Long, k As Long, n As Long
    Application.ScreenUpdating = False
    a = Sheets("planning").Range("B4").CurrentRegion.Value
    ReDim b(1 To UBound(a, 1) * UBound(a, 2), 1 To 7)
    For i = 2 To UBound(a, 2)
        If (i - 2) Mod 6 = 0 Then
            k = 2: n = n + 1
            b(n, 1) = a(1, i)
        End If
        For j = 3 To UBound(a, 1)
            If a(j, i) <> "" Then
                b(n, k) = a(j, 1)
                Exit For
            End If
        Next
        k = k + 1
    Next
    'Restitution et mise en forme
    With Sheets("récapt").Cells(1).Resize(, 7)
        .CurrentRegion.Clear
        .Value = Array("", "histoire", "géographie", "maths", "français", "anglais", "lecture")
        With .Offset(1).Resize(n)
            .Value = b
            With .CurrentRegion
                .BorderAround ColorIndex:=1, Weight:=xlThin
                .Borders(xlInsideVertical).Weight = xlThin
                .HorizontalAlignment = xlCenter
                .VerticalAlignment = xlCenter
                .Font.Name = "calibri"
                .Font.Size = 10
                With .Rows(1)
                    .Font.Size = 11
                    .RowHeight = 18
                    .BorderAround ColorIndex:=1, Weight:=xlThin
                    With .Offset(, 1).Resize(, .Columns.Count - 1)
                        .Interior.ColorIndex = 44
                    End With
                End With
                With .Columns(1)
                    With .Offset(1).Resize(.Rows.Count - 1)
                        .Interior.ColorIndex = 43
                    End With
                End With
                .Parent.Activate
            End With
        End With
    End With
    Application.ScreenUpdating = True
End Sub
klin89
 
Dernière édition:

patrick7676

XLDnaute Occasionnel
Re : planning et recapt

bonjour c'est très gentil klin89 pour le travail accompli malheureusement je suis nul en VBA .

Y a t il possibilité de faire ce travail avec formules ?

en attente d'une réponse de ta part et bien sur de tout le monde .

Et si oui peut on me donner un bout de piste pour commencer ?
 

Pièces jointes

  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 28
  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 30
  • essai planning 4 bis.xlsx
    14.8 KB · Affichages: 31

pascal21

XLDnaute Barbatruc
Re : planning et recapt

bonjour a tous
dommage que tu ne sache pas adapter le code proposé par KLIN89, car il fonctionne très bien et à l'air dans le sens de ce que tu cherches à avoir
dis nous simplement les différences entre le fichier exemple et ton fichier réel ( plages de cellules)
on devrait arriver à adapter par la suite
 

Discussions similaires

Réponses
5
Affichages
323
  • Résolu(e)
Microsoft 365 planning
Réponses
17
Affichages
688
Réponses
13
Affichages
677
Réponses
28
Affichages
1 K
Réponses
3
Affichages
342

Statistiques des forums

Discussions
312 215
Messages
2 086 329
Membres
103 184
dernier inscrit
Di Martino