Regrouper les données de plusieurs onglets sur un seul

Bonjour,

J'ai plusieurs onglets avec des données et j'aimerais simplement tout regrouper sur un seul onglet automatiquement. peut être avec une macro je ne sais pas ?

J'aimerais avoir toutes les données de chaque feuille sur l'onglet "DonnéesRegroupées". Voir fichier joint. j'ai expliqué comment je souhaite les retrouver sur un seul onglet.

A savoir que les données des onglets vont augmenter. donc si je rajoute des données elles se verront aussi sur l'onglet ou je souhaite tout regrouper (DonnéesRegroupées).

Merci de votre aide et bonne journée.

Jan

202donneesregroupees.xlsm (498.12 Ko)

Bonjour,

Proposition, à mettre dans la feuille DonnéesRegroupées

Private Sub Worksheet_Activate()
Range("A1").CurrentRegion.Offset(1, 0).Clear
For Each feuille In Worksheets
    With feuille
        If .Name <> ActiveSheet.Name And .Name <> "Accueil" Then
            Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
            der = .Range("A" & Rows.Count).End(xlUp).Row
            .Range(.Cells(2, "A"), .Cells(der, "F")).Copy
            ActiveSheet.Paste
        End If
    End With
Next
Cells(1, 1).Select
End Sub

La mise à jour est faite à l'activation de la feuille.

285donneesregroupees.xlsm (493.98 Ko)

merci!

J'aurais encore une faveur à te demander. Serait t'il possible de mettre automatiquement le calcul de la colonne G (temps badgés) et H (Date) en cliquant sur "Fin" ? des onglets de chaque personne

Actuellement c'est simple formule excel.

Merci d'avance pour ton aide.

Sub Fin()
Dim Ref As String
Dim iLig As Integer
Ref = Cells(Range("A" & Rows.Count).End(xlUp).Row, "A")
   iLig = Range("D" & Rows.Count).End(xlUp).Row + 1
   Range("D" & iLig).Value = Ref
   Range("E" & iLig).Value = Date
   Range("F" & iLig).Value = Format(Now, "hh:mm")
   Range("G" & iLig).Value = (Range("F" & iLig).Value - Range("C" & iLig).Value) * 24
End Sub

MAIS ... normalement tu n'en as pas besoin. Il faudrait que les tableaux englobent la colonne (et au passage tes tableaux devraient être réduits aux seules lignes renseignées, cela ne sert à rien de mettre des lignes vierges).

Cela dit, ton système est très intelligent !

Merci beaucoup! Je sais que je peux optimiser tout ça mais pour le moment ça fait ce dont j'ai besoin.

Merci encore.

sur le fichier "DonnéesRegroupées". quand je mets protéger la feuille avec un code. je ne peux plus cliquer sur "Début" ou "Fin". est-il possible de rajouter qqch pour éviter cette erreur ?

J'ai encore un petit service à te demander. J'aimerais tout simplement concatener (dans la colonne 3) les cellules de la colonne 1 et 2 qui ont des valeurs évidemment . donc dès que je mets des valeurs dans la colonne 1 et 2. la macro affiche automatiquement (sans bouton) la valeur dans la colonne 3.

Merci d'avance pour ton aide.

19classeur1.xlsx (8.92 Ko)

sur le fichier "DonnéesRegroupées". quand je mets protéger la feuille avec un code. je ne peux plus cliquer sur "Début" ou "Fin". est-il possible de rajouter qqch pour éviter cette erreur ?

ok, je te réponds en début d'apm

J'ai encore un petit service à te demander. J'aimerais tout simplement concatener (dans la colonne 3) les cellules de la colonne 1 et 2 qui ont des valeurs évidemment . donc dès que je mets des valeurs dans la colonne 1 et 2. la macro affiche automatiquement (sans bouton) la valeur dans la colonne 3.

Il suffit de passer en "tableau excel structuré" : Accueil > Mise sous forme de tableau, et tu choisis la mise en forme colorée qui te convient. Les formules sont ensuite exprimées autrement et les nouvelles lignes hériteront des formules.

23classeur1.xlsx (9.54 Ko)

sur le fichier "DonnéesRegroupées". quand je mets protéger la feuille avec un code. je ne peux plus cliquer sur "Début" ou "Fin". est-il possible de rajouter qqch pour éviter cette erreur ?

ok, je te réponds en début d'apm

Option ExplicitSub Début()

    Dim sValeur As String
    Dim iLig As Integer

    sValeur = InputBox("Veuillez saisir le code barre : ")

    If sValeur = "" Then
        Exit Sub
    End If
    ActiveSheet.Unprotect
    iLig = Range("A" & Rows.Count).End(xlUp).Row + 1

    Range("A" & iLig).Value = sValeur
    Range("B" & iLig).Value = Date
    Range("C" & iLig).Value = Format(Now, "hh:mm")
    ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Sub Fin()
Dim Ref As String
Dim iLig As Integer
ActiveSheet.Unprotect
Ref = Cells(Range("A" & Rows.Count).End(xlUp).Row, "A")
   iLig = Range("D" & Rows.Count).End(xlUp).Row + 1
   Range("D" & iLig).Value = Ref
   Range("E" & iLig).Value = Date
   Range("F" & iLig).Value = Format(Now, "hh:mm")
   Range("G" & iLig).Value = (Range("F" & iLig).Value - Range("C" & iLig).Value) * 24
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

ça ne fonctionne pas. Sais-tu pourquoi ?

Enfin oui ça fonctionne mais pas complétement comme je le souhaite. Merci bcp de ton aide.

Ah bon ... que souhaites-tu ?

Et avais-tu mis un mot de passe ? car dans ce cas il faudra aussi protéger le code VBA !

En fait, je souhaites verrouiller quand je le souhaite et ceci avec un mot de passe que je choisis.

Disons que je verrouille avec le mot de passe "OK". j'aimerais que mes boutons fonctionnent toujours. peu importe le mot de passe que je choisis.

Merci encore pour ton aide précieuse.

Jan

si tu as un mot de passe, utilise ceci (mets le mot de passe dans Const mdp=________, ici coco

regarde aussi quelles sont les cellules verrouillées

Option Explicit
Const mdp = "coco"
Sub Début()

    Dim sValeur As String
    Dim iLig As Integer

    sValeur = InputBox("Veuillez saisir le code barre : ")

    If sValeur = "" Then
        Exit Sub
    End If
    ActiveSheet.Unprotect Password:=mdp
    iLig = Range("A" & Rows.Count).End(xlUp).Row + 1

    Range("A" & iLig).Value = sValeur
    Range("B" & iLig).Value = Date
    Range("C" & iLig).Value = Format(Now, "hh:mm")
    ActiveSheet.Protect Password:=mdp, DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Sub Fin()
Dim Ref As String
Dim iLig As Integer
ActiveSheet.Unprotect Password:=mdp
Ref = Cells(Range("A" & Rows.Count).End(xlUp).Row, "A")
   iLig = Range("D" & Rows.Count).End(xlUp).Row + 1
   Range("D" & iLig).Value = Ref
   Range("E" & iLig).Value = Date
   Range("F" & iLig).Value = Format(Now, "hh:mm")
   Range("G" & iLig).Value = (Range("F" & iLig).Value - Range("C" & iLig).Value) * 24
ActiveSheet.Protect Password:=mdp, DrawingObjects:=True, Contents:=True, Scenarios:=True
End Sub

Bonjour,

Ton module 2 peut se réduire à cela

Option Explicit

Sub nom()
    Sheets(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text).Select
End Sub

C'est plus simple pour ajouter, ou modifier les noms

Valable aussi pour Accueil

... mais il faut revoir l'affectation des macros aux boutons

Ce que tu as demandé comme la protection des feuilles ou le calcul via macro est inutile en utilisant les tableaux excel comme il se doit. Je les ai réduits aussi aux seules lignes utiles (pas la peine d'avoir plus de 1 million de lignes vierges).

Je regarde ça au plus vite et te redis. Merci en tout cas.

Bel après-midi.

Jan

Salut Steelson,

J'espère que tu vas bien, J'ai testé ce que tu m'as proposé! c'est top merci!

J'aurais encore besoin de toi. peut-être que tu pourras me débloquer

J'aimerais continuer à utiliser ce bouton importer les données des pages concernées mais j'aimerais que si il n'y a pas de données après les titres des colonnes il ne me ramène rien. tu l'avais fait mais toi les données se mettaient à jour dès que tu cliquais sur l'onglet. moi j'aimerais continuer à utiliser mon bouton "importer" mais j'aimerais pas que ça me importe les lignes si il y en a pas.

Const mdp = "1"

Sub Importer()

Dim Ws As Worksheet

ActiveSheet.Unprotect Password:=mdp

Application.ScreenUpdating = False

With Sheets("DonnéesRegroupées")

.Range("A2:H" & .Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents

For Each Ws In Sheets(Array("Costa Ricardo", "Guimares Sergio", "Romand Fanny", "Giotto Laure", "Velosa Cristina", "Vouillot Vincent", "Silva Sergio"))

Ws.Range("A2:H" & Ws.Range("A" & Rows.Count).End(xlUp).Row).Copy .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

Next Ws

ActiveSheet.Protect Password:=mdp, DrawingObjects:=True, Contents:=True, Scenarios:=True

End With

End Sub

Ensuite j'ai une 2ème demande. Je t'ai joint le fichier ici. De base j'ai fait les onglets rouges. Donc je repartis simplement la charge entre la date de début et la date de fin en prenant en compte les fériés et fermetures de l'entreprise.

Maintenant, je souhaite répartir exactement de la même manière (Sans macro) sauf j'aimerais ajouter les vacances par poste de travail. Si possible j'aimerais simplement adapter la même formule que j'avais de base.

Donc par exemple si A8 = PT1 j'aimerais aller checker dans ma liste des fériés si il a des vacances et si il y a des fermetures d'entreprise (concerne n'importe quel poste de travail, d'ou le "TOUS"). En fait j'aimerais répartir la charge en fonction par rapport à la date de début et de fin planifié mais en prenant en compte les jours fériés de l'entreprise et les vacances de chaque poste de travail.

C'est la ou je bloque quand je fais pas en fonction du poste de travail c'est facile car c'est pour tout le monde la même chose mais dès que chaque poste de travail à des vacances en plus des fermetures de l'entreprise c'est compliqué. J'espère que tu pourras m'aider en tout cas je te remercie encore une fois pour ton aide précieuse.

Bonne journée et tiens moi au courant!

Jan

27repartition.xlsm (347.02 Ko)

J'aimerais continuer à utiliser ce bouton importer les données des pages concernées mais j'aimerais que si il n'y a pas de données après les titres des colonnes il ne me ramène rien. tu l'avais fait mais toi les données se mettaient à jour dès que tu cliquais sur l'onglet. moi j'aimerais continuer à utiliser mon bouton "importer" mais j'aimerais pas que ça me importe les lignes si il y en a pas.

Sub regrouper()
mdp = "xxxx"
ActiveSheet.Unprotect Password:=mdp
Application.ScreenUpdating = False

Range("A1").CurrentRegion.Offset(1, 0).Clear
For Each feuille In Worksheets
    With feuille
        If .Name <> ActiveSheet.Name And .Name <> "Accueil" Then
            Range("A" & Rows.Count).End(xlUp).Offset(1, 0).Select
            der = .Range("A" & Rows.Count).End(xlUp).Row
            .Range(.Cells(2, "A"), .Cells(der, "F")).Copy
            ActiveSheet.Paste
        End If
    End With
Next
Cells(1, 1).Select

Application.ScreenUpdating = True
ActiveSheet.Protect Password:=mdp, DrawingObjects:=True, Contents:=True, Scenarios:=True

End Sub

Ensuite j'ai une 2ème demande. Je t'ai joint le fichier ici. De base j'ai fait les onglets rouges. Donc je repartis simplement la charge entre la date de début et la date de fin en prenant en compte les fériés et fermetures de l'entreprise.

Maintenant, je souhaite répartir exactement de la même manière (Sans macro) sauf j'aimerais ajouter les vacances par poste de travail. Si possible j'aimerais simplement adapter la même formule que j'avais de base.

Cela n'a plus rien à voir avec le sujet. Ouvre un nouveau sujet.

Ok c'est fait j'ai ouvert un nouveau sujet.

Par contre pour le regroupement de données j'aimerais justement pas que ça m'importe les données de la première ligne soit les titre des colonnes si c'est vide à partir de A2, B2, C2, D2, E2; F2.

De plus j'aimerais mettre le même code que j'ai moi. soit avec les noms "Alvaro Parente" etc. et non comme tu le fait toi.

J'aimerais juste modifier le code ci-dessous pour que ça m'importe pas les données de la 1ère ligne si c'est vide à la ligne 2

Const mdp = "1"

Sub Importer()

Dim Ws As Worksheet

ActiveSheet.Unprotect Password:=mdp

Application.ScreenUpdating = False

With Sheets("DonnéesRegroupées")

.Range("A2:H" & .Range("A" & Rows.Count).End(xlUp).Row + 1).ClearContents

For Each Ws In Sheets(Array("Costa Ricardo", "Guimares Sergio", "Romand Fanny", "Giotto Laure", "Velosa Cristina", "Vouillot Vincent", "Silva Sergio"))

Ws.Range("A2:H" & Ws.Range("A" & Rows.Count).End(xlUp).Row).Copy .Range("A" & Rows.Count).End(xlUp).Offset(1, 0)

Next Ws

ActiveSheet.Protect Password:=mdp, DrawingObjects:=True, Contents:=True, Scenarios:=True

End With

End Sub

J'aimerais juste modifier le code ci-dessous pour que ça m'importe pas les données de la 1ère ligne si c'est vide à la ligne 2

ok ça, je peux le faire ...

Par contre pour le regroupement de données j'aimerais justement pas que ça m'importe les données de la première ligne soit les titre des colonnes si c'est vide à partir de A2, B2, C2, D2, E2; F2.

pas compris

De plus j'aimerais mettre le même code que j'ai moi. soit avec les noms "Alvaro Parente" etc. et non comme tu le fait toi.

Dans ce cas, j vais passer la main à quelqu'un d'autre...
Rechercher des sujets similaires à "regrouper donnees onglets seul"