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 :

Boucle pour copier des valeurs à la suite dans une même feuille [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 39
    Points
    39
    Par défaut Boucle pour copier des valeurs à la suite dans une même feuille
    Bonjour

    Sur une feuille (base de données) ayant 6 colonnes, j'ai un certain nombre de ligne (pour l'exemple 50 en réalité 10 fois plus).
    Je souhaite multiplier ma base de 11 fois pour avoir autant de lignes pour chaque mois.
    50 premières lignes pour janvier, 50 suivantes pour février, etc...
    ma ligne 1, c'est les entêtes.
    C'est en colonne 6 (F) que le mois est inscrit.

    J'ai essayé de créer un code (avec boucle)
    Mais il y a un souci ! (sinon ça serait pas drôle
    Le code ne remet pas bien en dernière ligne une fois la première copie effectuée...
    La boucle n'est pas correcte...

    la variable mois n'est pas encore définie (en cours de réflexion). considérons pour le moment que la valeur à prendre est "mois"

    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
    Dim j, k, l, m, n As Integer
    Dim mois As String
     
    j = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row  'j est la dernière ligne de la feuille BASE
    k = j + 1
     
    Range("A2:Q" & j).Copy
    For n = 1 To 11
    Range("A" & k).Select
    ActiveSheet.Paste
     
    m = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
    Range("F" & k).Select
     
    For l = k To m
    Cells(l, 6).Value = mois  'indique dans le mois
    Next l
     
    Next n
    merci d'avance de votre aide !

  2. #2
    Membre habitué
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Décembre 2012
    Messages : 129
    Points : 149
    Points
    149
    Par défaut
    Bonjour,

    Je pense que tu te casses la tête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub copier11fois()
    Dim plage As Range
    Dim nbRow As Integer, i As Integer
     
    nbRow = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
    Set plage = Sheets("BASE").Range("A1:G" & nbRow)
     
    For i = 1 To 11
        nbRow = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
        plage.Copy Destination:=Sheets("BASE").Range("A" & nbRow + 1)
    Next i
     
    End Sub
    Pour les mois, ça ira aussi vite de le faire à la main, ou avec des formules.

  3. #3
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Bonjour,

    @mathspountz : je me suis permis de reprendre ton code pour y ajouter 2-3 trucs:

    De mon côté le code marche nickel et t'ajoutes même les mois


    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 copier11fois()
     
    Dim plage As Range
    Dim nbRow, nbRow_fin, i As Integer
    Dim mois As String
     
     
    nbRow = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
    Range("F2:F" & nbRow) = MonthName(1) 'mois
    Set plage = Sheets("BASE").Range("A2:F" & nbRow)
     
    For i = 1 To 11
        mois = MonthName(i + 1)
        nbRow_fin = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
        plage.Copy Destination:=Sheets("BASE").Range("A" & nbRow_fin + 1) 'copier un block
        Range("F" & nbRow_fin + 1 & ":F" & nbRow_fin + nbRow - 1) = mois 'mois
    Next i
     
    End Sub

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Points : 39
    Points
    39
    Par défaut
    bonjour, d'abord merci de votre aide et de vos réponses !

    vos codes fonctionnent ... mais ne correspondent pas à 100% à ce que je cherche à faire.
    1/ Les noms des mois dépendent forcement de la valeur des cellules situées en feuille "SECTION" de A22 à A33. Leur format est différent d'un format classique... (abréviations manuelles)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    mois = Application.Transpose(Worksheets("SECTION").Range("A22:A33"))
    MsgBox Join(mois, vbCrLf)
    Ici, je cherche maintenant à récupérer 1er valeur de mois, puis 2ème valeur de mois...
    le fait que les mois soient indiqués dans la plage A22:A33 est important car il est possible que les valeurs des mois changent en fonction de l'utilisation de la macro (traduction d'un pays à un autre). C'est pourquoi j'ai mis cela en paramètre.

    Je vais chercher à combiner ma macro avec vos réponses...
    Cordialement

  5. #5
    Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    64
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 64
    Points : 58
    Points
    58
    Par défaut
    Okay !

    J'ai enlevé la fonction qui donne un mois automatiquement mais va chercher le nom spécifique dans ta sélection, normalement c'est mieux, si j'ai bien compris.

    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
    Sub copier11fois()
     
    Dim plage As Range
    Dim i, j, nbRow, nbRow_fin As Integer
    Dim mois As String
     
     
    nbRow = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
    Sheets("BASE").Range("F2:F" & nbRow) = Sheets("SECTION").Range("A22").Value 'mois
    Set plage = Sheets("BASE").Range("A2:F" & nbRow)
     
    j = 23
     
    For i = 1 To 11
        nbRow_fin = Sheets("BASE").Range("A" & Rows.Count).End(xlUp).Row
        plage.Copy Destination:=Sheets("BASE").Range("A" & nbRow_fin + 1) 'copier un block
        Sheets("BASE").Range("F" & nbRow_fin + 1 & ":F" & nbRow_fin + nbRow - 1) = Sheets("SECTION").Range("A" & j).Value 'mois
        j = j + 1
    Next i
     
    End Sub
    (un petit "j'aime" si ce message répond à ta question, c'est ma première aide sur ce forum )

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/05/2009, 09h36
  2. Réponses: 9
    Dernier message: 05/04/2009, 03h00
  3. Code pour copier des cellules si elles respectent une condition
    Par octane dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 14/11/2008, 06h53
  4. Boucles pour changer des valeurs
    Par adurand dans le forum Access
    Réponses: 7
    Dernier message: 29/01/2007, 17h45

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