XL 2013 Copier coller VBA

  • Initiateur de la discussion Initiateur de la discussion SAMESS
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

SAMESS

XLDnaute Nouveau
Bonjour Forum,

Je recherche un code vba qui me permette d'extraire le planning de chaque prof dans une nouvelle feuille avec son nom (voir exemple)
Merci d'avance
 

Pièces jointes

Solution
Bonjour Marcel32 et merci d'être intervenu.

Maintenant les choses sont plus claires, pour les doublons il y a la date mais aussi la fonction occupée.

Voyez ce fichier (3) et le complément de code :
VB:
'---vérification des doublons---
Set d = CreateObject("Scripting.Dictionary")
Set P = F.[B2].CurrentRegion 'à adapter
For i = 2 To P.Rows.Count
    For j = 4 To 6
        x = LCase(P(i, j) & P(i, 7) & P(1, j))
        If d.exists(x) Then MsgBox "Doublon sur '" & P(i, j) & "' pour le N° " & d(x) & " et le N° " & P(i, 1) & " !", 48: Exit Sub
        d(x) = P(i, 1) 'mémorise le N°
Next j, i
Aucune feuille ne sera créée tant qu'il restera un doublon.

A+
Bonjour SAMESS, Marcel32, Bruno,

Au départ seule la feuille "Planning" est nécessaire.

Voyez le fichier joint et la macro du bouton :
VB:
Sub Creation_Feuilles()
Dim F As Worksheet, i&, d As Object, P As Range, ncol%, j%, x$, k%, lig&
Set F = Sheets("Planning")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'---suppression des feuilles---
F.Move Before:=Sheets(1)
For i = Sheets.Count To 2 Step -1
    Sheets(i).Delete
Next i
'---création et remplissage des feuilles---
Set d = CreateObject("Scripting.Dictionary")
Set P = F.[B2].CurrentRegion 'à adapter
ncol = P.Columns.Count
For i = 2 To P.Rows.Count
    For j = 4 To 6 'colonnes à adapter
        x = Application.Proper(Trim(P(i, j))) 'NOMPROPRE
        If x <> "" Then
            If Not d.exists(x) Then
                Sheets.Add After:=Sheets(1)
                Sheets(2).Name = x
                For k = Sheets.Count To 3 Step -1
                    If x > Sheets(k).Name Then Sheets(x).Move After:=Sheets(k): Exit For 'classement des feuilles
                Next k
                With Sheets(x)
                    For k = 1 To ncol
                        .Columns(k).ColumnWidth = P(1, k).ColumnWidth 'largeurs des colonnes
                    Next
                    P.Rows(1).Copy .Cells(1)
                End With
            End If
            d(x) = d(x) + 1
            lig = d(x) + 1
            With Sheets(x).Cells(lig, 1)
                P.Rows(i).Copy .Cells
                .Value = P(i, 1) 'remplace la formule par la valeur
                With .Resize(, ncol).Interior
                    If lig Mod 2 Then .ColorIndex = xlNone Else .Color = RGB(221, 235, 247) 'bleu clair
                End With
            End With
        End If
Next j, i
F.Activate
End Sub
A+
 

Pièces jointes

Dernière édition:
Bonjour SAMESS, Marcel32, Bruno,

Au départ seule la feuille "Planning" est nécessaire.

Voyez le fichier joint et la macro du bouton :
VB:
Sub Creation_Feuilles()
Dim F As Worksheet, i&, d As Object, P As Range, ncol%, j%, x$, k%, lig&
Set F = Sheets("Planning")
Application.ScreenUpdating = False
Application.DisplayAlerts = False
'---suppression des feuilles---
F.Move Before:=Sheets(1)
For i = Sheets.Count To 2 Step -1
    Sheets(i).Delete
Next i
'---création et remplissage des feuilles---
Set d = CreateObject("Scripting.Dictionary")
Set P = F.[B2].CurrentRegion 'à adapter
ncol = P.Columns.Count
For i = 2 To P.Rows.Count
    For j = 4 To 6 'colonnes à adapter
        x = Application.Proper(Trim(P(i, j))) 'NOMPROPRE
        If x <> "" Then
            If Not d.exists(x) Then
                Sheets.Add After:=Sheets(1)
                Sheets(2).Name = x
                For k = Sheets.Count To 3 Step -1
                    If x > Sheets(k).Name Then Sheets(x).Move After:=Sheets(k): Exit For 'classement des feuilles
                Next k
                With Sheets(x)
                    For k = 1 To ncol
                        .Columns(k).ColumnWidth = P(1, k).ColumnWidth 'largeurs des colonnes
                    Next
                    P.Rows(1).Copy .Cells(1)
                End With
            End If
            d(x) = d(x) + 1
            lig = d(x) + 1
            P.Rows(i).Copy Sheets(x).Cells(lig, 1)
            With Sheets(x).Cells(lig, 1).Resize(, ncol).Interior
                If lig Mod 2 Then .ColorIndex = xlNone Else .Color = RGB(221, 235, 247) 'bleu clair
            End With
        End If
Next j, i
F.Activate
End Sub
A+
Merci beaucoup 🙂
 
Bonjour job75
Comment vas-tu?
tu peux ajouter une autre petite partie ?
si la colonne H de chaque prof contient des doublent,le fichier de la prof sera supprimé et un msg d’erreur qui contient"il faut modifié le planning de la prof "le nom de prof")
si possible!
 
Bonjour SAMESS, le forum,

Sur le fichier que j'ai joint il y a des doublons de dates dans 5 feuilles sur 6.

Dites-nous comment il faudrait modifier la feuille "Planning".

En effet ça ne sert à rien de balancer des messages dans la nature si l'on ne dit pas ce qu'il faut faire.

A+
 
Bonjour SAMESS, le forum,

Sur le fichier que j'ai joint il y a des doublons de dates dans 5 feuilles sur 6.

Dites-nous comment il faudrait modifier la feuille "Planning".

En effet ça ne sert à rien de balancer des messages dans la nature si l'on ne dit pas ce qu'il faut faire.

A+
Bonjour job75,le forum,
il affiche seulement la feuille qui n'est pas contient des doublent et pour les autres au lieu d'affiché un msg erreur, il regroupes toutes les plannings des profs qui contient des doublent dans une seule feuille
si possible!
merci d'avance 🙂
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
30
Affichages
782
D
  • Question Question
Réponses
5
Affichages
73
Didierpasdoué
D
Réponses
16
Affichages
664
Réponses
5
Affichages
377
Retour