Regroupement de données texte de 2 tableaux

Bonjour à tous,

Je me permets de solliciter votre aide pour un souci que je n'arrive pas à résoudre, malgré tous mes efforts.

Je suis sur Excel 2007 et ai un fichier qui doit contenir 3 onglets :

- sur l'onglet 1, un tableau de données texte (sexe, fonction, département, ...) concernant des salariés qui sera remplie par une assistante A. Le nom de l'assistante en charge apparait dans la 1ere colonne du tableau.

- sur l'onglet 2, un tableau de données texte (sexe, fonction, département, ...) identique à celui de l'onglet 1, mais qui concerne d'autres salariés et sera rempli par une autre assistante, l'assistante B. Le nom de l'assistante en charge apparait dans la 1ere colonne du tableau.

- et enfin sur l'onglet 3, l'objectif est d'avoir un tableau récap regroupant les infos rentrées au fur et à mesure par chacune des 2 assistantes sur leur onglet respectif, qui se mette à jour dès que l'une des 2 assistantes rajoute un salarié.

Si cela n'est pas clair, cela le sera avec mon fichier d'exemple ci-joint, je mets dans le 3e onglet ce que je cherche à obtenir automatiquement.

Cela est assez bête car les assistantes pourraient travailler sur 1 seul et unique tableau, mais celles-ci souhaitent remplir chacune leur tableau de leur côté, et donc j'ai besoin d'un regroupement automatique.

Merci infiniment d'avance !!!

PS : je n'ai jamais fait de macro / VBA

James Boun

Salut,

PS : je n'ai jamais fait de macro / VBA

Désolé mais c'est une fonction VBA qui permet la mise a jour en auto.(je ne vois pas de soution sinon)

note : si tu fais des modifs dans l'onglets 3, ces modifs seront supprimés.

La cinématique de fonctionnement est la suivante :

  • Dès que tu ouvre l'onglet objectif, toutes les valeurs sont supprimées dans cet onglet
  • La totalité des données de l'onglet 1 est copiée dans l'onglet objectif
  • La totalité des données de l'onglet 2 est copiée dans l'onglet objectif

Cela se fait par VBA (dans excel taper au clavier ALT+F11)

Dans la feuill Objectif tu as le code :

Private Sub Worksheet_Activate() 'Dès que l'on ouvre cette onglet il se met a jour

Dim monongletobjectif As Worksheet
Set monongletobjectif = ActiveWorkbook.Worksheets("Objectif")
Dim monongletencours As Worksheet

'On s'occupe d'abord de supprimer toute les informations contenu dans objectif
'Car ce n'est q'une vision des deux premiers onglets
monongletobjectif.Range("A2", monongletobjectif.Range("D65536").End(xlUp).Address).Clear

'On s'occupe ensuite de l'assistante A
Set monongletencours = ActiveWorkbook.Worksheets("Assistante A") 'on se positionne sur l'onglet Assistante A
'On copie toutes les valeurs
monongletencours.Range("A1", monongletencours.Range("D65536").End(xlUp).Address).Copy
'on colle les valeurs dans objectif
monongletobjectif.Range("A1").PasteSpecial xlPasteAll

'On s'occupe ensuite de l'assistante B
Set monongletencours = ActiveWorkbook.Worksheets("Assistante B") 'on se positionne sur l'onglet Assistante A
'On copie toutes les valeurs
monongletencours.Range("A2", monongletencours.Range("D65536").End(xlUp).Address).Copy
'on colle les valeurs dans objectif
monongletobjectif.Range(monongletobjectif.Range("A65536").End(xlUp).Address).Offset(1, 0).PasteSpecial xlPasteAll 'Ligne plus compliqué car on colle a la suite de l'assistante A

'On est propre alors on nettoie après s'en être servi
Set monongletencours = Nothing
Set monongletobjectif = Nothing

End Sub

Peux être une solution autre mais je ne vois pas. Si qqun a une idée autre que VBA

Damien

Un grand merci à toi, ça marche bien, c'est ce dont j'ai besoin !

Une dernière question cependant : je note que pour qu'une ligne s'affiche dans "Objectif", il faut que chaque colonne soit complétée dans le tableau "Assitante A" ou "Assistante B". Est-il possible de faire en sorte qu'une ligne s'affiche même si certaines colonnes du tableau restent vides ?

Merci d'avance !

JamesBoun

Bonjour,

J'ai du mal a comprendre ta remarque :

Dans l'exemple que je tai fourni, je me base sur la denrière ligne rempli dans la colonne D pour effecture la copie.

monongletencours.Range("A2", monongletencours.Range("D65536").End(xlUp).Address).Copy

Ce qui veut dire qu'on peut avoir la colonne A,B,C vide.

Si tu veux te baser sur la derniere ligne saisie dans la colonne A il faut modifier les lignes suivantes :

monongletencours.Range("A1", monongletencours.Range("D65536").End(xlUp).Address).Copy

par

monongletencours.Range("A1", monongletencours.Range("D" & monongletencours.Range("A65536").End(xlUp).Row).Address).Copy

(Deux lignes a modifier.)

si tu ne veux copier que les lignes dont les 4 colonnes sont saisies, il faut faire une fonction supplémentaire.

Dis moi

Damien

ok merci je vais essayer. En fait ce que je cherche à faire, c'est copier toutes les lignes dont au moins 1 colonne est saisie.

Merci d'avance

Anthony

Re,

Recopie avec au mojns une colonne saisie.

damien

Private Sub Worksheet_Activate() 'Dès que l'on ouvre cette onglet il se met a jour

Dim max As Long, nombre As Long

Dim monongletobjectif As Worksheet
Set monongletobjectif = ActiveWorkbook.Worksheets("Objectif")
Dim monongletencours As Worksheet

'On s'occupe d'abord de supprimer toute les informations contenu dans objectif
'Car ce n'est q'une vision des deux premiers onglets
monongletobjectif.Range("A2", monongletobjectif.Range("D65536").End(xlUp).Address).Clear

'On s'occupe ensuite de l'assistante A
Set monongletencours = ActiveWorkbook.Worksheets("Assistante A") 'on se positionne sur l'onglet Assistante A

max = 0
For i = 1 To 4
   nombre = Intersect(monongletencours.Columns(i), monongletencours.Rows("65536:65536")).End(xlUp).Row
    If nombre > max Then
        max = nombre
    End If
Next

'On copie toutes les valeurs
monongletencours.Range("A1", monongletencours.Range("D" & max)).Copy
'on colle les valeurs dans objectif
monongletobjectif.Range("A1").PasteSpecial xlPasteAll

'On s'occupe ensuite de l'assistante B
Set monongletencours = ActiveWorkbook.Worksheets("Assistante B") 'on se positionne sur l'onglet Assistante A

max = 0
For i = 1 To 4
   nombre = Intersect(monongletencours.Columns(i), monongletencours.Rows("65536:65536")).End(xlUp).Row
    If nombre > max Then
        max = nombre
    End If
Next
DoEvents

'On copie toutes les valeurs
monongletencours.Range("A2", monongletencours.Range("D" & max)).Copy

'on colle les valeurs dans objectif
monongletobjectif.Range(monongletobjectif.Range("A65536").End(xlUp).Address).Offset(1, 0).PasteSpecial xlPasteAll

'On est propre alors on nettoie après s'en être servi
Set monongletencours = Nothing
Set monongletobjectif = Nothing

End Sub
Rechercher des sujets similaires à "regroupement donnees texte tableaux"