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 :

Archivage, Tri, Classement de donnees


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Archivage, Tri, Classement de donnees
    Bonjour tout le monde,

    Une nouvelle fois, je vais avoir besoin de votre aide.
    J'ai un fichier informatique excel, qui doit se comporter comme access (pas f acile mais ce sont les contraintes de mon travail).
    A Partir de la premiere feuille, il faut que jeffectue une macro qui recopie une dizaine de lignes dans une autre feuilles excel. Jusque la, pas de soucis, mais le probleme, c est que je dois effectuer plusieurs enregistrements sans ecraser les precedents.

    Donc comment depuis une premiere feuille excel saisir les donnees comprises entre B2 a G27 (25 lignes par 6 colonnes) les recopier dans une seconde feuille en mettant ces informations a la suite des precedentes.

    Je sais le faire mais juste pour une seule ligne de plusieurs colonnes.


    Merci davance

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Bonjour,

    ceci devrait faire l'affaire:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
     
    Sub copie()
     
     
        Range("B2:G27").Copy Destination:=Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
     
     
    End Sub

    Dans ce code la copie se fait dans la page 2 et dans la colonne A. A adapter pour tes besoins.

    @+

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut à tous

    da991319 : presque bon . M'a déjà coûté des heures de recherche : Copy n'admet pas le offset
    Donc ton instruction plante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    with Sheets(2)
    Range("B2:G27").Copy .Range("A" & .[A65536].End(xlUp).row+1)
    end with
    Marche mieux
    A+

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    da991319 : presque bon . M'a déjà coûté des heures de recherche : Copy n'admet pas le offset
    Donc ton instruction plante
    Salut Gorfael,

    C'est bizarre mais j'ai verifie ma formule magique et elle fonctionne tres bien ....sous excel 2000 en tout cas. Aucun plantage a l'horizon

    mais ceci dit ta formule convient tout a fait aussi

    @+

  5. #5
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    Citation Envoyé par gorfael
    M'a déjà coûté des heures de recherche
    hé ben, je croyais etre le seul a défendre les causes perdues mais tu dois etre pas mal. chez moi le code de da991319 marche très bien. sauf que ...
    ton code a exactement le meme defaut que celui de gorfael
    faites un essai
    je renplis les case a1 a2 et g10 avec n'importenawak
    je fais mon essai sur le range a1g10 pour simplifification
    je change la couleur de la selection entre deux essais de la macro
    et j'obtiens la piece jointe suivante

    en fait il ne prens pas en compte la limite de la zone mais la derniere igne remplie de la colonne A.
    je me moque gentiement, mais je n'ai pas de solution.
    edit ps : je n'arrive pas a joindre le fichier en question. je suis en action
    re ps: je precise que j'ai le meme résultat avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Sub copie()
    With Sheets(2)
    Range("a1:g10").Copy .Range("A" & .[A65536].End(xlUp).Row + 1)
    End With
    End Sub
    et avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub copie()
        Range("a1:g10").Copy Destination:=Sheets(2).Range("A65536").End(xlUp).Offset(1, 0)
    End Sub

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    93
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 93
    Points : 73
    Points
    73
    Par défaut
    Effectivement alsimbad, la 'tite' formule toute simple est assez limitee.

    Comme tu le dis:

    en fait il ne prens pas en compte la limite de la zone mais la derniere igne remplie de la colonne A
    Il faudrait peut etre voir quels cas de figure jeep6259 peut rencontrer. Si jamais toutes les cases de la plage sont pleines alors ca suffirait par contre il faudrait effectivement elaborer si des differents cas se prensentent (genre determiner quelle est la derniere ligne utilisee la plus grande...).

    Si jamais jeep6259 a besoin d'elaborer il pourra toujours demander

    @+

  7. #7
    Membre expérimenté
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 563
    Points : 1 691
    Points
    1 691
    Par défaut
    Bon, comme disais gorfael, ça m'a couté des heures de recherche pour un truc que si ça se trouve, la ligne est juste digne d'un cours preparatoire vba, mais bon, pourquoi faire simple quand on peut faire compliqué, et qu'on a le temps
    Grace aux indication de notre ami ouskel'nor
    j'ai pu réussir a obtenir la piece jointe en bas de feuille
    (a propos, si qu'elqu'un veut bien m'expliquer comment mettre un texte, mettre une pj pour expliciter, puis remettre deuxieme texte. pour le momen, je n'arrive qu'a poser ma pj en fin de texte)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Sub copie()
        Range("a1:g10").Copy Destination:=Sheets(2).Cells(Sheets(2).UsedRange.Rows.Count + 1, 1)
    End Sub
    me permet d'obtenir le resultat escompté, a savoir les dix premiere lignes copié en page 2 a la suite de celles existant déja même si les lignes en question sont vides
    re ps : aller les bleus, boutons l'anglais hors de la finale
    re re ps apres avoir revu ma copie de prés, il reste un défaut, a savoir la case g10, mais pour ce soir, j'y arrive pas a comprendre

  8. #8
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Je suis toujours etonne du nombre de reponses quand un post est ajoute.

    En fait je pense que j ai du mal m exprimer, mais je souhaite saisir les cellules a1 a g10 de la feuille "recording" pour les copier dans une autre feuille nomme "Bilan".
    Avec une seule ligne, j'arrive a le faire. Mais par contre avec plusieurs lignes dont le nombre est variable en fonction des cas (de A a G maximum, mais cela peut etre juste de A a C...) la je suis perdu.

    Si ca peut aider quelqu un je vous met le code pour une seule ligne et plusieurs colonnes....

    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 BoutonAdd()
    Dim vRow As Long
    Dim vColumn As Byte
    Dim I As Byte
     
    With Sheets("Bilan")
    'nombre de champs à archiver
    vColumn = .Range("IV1").End(xlToLeft).Column
    'N° de la ligne à écrire
    vRow = .Range("A65536").End(xlUp).Row + 1
       For I = 1 To vColumn
          'on écrit dans la base d'archive le contenu des cellules
          '.Cells(2, I) contient la référence de la cellule de la valeur à basculer
          .Cells(vRow, I) = Range(.Cells(2, I))
       Next I

    et dans la feuille bilan, il faut mettre en seconde ligne juste au dessus ou vou voulez que ca commence a ecrire ce code =CELL("address",recording!A1) puis =CELL("address",recording!B1) puis =CELL("address",recording!C1).... en fionction du nombre de colonnes a copier...


    Voila j'espere que ca pourra m'aider. Ce qui est dur ici, c est de recopier plusieurs lignes de retirer les lignes vides de les coller et surtout si on renouvelle l'operation de continuer les enregistrements a la suite....

    Merci d'avance

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    heu j' ai laisse une erreur a1 g10 ou B2 G27... c'est la meme chose.... je saurais changer les cellules de destination....

    PS: dsl pour le texte sans accent mais les claviers qwerty.... ca aide pas

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Citation Envoyé par jeep6259 Voir le message
    heu j' ai laisse une erreur a1 g10 ou B2 G27... c'est la meme chose.... je saurais changer les cellules de destination....

    PS: dsl pour le texte sans accent mais les claviers qwerty.... ca aide pas
    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
     
    Sub test()
    Dim Plage As String
    Dim Cel As Range
    Dim Y As Long
    Dim X As Integer
    With Sheets("recording")
        Plage = "A1:G8"
        For Each Cel In .Range(Plage)
            If Cel <> "" Then
                Y = IIf(Cel.Row > Y, Cel.Row, Y)
                X = IIf(Cel.Column > X, Cel.Column, X)
            End If
        Next Cel
        Plage = "A1:" & Cells(Y, X).Address(0, 0)
    End With
    Y = 0
    With Sheets("Bilan")
        For X = 1 To 7
            Y = IIf(.Cells(65536, X).End(xlUp).Row > Y, _
                         .Cells(65536, X).End(xlUp).Row, Y)
        Next X
        Sheets("recording").Range(Plage).Copy .Range("A" & Y + 1)
    End With
    End Sub
    On recherche l'adresse de la plage à sauvegarder
    en testant toutes les cellules de la plage de référence. Si une cellule n'est pas vide, on sauvegarde laligne/colonne la plus élevée entre celle de la cellule et la variable
    Ont défini ainsi de manière exacte la plage à sauver
    pour la destination, on procéde de la même manière, mais que pour trouver la ligne+1

    Pour
    da991319 et alsimbad
    Effectivement le .Copy ...offset() ne renvoie plus d'erreur Me serai-je enduit avec de l'erreur ?!? Pourtant, je ne souviens bien du problème et de la solution trouvée ?!?
    ça m'apprendra à me moquer des autres
    A+

  11. #11
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oups.... j ai crie victoire trop vite je pense.

    J ai juste un dernier soucis, il savere que dans la plage de donnees il y a des formules... comment faire pour ne coller dans la page bilan que les valeurs?

    Alors actuel, il me colle des zones de textes blanches contenant des formules. Je ne veux copier que les valeurs des cellules.

    Merci davance

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut

    Remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("recording").Range(Plage).Copy .Range("A" & Y + 1)
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Sheets("recording").Range(Plage).Copy 
    .Range("A" & Y + 1).PasteSpecial (xlPasteValues)
    A+

  13. #13
    Futur Membre du Club
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Un grand merci a toi et a vous tous, c'est exactement le code que je souhaitais.

    Ca fait vraiment plaisir d'avoir des reponses rapides et claires.

    C'est bien dommage qu'on ne trouve pas cet entraide dans tous les domaines.



    Merci encore

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

Discussions similaires

  1. [AC-2003] Tri-Classement, cas d'égalité
    Par leelu dans le forum IHM
    Réponses: 1
    Dernier message: 22/07/2009, 20h40
  2. Tri classement sur plusieurs critères
    Par zahidovich dans le forum Excel
    Réponses: 4
    Dernier message: 27/10/2008, 22h53
  3. [MySQL] Fonction de tri (classement)
    Par fixbraun dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/08/2007, 15h00
  4. [2.0] Différents tri sur la même source de données
    Par Drahas dans le forum Accès aux données
    Réponses: 4
    Dernier message: 14/11/2006, 19h48
  5. Tri les données suivant un critère non alphabétique
    Par travisbarker dans le forum Langage SQL
    Réponses: 5
    Dernier message: 28/05/2006, 23h00

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