• Publicité

Copie de plusieurs lignes d'un tableau excel vers autre page

Dans ce forum, vous pouvez poser toutes vos questions concernant l'utilisation de logiciels de bureautique (Microsoft Office, Open Office, etc.)

Modérateurs: Sebastien, Stéphane, Christophe

Copie de plusieurs lignes d'un tableau excel vers autre page

Messagepar Prem » 01 Aoû 2017 13:23

Bonjour tout le monde,

je ne suis pas un grand spécialiste avec excel et je souhaiterais savoir si quelqu'un pourrait m'indiquer des formules pour copier certaines lignes d'un tableau excel (planning général) vers une autre page pour faire des plannings individualisés.

en gros : copier les lignes 1-2-3-4-5 de A à BZ (avec des cellules fusionnées , texte et couleurs ...) vers la page 2 (renommée au nom de l'agent) sur les lignes 1-2-3-4-5,
et copier ensuite la ligne 6 de A à BZ (texte et couleurs) vers la même page 2 renommée sur la ligne 6
et copier ensuite les lignes 16-17-18 de A à BZ (avec des cellules fusionnées , texte et couleurs ...) vers la page 2 renommée sur les lignes 7-8-9
et copier ensuite la ligne 19 de A à BZ (texte et couleurs) vers la page 2 renommée sur la ligne 10
idem avec les lignes 29-30-31 sur les lignes 11-12-13 ; la ligne 32 sur la ligne 14
avec les lignes 42-43-44 sur les lignes 15-16-17 ; la ligne 45 sur la ligne 18
avec les lignes 55-56-57 sur les lignes 19-20-21 ; la ligne 58 sur la ligne 22.

Puis idem pour : copier les lignes 1-2-3-4-5 de A à BZ (avec des cellules fusionnées , texte et couleurs ...) vers la page 3 (renommée à un autre nom de l'agent) sur les lignes 1-2-3-4-5,
et copier ensuite la ligne 7 de A à BZ (texte et couleurs) vers la même page 3 renommée sur la ligne 6
et copier ensuite les lignes 16-17-18 de A à BZ (avec des cellules fusionnées , texte et couleurs ...) vers la page 3 renommée sur les lignes 7-8-9
et copier ensuite la ligne 20 de A à BZ (texte et couleurs) vers la page 3 renommée sur la ligne 10
idem avec les lignes 29-30-31 sur les lignes 11-12-13 ; la ligne 33 sur la ligne 14
avec les lignes 42-43-44 sur les lignes 15-16-17 ; la ligne 46 sur la ligne 18
avec les lignes 55-56-57 sur les lignes 19-20-21 ; la ligne 59 sur la ligne 22.

Puis idem pour : copier les lignes 1-2-3-4-5 de A à BZ (avec des cellules fusionnées , texte et couleurs ...) vers la page 4 (renommée à un autre nom de l'agent) sur les lignes 1-2-3-4-5,
et copier ensuite la ligne 8 de A à BZ (texte et couleurs) vers la même page 4 renommée sur la ligne 6
et copier ensuite les lignes 16-17-18 de A à BZ (avec des cellules fusionnées , texte et couleurs ...) vers la page 4 renommée sur les lignes 7-8-9
et copier ensuite la ligne 21 de A à BZ (texte et couleurs) vers la page 4 renommée sur la ligne 10
idem avec les lignes 29-30-31 sur les lignes 11-12-13 ; la ligne 34 sur la ligne 14
avec les lignes 42-43-44 sur les lignes 15-16-17 ; la ligne 47 sur la ligne 18
avec les lignes 55-56-57 sur les lignes 19-20-21 ; la ligne 60 sur la ligne 22.

etc... pour les 10 agents des lignes 6 à 15.

Bon j’espère ne pas avoir été trop lourd, je ne savais pas trop comment exposé mon souci !

merci par avance des solutions providentielles que vous trouverez
Prem
No0b
No0b
 
Messages: 3
Enregistré le: 31 Juil 2017 14:45

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Sebastien » 03 Aoû 2017 17:48

Bonjour
Prem a écrit:je souhaiterais savoir si quelqu'un pourrait m'indiquer des formules pour copier certaines lignes d'un tableau excel (planning général) vers une autre page pour faire des plannings individualisés.

Pour réaliser un tel traitement, il va falloir passer par une macro VBA. Je peux tenter d'en faire une mais il nous faudrait un fichier pour tester. Avez-vous un fichier avec des données anonymisées afin que l'on puisse voir comment la macro pourrait se repérer dans votre fichier et faire les copies de lignes ?

Vous pouvez l'uploader sur le site http://www.cjoint.com/ (veillez à bien retirer au préalable toutes données personnelles et/ou confidentielles)

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5375
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Prem » 06 Aoû 2017 14:22

Bonjour, merci de votre réponse.

Voici le fichier avec des noms fictifs.

http://www.cjoint.com/c/GHgnsb2Bo6A

j'ai joué avec les copier/coller sur les autres pages, pour arriver au résultat que je voulais, pour donner un visuel.

Merci par avance !
Prem
No0b
No0b
 
Messages: 3
Enregistré le: 31 Juil 2017 14:45

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Sebastien » 06 Aoû 2017 21:57

Bonjour,

Je vais regarder ça et tenter de faire un truc cette semaine.

Je reposte quand j'ai quelque chose de fonctionnel.

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5375
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Sebastien » 07 Aoû 2017 20:14

Bonjour,

J'ai une question par rapport à votre tableau. Dans le fichier, on voit :
Code: Tout sélectionner
LUNDI
  Antoine
  Alphonse
  Marie
  Antoinette
  jean
  Pierre
  Claudine
  Gertrude
  Léopole
  François
MARDI
etc.

Dans le cas présent on a 10 prénoms. Est-ce que ce nombre de 10 est fixe ou bien peut-il changer (genre vous pouvez ajouter ou retirer des gens dans le futur) ?

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5375
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Prem » 21 Aoû 2017 12:27

Bonjour,

Désolé de ma réponse tardive, j'étais en vacances ;)

Alors pour répondre, oui, le nombre peut varier de 10 à 9 personnes; mais au pire, on peut garder une ligne vide (pour faire la 10ème ligne) pour simplifier si besoin!

voilà , merci de votre aide !
Prem
No0b
No0b
 
Messages: 3
Enregistré le: 31 Juil 2017 14:45

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Sebastien » 23 Aoû 2017 17:18

Bonjour,

Je suis également en vacances ;)

Je penses avoir trouvé une solution qui gère les cas, peu importe le nombre de personne. Je complète la macro entre deux sorties et je poste quand ça fonctionne.

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5375
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Sebastien » 24 Aoû 2017 23:15

Bonjour,

Ci-dessous une macro permettant de réaliser le traitement évoqué dans votre message.

Pour que la macro fonctionne, il faut noter les éléments suivants :
  • La feuille contenant le planning général doit être nommée Planning
  • La feuille nommée LISTE_PERSONNES contient la liste des noms pour lesquels on souhaite extraire un planning individuel.
  • Les noms se trouvant dans Planning et LISTE_PERSONNES doivent être écrits de la même façon car nous faisons une recherche sur le nom.
J'ai du passer par une feuille (LISTE_PERSONNES) avec les noms pour pouvoir gérer les cas où le nombre de personnes n'est pas identique d'un planning à un autre.

La macro à lancer se nomme Extraction_planning

Que va faire la macro :
Pour chaque personne se trouvant dans LISTE_PERSONNES, elle va créer une feuille individuelle à son nom, y placer le planning complet puis retirer tous les éléments qui ne la concerne pas. On obtient en résultat un planning individuel pour chaque personne.

Ci-dessous le code de la macro que j'ai commenté pour expliquer le fonctionnement de la macro :
Code: Tout sélectionner
Sub Extraction_planning()
'
'
'
'
Dim cpt_personne  As Integer, CptDerniereLigne As Integer, DerniereLignePersonne As Integer, DerniereLignePersonne2 As Integer, i As Integer, DerniereLignePlanning As Integer
Dim NomFeuille As String, valeurcherchee  As String, personne As String
Dim plagepersonne As Range
Dim Sh As Object, trouve As Object

'Dans la feuille LISTE_PERSONNES, on regarde le nombre de personne qu'on aura à traiter et on place ce nombre dans une variable.
CptDerniereLigne = Sheets("LISTE_PERSONNES").Range("A65536").End(xlUp).Row
DerniereLignePlanning = Sheets("Planning").Range("A65536").End(xlUp).Row

'On initialise le compteur du nombre de personne à traiter
cpt_personne = 1

'On enregistre le nom de la première personne à traiter dans une variable
personne = Sheets("LISTE_PERSONNES").Range("A1").Value

'On enregistre la plage contenant toutes les personnes à traiter (pour pouvoir effectuer des recherches dans cette plage)
Set plagepersonne = Sheets("LISTE_PERSONNES").Range("A1:A" & CptDerniereLigne)

'On crée une boucle pour traiter les personnes de la liste
Do While cpt_personne <> CptDerniereLigne

    'Vérification de l'existance des feuilles nominatives
    NomFeuille = personne
   
    If IsError(Evaluate("='" & NomFeuille & "'!A1")) = True Then
        'Si la feuille n'existe pas, on la crée avec le nom de la personne
        Set Sh = Sheets.Add(After:=Sheets(Sheets.Count))
        Sh.Name = personne
    Else
        'Si la feuille existe, on ne fait rien et on continue
    End If
   
    'on copie le planning complet
    Sheets("Planning").Range("A1:BZ" & DerniereLignePlanning).Copy
   
    'On se place sur la feuille de la personne (créée ou existante) et on colle le planning complet
    Sheets(personne).Range("A1").PasteSpecial Paste:=xlPasteAll
   
    Sheets(personne).Activate
   
    'On regarde le nombre de ligne à traiter dans la feuille nominative de la personne
    DerniereLignePersonne = Sheets(personne).Range("A65536").End(xlUp).Row
   
    'On crée une boucle pour traiter toutes les lignes de la feuille nominative
    'Le test est fait sur la première colonne uniquement
    'les lignes relatives à la personne en cours sont conservées
    'les lignes relatives aux autres personnes sont supprimées
    'les autres lignes sont conservées
   
    Range("A1").Select
   
    For i = 1 To DerniereLignePersonne
        'On enregistre la valeur de la cellule en cours dans une variable
        valeurcherchee = ActiveCell.Value
        'On vérifie si cette valeur existe dans la plage contenant la liste des personnes
        Set trouve = plagepersonne.Cells.Find(what:=valeurcherchee, LookAt:=xlWhole)
       
        'Si la recherche ne retourne rien, la ligne correspond à une ligne de texte (Lundi, etc.)
        'On la conserve et on passe à la suivante.
        If trouve Is Nothing Then
            ActiveCell.Offset(1, 0).Select
       
        'Si la recherche retourne quelque chose
        'on vérifie si on est sur une ligne de la personne en cours
        Else
           
            'Si on est sur une ligne correspondant à une autre personne
            If valeurcherchee <> personne Then
                'On supprime la ligne
                ActiveSheet.Rows(ActiveCell.Row).EntireRow.Delete
            'Si on est sur une ligne de la personne en cours
            'on conserve la ligne et on passe à la suivante
            Else
                ActiveCell.Offset(1, 0).Select
            End If
           
        End If
    Next
   
    'Sur le planning de la personne en cours, on supprime toutes les lignes à partir de la n°23
    DerniereLignePersonne2 = Sheets(personne).Range("A65536").End(xlUp).Row
    Rows("23:" & DerniereLignePersonne2).Delete
   
   
    'On traite la personne suivante
   
    'Récupération du nom de la personne suivante
    personne = Sheets("LISTE_PERSONNES").Cells(cpt_personne + 1, 1).Value
    'On incrémente de 1 le compteur du nombre de personne à traiter
    cpt_personne = cpt_personne + 1

Loop

End Sub



Ci-dessous un lien vers un fichier Excel reprenant votre planning exemple et contenant la macro que vous pourrez tester :
http://www.astucesinternet.com/data/images_forum/planning-2017-perso.zip

Il y aura peut-être deux ou trois trucs à revoir sur la mise en page, mais pourriez-vous tester le fonctionnement et nous faire un retour ?

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5375
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar mdo100 » 25 Aoû 2017 12:31

Bonjour Prem,
Bonjour Sébastien,

Je ne suis pas concerné par la demande d'aide de Prem, mais je m'y suis intéressé et j'attendais avec impatience la réponce de Sébastien :-D

Que dire, WHAOU Sébastien, ton code est génial et extrêmement bien commenté, je vais tenter de bien le comprendre afin qu'il puisse me servir... un jour... peut-être.

En tous cas quel beau travail :ola: Bravo et merci pour le partage de ton savoir.

Juste un truc bien humblement, pour accélérer la macro désactiver le rafraîchissement de l'écran en début de macro tout de suite après le Sub Extraction_planning() avec l'instruction Application.ScreenUpdating = False

Code: Tout sélectionner
Sub Extraction_planning()

Application.ScreenUpdating = False

Dim cpt_personne  As Integer, CptDerniereLigne As Integer, DerniereLignePersonne As Integer, DerniereLignePersonne2 As Integer, i As Integer, DerniereLignePlanning As Integer
Dim NomFeuille As String, valeurcherchee  As String, personne As String
Dim plagepersonne As Range
Dim Sh As Object, trouve As Object

etc... reste du code



Bien cordialement à vous deux.
mdo100
Trolleur
Trolleur
 
Messages: 56
Enregistré le: 02 Juil 2016 20:24

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Sebastien » 27 Aoû 2017 20:30

Bonjour,
mdo100 a écrit:Juste un truc bien humblement, pour accélérer la macro désactiver le rafraîchissement de l'écran en début de macro tout de suite après le Sub Extraction_planning() avec l'instruction Application.ScreenUpdating = False

Merci pour l'astuce, c'est vrai que c'est plus rapide lors de l'exécution de la macro ;)

@+
Image
Avatar de l’utilisateur
Sebastien
Administrateur
Administrateur
 
Messages: 5375
Enregistré le: 14 Fév 2005 19:17
Localisation: LILLE

Re: Copie de plusieurs lignes d'un tableau excel vers autre

Messagepar Cass21 » 31 Aoû 2017 13:52

Intéressant merci de prendre le temps de nous éclairer!
Cass21
No0b
No0b
 
Messages: 5
Enregistré le: 28 Aoû 2017 15:20


Retourner vers Forum d'entraide : Bureautique

 


  • Articles en relation
    Réponses
    Vus
    Dernier message

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invités

  • Publicité