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
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 SubLa mise à jour est faite à l'activation de la feuille.
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 SubMAIS ... 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.
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.
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 SubBonjour,
Ton module 2 peut se réduire à cela
Option Explicit
Sub nom()
Sheets(ActiveSheet.Shapes(Application.Caller).TextFrame.Characters.Text).Select
End SubC'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
Bonne journée et tiens moi au courant!
Jan
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
Cela n'a plus rien à voir avec le sujet. Ouvre un nouveau sujet.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.
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
ok ça, je peux le faire ...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
pas comprisPar 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.
Dans ce cas, j vais passer la main à quelqu'un d'autre...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.