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] Deplacement de lignes et boucle


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut [VBA-E] Deplacement de lignes et boucle
    Bonjour tout le monde,

    je viens ici pour demander votre aide, dans mon travail j'ai besoins de traiter des fichiers excel qui sont assez en vrac on peut dire
    c'est la premiere fois que je fais des macro en vba

    en fait mon pb c'est que j'ai des données sur plusieurs lignes et que j'aimerais toutes les rassembler sur une seule ( 4 lignes ), mais comme il y a plusieurs fois ces lignes car ceux sont des données chaques 10 minutes, j'aimerais faire une boucle jusqu'à la fin du classeur
    j'arrive a selectionner la plage de cellules que je veux mais j'arrive pas a les coller automatiquement a la suite

    voilà mon code actuel:

    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
    Dim lignecourante As Integer
        Dim Index As Integer
        Index = 3
        lignecourante = Index + 1
     
     
        Range(cells(1,lignecourante),cells(37,lignecourante)).Select
        Selection.Cut
        Range(cells(3,Index)).Select
        ActiveSheet.Paste
     
        lignecourante = lignecourante + 1
        Range(cells(1,lignecourante),cells(28,lignecourante)).Select
        Selection.Cut
        Range("cells(3,Index)").Select
        ActiveSheet.Paste
     
        lignecourante = lignecourante + 1
        Range(cells(1,lignecourante),cells(8,lignecourante)).Select
        Selection.Cut
        Range(cells(3,Index)).Select
        ActiveSheet.Paste
     
        lignecourante = lignecourante + 1
        Range(cells(1,lignecourante),cells(17,lignecourante)).Select
        Selection.Cut
        Range(cells(3,Index)).Select
        ActiveSheet.Paste
    c'est un peu le bordel, mais j'essaye de comprendre un peu le fonctionnement, là je vais le deplacement pour un bloc de 4 lignes, mais ça marche pas

    si vous avez des idées je suis prenneur

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Ce qui te manque, c'est le code pour trouver le N° de la première ligne vide pour coller tes lignes... si j'ai bien compris...
    Essaie avec ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        PremièreLigneVide = Range("A1").CurrentRegion.End(xlDown).Row + 1
    ou ça (c'est plus mieux)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        PremièreLigneVide = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    merci de ton aide ouskel'n'or, mais ça ne marche toujours pas,
    la macro me selectionne et coupe la premiere ligne mais ne la deplace pas si je laisse "range(cells(index,3)).select", si je ne met pas cette ligne, il ne coupe rien
    par contre je sais pas s'il faut definir PremiereLigneVide, ni meme en quoi...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim lignecourante As Integer
        Dim Index As Integer
        Index = 3
     
        lignecourante = 4
        Range(Cells(lignecourante, 1), Cells(lignecourante, 43)).Select
        Selection.Cut
        'Range(Cells(Index, 3)).Select
        'PremièreLigneVide = Range("A1").CurrentRegion.End(xlDown).Row + 1
        PremièreLigneVide = Range("A1").SpecialCells(xlCellTypeLastCell).Row + 1
        ActiveSheet.Paste

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub DéplacerUneLigne()
    Dim lignecourante As Integer
        Dim Index As Integer
        Index = 3
        lignecourante = 4
        PremièreLigneVide = Range("A65535").End(xlUp).Row + 1
        Rows(lignecourante).EntireRow.Cut
        Rows(PremièreLigneVide).Insert Shift:=xlDown
    End Sub
    Teste ça

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    merci pour ta reponse,

    ça deplace toute la ligne tout en bas du tableau, je vais essayer de modifier le code pour l'adapter pour le mettre a la suite de ma ligne

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

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    désolé de faire un double post, mais j'ai encore un pb, au lieu de copier la ligne a la suite de ligne du dessus ça la met a la fin du fichier en fait
    qu'est ce qu'il faut modifier dans la premiere ligne pour faire ça
    j'ai testé en mettant un cells(variable,999) a la plce de "A65535" mais il me met une erreur et meme Row en Column mais marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    PremièreColVide = Range("A65535").End(xlUp).Row + 1
    Rows(lignecourante).EntireRow.Cut
    Rows(PremièreColVide).Insert Shift:=xlDown
    merci encore pour vos futures reponses

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Où veux-tu placer ta ligne ? Où la prends-tu ?
    J'ai peur d'avoir mal compris

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    je vous donne un exemple de ce que j'ai a la base

    je veux mettre toutes les lignes a la suite de la premiere ligne, je prends donc la seconde ligne et je veux la placer a la fin de la premiere ligne automatiquement pour le collage, ensuite je refait pareil encore 3 fois

    là je n'ai mis qu'une partie de tout le fichier, et j'ai en gros 5 lignes a mettre sur une seule puis je recommence l'operation jusqu'a la fin du fichier
    Fichiers attachés Fichiers attachés

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Déjà tu me perturbes en écrivant ça
    Range(cells(1,lignecourante),cells(28,lignecourante)).Select
    La syntaxe pour cells est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range(cells(NoLigne,NoColonne),cells(NoLigne2, NoColonne2)).Select
    sauf si "Lignecourante est le N° de colonne.
    Si tu peux m'éclairer sur ton intention, ton pb n'est pas si ardu qu'on ne pourra le résoudre

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    désolé c'était une erreur de ma part, j'avais inversé ligne et colone

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Dim lignecourante As Integer
        Dim Index As Integer
     
        Index = 4
        lignecourante = 5  
        PremièreColVide = Range("A65535").End(xlUp).Row + 1 ' comment mettre la valeur de la derniere colone vide se trouvant à la fin de la ligne qui a la valeur Index dans PremièreColVide 
        Rows(lignecourante).EntireRow.Cut ' selectionne la ligne que je veux deplacer
     
        Rows(PremièreColVide).Insert Shift:=xlDown
        'là au lieu de copier la ligne a a la suite de la ligne du dessus, ça la copie à la fin de mon fichier

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Oui, le code que je t'ai passé était bien destiné à copier le ligne après la dernière ligne. Ce qui m'a/nous a égaré est le fait que tu copies une ligne complète.
    Tu ne peux pas coller une ligne complète à partir d'une colonne donnée. Tu dois sélectionner la plage des cellules renseignées de ta ligne pour la copier à la fin d'une autre ligne renseignée.
    Donc, tu dois déterminer la dernière colonne renseignée de la plage copiée et pour avoir cette plage, tu peux mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PlageOùCopier = Range(Cells(NoLigne,1), cells(NoLigne, Range(NoLigne & ":" & NoLigne").SpecialCells(xlCellTypeLastCell).Column
    Et pour coller, tu dois déterminer la première colonne vide de la ligne dans laquelle tu colles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    NoCol = Range(NoLigne2 & ":" & NoLigne2").SpecialCells(xlCellTypeLastCell).Column
    Enfin, tu peux coller en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(NoLigne2,NoCol).paste
    Tu dis

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    je n'y arrive pas, la premiere ligne de code que tu m'as donné ne marche pas, elle me met une erreur, je ne vois pas d'où ça vient, j'ai pensé que ça venait de " qu'il y a dans le range de la premiere ligne car dans la deuxieme ligne ça me fesait pareil et je l'ai supprimé mais dans la premiere ça ne fait rien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    PlageOùCopier = Range(Cells(lignecourante,1), cells(lignecourante, Range(lignecourante & ":" & lignecourante").SpecialCells(xlCellTypeLastCell).Column
     
    NoCol = Range(Index & ":" & Index).SpecialCells(xlCellTypeLastCell).Column
     
    Cells(Index, NoCol).Paste
    j'ai adapté les variables par rapport a ce que j'avais besoins

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Autant pour moi... Enlève le guillement en rouge
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    PlageOùCopier = Range(Cells(lignecourante,1), cells(lignecourante, _
    Range(lignecourante & ":" & lignecourante").SpecialCells(xlCellTypeLastCell).Column

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    il y avait aussi un probleme à la fin de la premiere ligne, il manquait des paranthéses, mais maintenant c'est la derniere ligne qui plante erreur 438


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        PlageOùCopier = Range(Cells(lignecourante, 1), Cells(lignecourante, Range(lignecourante & ":" & lignecourante).SpecialCells(xlCellTypeLastCell).Column))
     
        NoCol = Range(Index & ":" & Index).SpecialCells(xlCellTypeLastCell).Column
     
        Cells(Index, NoCol).Paste

  15. #15
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    je viens de reussir a faire ce que je voulais faire, je te remercie de ton aide ouskel'n'or

    now je vais faire de la mise en page

  16. #16
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Alors si c'est résolu, faut faire un clic sur le bouton là en bas de la fenêtre.
    Faut toujours dire que c'est résolu quand c'est résolu

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

Discussions similaires

  1. [VBA-E]Numero de ligne et boucle de colonne
    Par alex_95 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/03/2006, 12h10
  2. [VBA-E]ajout de ligne automatique
    Par deathsurfer dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 14/01/2006, 13h22
  3. [VBA-E] rechercher une ligne pour remplacer?
    Par zouille dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 31/12/2005, 10h31
  4. [VBA-E] Parcourir les lignes filtrées après un filtre auto
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 09/10/2005, 13h14
  5. [VBA][Excel]Insérer une ligne
    Par loverdose dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/02/2005, 16h27

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