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 :

Mise en forme tableau


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut Mise en forme tableau
    Salut a toutes et a tous

    J'ai encore un probleme de mise en forme.
    J'ai un tableau (fichier joint).

    Voila les modif a y apporter.
    Je doit inserer autant de ligne que de mois.
    Puis copier les materiel et les description materiel.
    Inserer 2 colonnes a la suite M
    1ere Colonne insere :
    Reprendre 1 a 1 les references qui sont repretorier par mois dans chacune des colonnes crées.
    2eme colonne insere :
    Creer une date au 1er de cahque mois en fonction des mois sous ce format 01jan2008.



    Je vous met le debut de mon code (tres lourd)



    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    Sub Reorganisation()
     
        Dim f As Long
        Dim Cellule As Range
     
    'copie des 9 lignes pour reorganisation du tableau
    '9 ligne pour une ligne exisante...
        For f = Range("a" & Rows.Count).Row To 2 Step -1
            Set Cellule = Range("a" & f)
            If Cellule(0).Value <> Cellule Then Cellule.EntireRow.Insert Shift:=xlDown
        Next f
     
     
            For f = Range("a" & Rows.Count).Row To 2 Step -1
                Set Cellule = Range("a" & f)
                If Cellule(0).Value <> Cellule Then Cellule.EntireRow.Insert Shift:=xlDown
            Next f
     
     
                For f = Range("a" & Rows.Count).Row To 2 Step -1
                    Set Cellule = Range("a" & f)
                    If Cellule(0).Value <> Cellule Then Cellule.EntireRow.Insert Shift:=xlDown
                Next f
     
     
                    For f = Range("a" & Rows.Count).Row To 2 Step -1
                        Set Cellule = Range("a" & f)
                        If Cellule(0).Value <> Cellule Then Cellule.EntireRow.Insert Shift:=xlDown
                    Next f
     
     
                        For f = Range("a" & Rows.Count).Row To 2 Step -1
                            Set Cellule = Range("a" & f)
                            If Cellule(0).Value <> Cellule Then Cellule.EntireRow.Insert Shift:=xlDown
                        Next f
     
     
    'Suppression des ligne non utiles dans le haut du tableau.
        Rows("1:6").Select
        Selection.Delete Shift:=xlUp
        Rows("2:10").Select
        Selection.Delete Shift:=xlUp
        Rows("3:7").Select
        Selection.Delete Shift:=xlUp
        Rows("4:8").Select
        Selection.Delete Shift:=xlUp
        Rows("5:9").Select
        Selection.Delete Shift:=xlUp
        Rows("6:10").Select
        Selection.Delete Shift:=xlUp
        Rows("7:15").Select
        Selection.Delete Shift:=xlUp
     
     
    'Ajout de colones pour traitement des données
        Columns("D:D").Select
        Selection.Insert Shift:=xlToRight
        Selection.Insert Shift:=xlToRight
     
     
     
     
    End Sub

    J'aurais besoin d'un serieux coup de main je bloque.
    Je vois que ca ne fonctionne pas comme je le voulais
    Mais ca vous donne une idee de ma manipe
    N'hesiter pas a laisser des com pour + l'explication.
    Merci d'avance
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Je n'ai pas regardre ton fichier mais j'ai 2 remarque sur ton code
    Pourquoi a tu repeter 5 fois la meme boucle for sans rien changer a l'interieur?
    Si tu dois repeter x fois cette boucle place la dans une boucle for ... 1 to x, ca sera deja moins lourd.
    La 2eme remarque est au sujet de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     f = Range("a" & Rows.Count).Row
    Le row qu'elle te retourne est le row de la derniere cellule de ta colonne, mais pas la derniere vide, la derniere 65540.. peut etre est ce que tu souhaite mais j'en doute, ca alourdi enormement la routine. Prefert peut etre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f = Range("a" & Rows.Count).End(xlUp).Row
    Qui te pointera la derniere cellule non vide de ta colonne.

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Deja a alourdi moin la macro

    Le soucis en fait c de copier 9 lignes blanches a la suite d'une ligne remplie.
    Et c la que je trouve pas la bonne manip.

    Apres il faut recopier sur ces 9 ligne la ligne qui precede.

    Ou + simple (peut etre) se serai de copier 9 x la ligne puis recommancer...

    Deja c mieux
    A peluche

  4. #4
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Ben au hazard je dirais qu'il faut utilsé Range(...).copy et range(...).Insert avec un si ces 2 fonctions pour plus amples informations

    Tu peux enregistrer egalement une macro et faire les action copier inserer puis aller voir le code qu'a generé Excel.


    Bon courrage
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Je bloque severe sur ce tableau de m....

    J'arrive pas a definir les bon parametres pour permettre 9 ligne entre chaque ligne existante.
    Puis copier les references qui sont dessus.

  6. #6
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Je ne sais pas ce que tu cherche a faire exactement mais une simple boucle qui copi/insert 9 fois est simple a realiser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Application.CutCopyMode = False
        For I = 1 To 9
            Rows("6:6").Copy
            Rows("8:8").Insert Shift:=xlDown
        Next I
    Celle ci copie la ligne 6 et l'insert avant la ligne 8, as toi de modifier ca pour avoir le resultat escompté

    [Edit] En reprenant ton post du debut j'ai vu que tu avais joint un fichier, j'ai regarder un peu plus en avant ton fichier mais je ne comprend pas, avec les infos que tu fourni dans ton 1er post ce que tu veux faire exactement, tu parles de créer des ligne apres tu parle de crée des colonnes en fonction des colonne créés... je trouve pas ca tres claire.
    Tu delmande a inserer des colonne a la suite de la colonne M, hors apres la colonne M il n'y a plus rien donc autant utiliser les colonne N et O qui sont vide, non?
    Dans ta boucle While, qui se trouve dans ton module, tu cherche a incrementer i visiblement, mais tu met celui ci en dehors de la boucle.
    Encore une fois, sans explication claire et detailé il est tres dur de repondre aux demandes.
    En attendant plus de detail
    ++[/Edit]

    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  7. #7
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    A oui

    Je comprend
    Mon post precedent est resolu. Tu m'y as aider d'ailleurs.
    J'ai un soucis sur un nouveau doc.
    Je vais essayer ce que tu ma poster et je te tiens o courant voir si j'ai tourvé la soluce.
    Si non je vais te sollicité a nouveau
    Si tu veux bien biensur.

    Sur ce bon apetit
    A peluche...

  8. #8
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    Re
    Oui je me souvient un peu de ton dernier post
    Ce qui serait bien ca serait de mettre un 2eme onglet dans ton fichier avec le rendu que tu souhaiterai avoir apres les modifs que tu demande, mais que ca ne t'empeche pas d'expliquer ce que tu veux
    A++ Bon app
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  9. #9
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    OK
    Je m'en occupe
    Je suis en "vacances" mais j'ai pris de travail a la maison lol
    Je te fait ca dans la fin de semaine...
    Encore merci

  10. #10
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Salut a tous
    Bonne année 2008

    Je reviens a la charge avec mon probleme
    Dsl pour le retard patit petain de santé (c la période c normal ...)

    Ci joint le fichier initial et sur la feuille 2 le resultat tant attendu.
    Mon probleme etant de passer d'un "tablaeu horizontal a un tableau vertical" en faisant suivre toutes les données.
    Dans mon exemple les moi 01 et 02 n'on aucune donnée mais peuvent avoir.
    Ici les donnée sont souvent 5 et 10 mais tous peut etre variable de 0 à plein.

    Pour + d'info nésiter pas a poster je vous rensignerai de mon mieux.

    A tres vite
    Encore merci
    Fichiers attachés Fichiers attachés

  11. #11
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Alors avant de faire quoi que ce soit.
    Est ce normal que ton tableau commence a Mars?

    Peut tu modifier la feuil1 a ta guise? ou es tu obligé de faire avec telle qu'elle est actuellement?

    Par ce qu'il y a au moins une chose qui faciliterai grandement la tache c'est qu'au lieu d'avoir Mars,Avr,Mai,Juin .... il serait tout aussi bien d'avoir une date dans la cellule avec le formatage de celle ci sur "mm" pour avoir les mois court, mine de rien c qd meme plus simple a gerer sous vba (a mon avis bien sur)
    [Edit]
    Voila la trame de se qui me semble le mieux a faire
    Recherche autour de ca et pose des question qd tu bloque.
    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
    16
    17
    18
    19
    20
    1)Boucle for each CelluleEnCours In Range("A8") To Range("A8").End(xlDown)
     
        2)Boucle For IdQ 1 à 10 (en fonction du nombre de moi a traiter
     
            3)On va rajouter ce nom a la suite des valeurs existantes en page resultat.
            CelluleEnCours.value -> Range("A8").End(XlDown) [Mettre Range("A8").End(XlDown) dans un boucle With]
     
            4)On indique la description du materiel 
            CelluleEnCours.Offset(0,1) -> With.Offset(0,1)
     
            5)On Indique le M
            CelluleEnCours.Offset(0,2) -> With.Offset(0,2)
     
            6)On concatene le moi et l'année (d'ou ma question qui faciliterait le travail ici) 
            remplissage With.Offset(0,3)
     
            7)On indique la quantité 
            CelluleEnCours.Offset(0,2+IdQ) -> With.Offset(0,4)
        8)Next 2)
    9)Next 1)
    Bien sur ca n'est que du litteral, j'ai juste mis 2/3 info code pour te quider dans certain choix
    [/Edit]
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  12. #12
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Salut

    Ici en l'occurence ca debut en mars mais c exceptionnel.
    Oui la feuille peut etre modifer à volonté si cela permet d'arriver au resultat escompter le + facilement possible.

    Je test des recommendation et si je bloque je te previens (cela devrai pas tarder ^^ , je suis pas 1 pro en VBA)

    Encore merci

  13. #13
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Ca y est je bloque

    Ca a pas ete long ^^
    En fait j'ai une erreu de compilation sur la 1ere boucle
    Avec le To
    Il faut declarer CelluleEnCours en Dim c ca?

  14. #14
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut
    Oui c'est ca faut declarer en tant que Range.

    Mais je me demande si le VBA est obligatoire pour faire ce que tu veux
    Ca serait je pense possible de le faire avec des formules (mais la je suis pas champion) et a condition de "formater" tes feuils pour par exemple ne pas avoir des année qui commence au mois de Mars
    A++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  15. #15
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Lut

    Meme en les declarant j'ai une erreur de compilation avec le To

    Quand aux formule pkoi pas mais si j'utilise ce choix, cela peut-il etre automatiser comme tache car ce n'est pas moi l'utilisateur finale.

    PS : Si ta un debut de code pour me mettre sur la voix se serai super sympa

    Merci

  16. #16
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 898
    Points : 8 529
    Points
    8 529
    Par défaut
    SAlut

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub Alors()
    Dim CelluleEnCours As Range, MaCel As Range
    Dim IdQ As Integer
     
    '1)Boucle for each CelluleEnCours In Range("A8") To Range("A8").End(xlDown)
    For Each CelluleEnCours In Sheets("Feuil1").Range("A8", Sheets("Feuil1").Range("A8").End(xlDown))
        '2)Boucle For IdQ 1 à 10 (en fonction du nombre de moi a traiter
        For IdQ = 1 To 10
            '3)On va rajouter ce nom a la suite des valeurs existantes en page resultat.
            'CelluleEnCours.value -> Range("A8").End(XlDown) [Mettre Range("A8").End(XlDown) dans un boucle With]
            Set MaCel = Sheets("resultat").Range("A8").End(xlDown).Offset(1, 0)
            With MaCel
                .Value = CelluleEnCours.Value
     
                '4)On indique la description du materiel
                'CelluleEnCours.Offset(0,1) -> With.Offset(0,1)
                .Offset(0, 1).Value = CelluleEnCours.Offset(0, 1).Value
     
                '5)On Indique le M
                'CelluleEnCours.Offset(0,2) -> With.Offset(0,2)
                .Offset(0, 2).Value = CelluleEnCours.Offset(0, 2).Value
     
                '6)On concatene le moi et l'année (d'ou ma question qui faciliterait le travail ici)
                'remplissage With.Offset(0,3)
                .Offset(0, 3).Value = Sheets("Feuil1").Cells(7, CelluleEnCours.Offset(0, 2 + IdQ).Column).Value 'Attention ici a modifier ton tableau (mettre la date complette et un format cellule mm
     
                'Formater la cellule
                .Offset(0, 3).NumberFormat = "ddmmyyyy"
     
                '7)On indique la quantité
                'CelluleEnCours.Offset(0,2+IdQ) -> With.Offset(0,4)
                .Offset(0, 4) = CelluleEnCours.Offset(0, 2 + IdQ).Value
     
                'Formatage ligne
                Range(MaCel, .Offset(0, 4)).Borders.LineStyle = xlContinuous
                If .Offset(0, 4).Value <> 0 And .Offset(0, 4).Value <> "" Then
                    Range(.Offset(0, 3), .Offset(0, 4)).Interior.ColorIndex = 40
                Else
                    .Offset(0, 3).Interior.ColorIndex = 40
                End If
     
            End With
        '8)Next 2)
        Next
    '9)Next 1)
    Next
    End Sub
    Tu te casses quand meme pas trop le kiki... une petite recherche sur la structure d'une boucle For Each par exemple, je t'ais bien dis que le bout de "code" etaient du literal uniquement.
    Tu aurais alors decouvert par toi meme la structure attendu
    For each ... In structure.

    A+
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

  17. #17
    Nouveau membre du Club
    Inscrit en
    Novembre 2007
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 61
    Points : 28
    Points
    28
    Par défaut
    Salut

    Merci beaucoup
    Maintenant il me reste a l'adapter avec mon pb de date (je vais essayer d'y arriver seul)

    Je te remerci pour tout et pour le temps que tu ma consacré



    A tres bientot

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mise en forme tableau croisé dynamique
    Par opus06 dans le forum IHM
    Réponses: 0
    Dernier message: 13/05/2008, 11h40
  2. mise en forme tableau html et php
    Par rgdu86 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 28/03/2008, 18h49
  3. mise en forme tableau word depuis excel
    Par cobol80 dans le forum VBA Word
    Réponses: 2
    Dernier message: 26/02/2008, 12h02
  4. Problème de mise en forme (tableau)
    Par Mat67 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 17
    Dernier message: 04/06/2007, 16h55
  5. Mise en forme tableau word avec VB6
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/04/2007, 12h50

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