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 :

[VBA-E]Copie/colle selon colonnes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut [VBA-E]Copie/colle selon colonnes
    Bonjour ,

    J'aurais besoin de votre aide pour un truc dont j'arrive absolument pas a me depatouiller , j'explique :

    Voici deux feuilles differentes :

    La premiere
    La deuxieme

    Alors en fait , j'aimerais que lorsque je clique sur un bouton de la premiere page , les donnes qui sont sur la premiere page soit collé sur la deuxieme page mais d'une facon un peu particuliere :

    Prenons par exemple le code ABJ sur la premiere page . Il a sur sa ligne plusieurs données : Min 60 , -45 2.75 etc.. J'aimerais copie les donnes de cette ligne , sur la deuxieme feuilles mais dans les bonnes colonnes . Ainsi , que je trouve d'abord la ligne qui contient le code ABJ sur la deuxieme feuille , ensuite , je trouve la colonne de Min et je colle ( sur la ligne de ABJ ) le 60 . Ensuite , je reste sur la ligne , je cherche la colonne -45 et je colle 2.75 etc..

    Je suppose que tout ceci doit faire partie d'une boucle pour passer de ligne en ligne jusqu'a la derniere ligne remplie ?

    Enfin bon ca me semble un peu complexe et je sais pas si c'est réalisable.

    Cordialement.

  2. #2
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Bonjour
    Si j'ai bien compris, tu veux recopier pour un code donné les bonnes valeurs aux bon endroits. et ceci pour tous les codes de la première pages
    Pour trouver la ligne en question dans la deuxième tu peux parcourir en te servant par exemple de cette fonction (c pas le plus simple mais elle a l'avantage d'être assez infaillible et d'être utilisable dans tte tes macros:
    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
    Public Function LookForRow(ColumnId As Integer, feuille As String, target As Variant) As Integer
    'trouve le numéro de ligne sur laquelle est écrit le nom du projet/réseau/resultat (target) que l'on veut lancer
    On Error GoTo Error_LookForRow
     
    LookForRow = 1
     
    Do While Worksheets(feuille).Cells(LookForRow, ColumnId).Value <> target
        LookForRow = LookForRow + 1
        If LookForRow = 5000 Then GoTo Error_LookForRow
    Loop
     
    Exit Function
     
    Error_LookForRow:
    MsgBox ("le mot " & target & " est introuvable dans la feuille " & feuille & " dans la colonne" & ColumnId)
     
    End Function
    Donc avec cette fonction , tu récupère la ligne à laquelle se trouve le mot target dans la colonne columnID de la feuille feuille
    ensuite tu peux mettre soit une recopie de toutes les cellules en ayant repéré l'ordre: du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheet("la deuxième").cells(i,j+2).value=Worksheet("la permière").cells(i,j+1).value
    soit tu parcours ton tableau de la première page et pour chaque colonne tu te sert d'un fonction similaire qui trouve la bonne colonne du style
    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
    Public Function LookForColumn(Rowid As Integer, feuille As String, target As Variant) As Integer
    'trouve le numéro de la colonne sur laquelle est écrit le nom du projet/réseau/resultat (target) que l'on veut lancer
    On Error GoTo Error_LookForColumn
     
    LookForColumn = 1
     
    Do While Worksheets(feuille).Cells(Rowid, LookForColumn).Value <> target
        LookForColumn = LookForColumn + 1
        If LookForColumn = 5000 Then GoTo Error_LookForColumn
    Loop
     
    Exit Function
     
    Error_LookForColumn:
    MsgBox ("le mot " & target & " est introuvable dans la feuille " & feuille & " dans la ligne" & Rowid)
     
    End Function
    et t'intègre tout ca dans une boucle générale
    ca donnerais qq chose comme ca
    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
    Sub recopier()
    Dim i As Integer
    Dim ligne As Integer
    Dim colonne As Integer
    Dim code As String
    Dim j As Integer
     
     
    For i = 2 To 27 'fin de ton tableau
        ligne = LookForRow(7, "nom de la deuxième feuille", Worksheets("premirèe feuille").cells(i, 2).Value)
        For j = 4 To 12 'fin en largeur de ton tableau dans la première feuille
            colonne = LookForColumn(1, "nom de ta deuxième feuille", Worksheets("nom de ta première feuille").cells(5, j).Value)
            Worksheets("deuxième").cells(ligne, colonne).Value = Worksheets("première").cells(i, j).Value
     
        Next j
     
    Next i
     
    End Sub
    bien sur jai pas ton tableau donc jai pas testé et puis je suis pas sur que tu veuilles tout recopier et ca ne prend pas en compte les doublons...
    à adapter donc
    dis mois si ca va
    rémi

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    Hum.. j'ai du oublier de te dire que j'etais un peu debutant

    Le code fonctionne apparement plus ou moins bien :
    il trouve bien la ligne correspond au code (ABJ par exemple) , trouve colonne ( la deuxieme , jamais la premiere qui est MIN dans mon cas) , mais fait toujours un retour à l'erreur en m'indiquant la position.

  4. #4
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Alors, pour le fait que min en soit pas repérer ca vient du fait qu'il n'est pas écrit pareil d'une feuille à l'autre ("MIN" dans un cas et "min" dans l'autre)
    Les majuscules sont importantes
    sinon j'ai pas trop compris quelle était l'erreur que tu avais
    c'est une erreur qui vient de quelle fonction? lookforcolumn?
    change le 5000 de la fonction en 500
    rémi

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    Merci de ta réponse .
    Desormais je trouve effictivement bien la colone MIN .

    Pour l'erreur , elle se fait sur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("base").Cells(ligne, colonne).Value = Worksheets("MAJ").Cells(i, j).Value
    Dans la boucle .

    Voici l'erreur :

    1004 erreur definie par l'application ou par l'objet.

    Cordialement.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    Finalement , j'ai pense a quelque chose de plus simple :

    Ma premiere feuille est creer de la meme maniere que la deuxieme . Il ne sagit donc plus de trouver la colone + ligne de chaque valeur mais simplement de trouver la ligne de la premiere feuille qui correspond a la ligne de la deuxieme feuille .

    Par exemple : lorsque j'active la sub , ma premiere ligne etant avec le code ABJ en premiere colone ( je copie la ligne jusqu'a la colone x ), je cherche dans la deuxieme feuille la ligne ou il y a le code ABJ en premiere colone , puis je colle . Etant donné que les deux feuilles ont le meme formattage , tout rentrera dans les bonnes cellules .
    Ensuite je passe a la ligne suivante en gardant le meme procede ( boucle donc )

    Je sais pas si je me suis bien fait comprendre

    Cordialement.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 52
    Par défaut
    Bon bah j'ai reussis a trouver la ligne + la colonne de la deuxieme feuille vis a vis de chaque colonne sur la premiere feuille . Maintenant ce que j'aimerais et que je n'arrive pas a faire :

    Je copie les cellules ( jusqu'a la colonne x ) qui sont sur la ligne x , puis je colle sur la deuxieme feuille , depuis la colonne x , tout ce que je viens de copier .

    J'ai tout essaye avec copy et tout mais sans succes .

    Un peu d'aide svp ?

    Cordialement.

  8. #8
    Membre éprouvé
    Inscrit en
    Juillet 2005
    Messages
    141
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 141
    Par défaut
    Bonjour,
    je resuggère ma solution avec parcours des cellules (si tu as la même mise en forme)
    Il y a-t-il un pb avec?
    Si a est la colonne ou sont placés tes codes dans la première feuille
    b la colonne ou sont placés tes codes dans la deuxième feuille
    c la colonne à partir de laquelle tu veux arrêter ta recopie
    Bien sur en considérant que tes colonnes sont dans le même ordre à partir de la colonne a
    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
    Sub recopier()
    Dim i As Integer
    Dim ligne As Integer
    Dim j As Integer
     
     
    For i = 2 To 27 'fin de ton tableau
        ligne = LookForRow(b, "nom de la deuxième feuille", Worksheets("premirèe feuille").cells(i, a).Value)
        For j = a To c 'fin en largeur de ton tableau dans la première feuille
                    Worksheets("deuxième").cells(ligne, j+b-a).Value = Worksheets("première").cells(i, j).Value 
     
        Next j
     
    Next i
     
    End Sub
    Voila je pense que ca devrait faire ce que tu veux
    rémi

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

Discussions similaires

  1. Déplacement et copie/colle de colonnes
    Par FCL31 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 02/09/2009, 11h22
  2. {VBA Excel}Copie de colonne
    Par Thomas69 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 07/08/2007, 09h44
  3. Réponses: 11
    Dernier message: 30/10/2006, 13h51
  4. [VBA-E] copie de colonnes
    Par bricereyem dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 08/06/2006, 09h56

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