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 copier avec saut de ligne [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut VBA copier avec saut de ligne
    Bonjour a tous,

    Je suis un novice sur VBA et je cherche a faire un code qui recopie les colonnes d'une feuille1 vers une feuilles2 mais avec des sauts de lignes.

    Exemple :

    feuille 1:
    A
    B
    C
    D
    E
    F
    G
    H
    I
    J



    feuille 2:
    A
    B
    C

    Je voudrais utilisé aussi while et wend pour que l'action se repète jusqu'à arrivé une certaine ligne de la feuille1(900 sur le vrai tableau).

    Merci de me mettre sur la voie pour trouver une solution

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue au forum !
    Quel est ton problème ? Où bloques-tu ? Quel est ton code pour l'instant ? Quel problème rencontres-tu avec ton code ? Une erreur ? Laquelle ? Où ?
    Si tu veux aller jusqu'à la ligne 900, utilises plutôt une boucle For :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1 To 900
        Range("A" & i).Value = "toto" & i
    Next i
    Ce code écrit toto et le n° de la ligne dans les cellules A1 à A900.
    Pour copier-coller on utilise, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range("A1").Copy destination:=Sheets("Feuil2").Range("B1")
    Ici je copie la cellule A1 de la feuille Feuil1 et je la colle dans la cellule B1 de la feuille Feuil2.
    Quand tu dis insérer des sauts de lignes, en fait tu veux coller les donner toutes les x lignes (x à l'aire d'être 5 d'après ton exemple). A ce moment-là, tu fais une boucle où à chaque iteration :
    • Tu copies la cellule Ai de la feuille Feuil1
    • Tu colles en cellule A(i*5) de la feuille Feuil2

    J'espère que ça te permettra d'avancer.

  3. #3
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    je cherche a faire un code qui recopie les colonnes d'une feuille1 vers une feuilles2 mais avec des sauts de lignes
    Montre-nous ce que tu tentes **** sur ces bases simples :
    1) copie tel quel
    2) parcours la feuille de bas en haut (boucle for to Next avec Step -1) et ajoute alors tes lignes supplémentaires.

    **** Ici, on tente au moins. On ne se contente pas de demander du code à copier/coller.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut
    en effet je n'ai pas copié ce que j'ai déjà essayer,

    comme je l'ai dis j'ai utilisé whyle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
     
         Dim Num As Integer
         Num = 1 
     
         While Num <= 900 
           Sheets("Feuil1").Range("B2").Copy destination:=Sheets("Feuil2").Range("A1")
         Wend
     
    End Sub
    apparament c'est mieux d'utilisé for ce que j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
     
    Dim i As Integer
     
    For i = 1 To 900
     
        Sheets("Feuil1").Range("B2").Copy destinotion:=Sheets("Feuil2").Range("A1")
     
    Next i
     
    End Sub

    déja je vois pas comment formulé le code pour que la copy se fasse toutes les 5 lignes.

    mon but n'ai pas d'avoir la solution c'est de comprendre comment ça marche

  5. #5
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    déja je vois pas comment formulé le code pour que la copy se fasse toutes les 5 lignes.
    Et je t'ai dit que le plus simple était de commencer par la copie pure et simple, sans insertion de lignes, PUIS d'insérer tes lignes en parcourant du bas vers le haut
    mon but n'ai pas d'avoir la solution c'est de comprendre comment ça marche
    "ça marche" comme je te l'ai dit plus haut, mais je ne vois pas ta tentative sur cette base simple. Tu t'y mets quand ?

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut
    Citation Envoyé par unparia Voir le message
    Tu t'y mets quand ?
    Je veux m'y mettre tout suite mais si il y a plusieurs colonne que je dois copié ta méthode ne marche plus (je pense tout du moins)
    plus tard je voudrais reproduire la même chose mais en dessous des cellules déjà remplit c'est pour cela que je cherche à ciblé les destinations et faire une boucle avec, ce que je ne sais pas faire ...

  7. #7
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub test()
    Dim i As Integer
    For i = 1 To 900
        Sheets("Feuil1").Range("B2").Copy destination:=Sheets("Feuil2").Range("A1")
    Next i
    End Sub
    Je traduis en français :
    Pour i allant de 1 à 900 copier B2 de Feuil1 et coller en A1 de Feuil2. Donc tu fais le même copier-coller 900 fois.

    Il faut que tu utilises ta variable i !
    Je te remets mon exemple simple de boucle For :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim i As Integer
    For i = 1 To 900
        Range("A" & i).Value = "toto" & i
    Next i
    Tu vois qu'on utilise i pour dire qu'on veut écrire en Ai (iteration 1, i = 1, on écrit en A1; iteration 2, i = 2, on écrit en A2; iteration 3, i = 3, on écrit en A3 etc ...)
    Dans ton cas, tu veux parcourir toutes les lignes à copier et les coller en ligne i*5
    Est-ce que tu vois comment adapter ?

    Au passage, une remarque par rapport à ta boucle While :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
         Dim Num As Integer
         Num = 1 
         While Num <= 900 
           Sheets("Feuil1").Range("B2").Copy destination:=Sheets("Feuil2").Range("A1")
         Wend
    End Sub
    Ceci est une boucle infinie ! Tu dis : Num vaut 1. Tant que Num <= 900 faire le copier-coller. Or Num ne change jamais dans ce que tu écris (il vaut toujours 1). Donc tu auras toujours Num <=900, donc ta boucle ne s'arrêtera jamais.
    Quand on fait une boucle While : toujours faire attention à ne pas créer une boucle infini ! Il faut une condition d'arrêt atteignable.
    Il aurait fallu écrire, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub test()
         Dim Num As Integer
         Num = 1 
         While Num <= 900 
           Sheets("Feuil1").Range("B2").Copy destination:=Sheets("Feuil2").Range("A1")
           i = i + 1
         Wend
    End Sub
    Num vaut 1. Tant que Num <= 900 faire le copier-coller et ajouter 1 à i. Fin

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2017
    Messages : 22
    Par défaut
    Citation Envoyé par riaolle Voir le message
    Est-ce que tu vois comment adapter ?
    je rajoute ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub test()
     
    Dim i As Integer
     
    For i = 1 To 900
     
        Sheets("Feuil10").Range("B2").Copy destinotion:=Sheets("Feuil2").Range("A1").Value = i * 5
     
    Next i
     
    End Sub

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

Discussions similaires

  1. Réponses: 23
    Dernier message: 02/05/2007, 14h52
  2. Requête INSERT ou UPDATE avec saut de ligne
    Par CinErarY dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 02/05/2007, 04h38
  3. Réponses: 34
    Dernier message: 08/03/2007, 14h51
  4. [ASP/Flash] Toujours soucis avec sauts de ligne :(
    Par delavega dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 15/12/2006, 18h31
  5. Variable avec saut de ligne à l'intérieur
    Par MaTHieU_ dans le forum Langage
    Réponses: 2
    Dernier message: 09/08/2004, 22h39

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