IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ventiler des données par détection de Sauts de page


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut Ventiler des données par détection de Sauts de page
    Bonjour,

    J'ai un classeur avec une seule feuille nommée feuille .

    Dans cette feuille, j'ai une succession de données séparées par des sauts de page.

    Exemple :

    VOITURE 1
    bla bla bla

    SAUT DE PAGE

    VOITURE 2
    bla bla bla

    SAUT DE PAGE

    VOITURE 3
    bla bla bla

    Est-il possible de séparer ces "blocs" pour en faire autant de feuilles ou classeur distincts ?

    Merci

  2. #2
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour et bienvenue sur le forum,

    J'imagine que tu pense à une macro pour faire ceci...hormis le saut de page, y a t'il un autre élément qui permet de distinguer un bloc d'un autre?
    Comme dans ton exemple, on peut utiliser Voiture.

    A+

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut
    Non, seul le saut de page permet de distinguer les blocs.

    J'ai indiqué VOITURE pour simplifier mon message.
    Dans le vrai fichier il y aurait à la place le modèle de la voiture...

  4. #4
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,

    Je posais la question car il me semblait que ça allait être plus chaud de définir les plages en fonction du saut de page mais en fait non.
    Dans le code ci-dessous, en fonction des sauts de pages on copie la plage dans une nouvelle feuille renommée suivant le contenu de la première cellule de cette plage (j'imagine le modèle)
    J'ai considéré une seule colonne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub CopieSelonSautDePage()
    Dim NbHPB As Long, R As Long, Rdeb As Long, Rfin As Long
     
    NbHPB = Sheets("TaFeuil").HPageBreaks.Count 'Compte le nombre de saut de page
    Rdeb = 1 'Si premier modèle en ligne 1, servira pour délimiter le début de plage à copier
     
    For R = 1 To NbHPB 'Boucle sur chaque saut de page
        Rfin = Sheets("TaFeuil").HPageBreaks(R).Location.Row - 1 'Indique le numéro de ligne précédent le saut de page
        Sheets.Add.Name = Sheets("TaFeuil").Cells(Rdeb, 1).Value  'Renomme la feuille ajoutée avec le contenu de la première cellule de la plage
        Sheets("TaFeuil").Range(Sheets("TaFeuil").Cells(Rdeb, 1), Sheets("TaFeuil").Cells(Rfin, 1)).Copy Destination:=Range("a1") 'Copie la plage concernée sur la nouvelle feuille
        Rdeb = Rfin + 1 'Défini le début de plage suivant
    Next R 'Passe au saut de page suivant
     
    End Sub
    A+

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 9
    Par défaut
    Génial !!!

    Je ne n'y comprends pas grand chose mais génial !

    Il me semble que dans la macro, le nom Tafeuil doit être celui de la feuille contenant les données, c'est ça ?
    Si oui, la macro ne peut-elle pas se servir du nom de la feuille directement ?

    La création des feuilles se faiten "ordre inverse", du style :

    VOITURE 3 VOITURE 2 VOITURE 1

    Est-il possible d'avoir :

    VOITURE 1 VOITURE 2 VOITURE 3

    En tous cas, merci déjà pour tout cela.

    Et comment faire pour que les cellules copiées incluent toutes les cellules à copier ?
    Pas clair ça.
    Dans mon premier bloc, la première cellule sert de nom de la future feuille : ok.
    En dessous et jusqu'au saut de page les cellules doivent aussi être copiées. Si par exemple j'ai les cellules de A2 à J20 de remplies, bien il faudrait les copier.

    J'ai compris que tout ce joue là, mais comment le modifier ?
    Sheets("Feuil1").Range(Sheets("Feuil1").Cells(Rdeb, 1), Sheets("Feuil1").Cells(Rfin, 1)).Copy Destination:=Range("a1")

  6. #6
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Re,

    En deux mot:
    HPBreaks = saut de page, grâce à ça on trouve la ligne où le saut de page est défini.
    On compte le nombre de saut de page, on passe sur chaque saut de page pour avoir la ligne de fin de la plage.
    On copie la plage.

    Pour la position des feuilles, j'ai ajouter une ligne pour que la feuille ajoutéé soit déplacée dernière la dernière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Sub CopieSelonSautDePage()
    Dim NbHPB As Long, R As Long, Rdeb As Long, Rfin As Long
     
    NbHPB = Sheets("TaFeuil").HPageBreaks.Count 'Compte le nombre de saut de page
    Rdeb = 1 'Si premier modèle en ligne 1, servira pour délimiter le début de plage à copier
     
    For R = 1 To NbHPB 'Boucle sur chaque saut de page
        Rfin = Sheets("TaFeuil").HPageBreaks(R).Location.Row - 1 'Indique le numéro de ligne précédent le saut de page
        Sheets.Add.Name = Sheets("TaFeuil").Cells(Rdeb, 1).Value  'Renomme la feuille ajoutée avec le contenu de la première cellule de la plage
        Sheets(Sheets("TaFeuil").Cells(Rdeb, 1).Value).Move After:=Sheets(Sheets.Count)
        Sheets("TaFeuil").Range(Sheets("TaFeuil").Cells(Rdeb, 1), Sheets("TaFeuil").Cells(Rfin, 1)).Copy Destination:=Range("a1") 'Copie la plage concernée sur la nouvelle feuille
        Rdeb = Rfin + 1 'Défini le début de plage suivant
    Next R 'Passe au saut de page suivant
     
    End Sub

    A+

    Edit: J'ai oublié de répondre à ta question sur le nom de la feuille, oui "TaFeuil" est le nomp de la feuille sur laquelle il y a les données.

Discussions similaires

  1. Trier des données par ordre d'importance
    Par popoliline dans le forum Access
    Réponses: 19
    Dernier message: 23/08/2006, 19h42
  2. envoyer des données par mail
    Par zorba49 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 16/12/2005, 11h00
  3. [Tableaux] Affichage des données par lot
    Par randriarabe dans le forum Langage
    Réponses: 1
    Dernier message: 07/12/2005, 08h23
  4. Récupérer des données par LDAP
    Par wil4linux dans le forum ASP
    Réponses: 3
    Dernier message: 14/09/2005, 12h11
  5. envoyer des données par l'intermédiaire d'un bouton
    Par mathilde50 dans le forum Access
    Réponses: 26
    Dernier message: 28/10/2004, 16h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo