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 :

Problème duplication de ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut Problème duplication de ligne
    Bonjour,

    Je suis nouveau sur ce forum et en VBA. J'aurais donc besoin de vous pour un petit problème que je rencontre.

    J'ai un fichier excel possédant plusieurs colonnes dont une colonne qui correspond au temps mais où le pas de temps n'est pas uniforme. Ayant besoin d'un pas de temps uniforme (pas de temps de 1), je voudrais dupliquer les lignes nécessaire pour "combler" les vides.

    Pour cela, j'ai écrit ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub CopierInsererLigneV2()
     
        For i = 6 To 106
            If Cells(i + 1, 1) - Cells(i, 1) = 2 Then
                Cells(i, 1).Select
                Selection.EntireRow.Copy
                Selection.Insert Shift:=xlDown
                Application.CutCopyMode = False
            End If
     
        Next i
     
    End Sub
    Le problème est que la duplication ne se fait que sur la première ligne où Cells(i+1,1) - Cells(i,1) = 2 est vrai, et ce 100 fois (sur tout la durée de la boucle). Je ne vois cependant pas où est le problème (je me répète, mais je suis novice en VBA ^^).

    En espérant avoir été clair (ce qui m'étonnerait :/) et que vous pourrez m'aider.

    Anthony

  2. #2
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Quand on insère des lignes, il est préférable de partir de la fin vers le début.

    Essaies ce code (mais je pense que d'autres problèmes vont apparaître) :
    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 CopierInsererLigne()
    Dim i&, j&, n&
      Application.ScreenUpdating = False
      For i = 106 To 6 + 1 Step -1
        n = Cells(i, 1).Value - Cells(i - 1, 1).Value
        If n > 1 Then
          Rows(i).Copy
          For j = 1 To n - 1
            Rows(i).Insert Shift:=xlDown
            Cells(i, 1).Value = Cells(i + 1, 1).Value - 1
          Next j
        End If
      Next i
      Application.CutCopyMode = False
      Application.ScreenUpdating = True
    End Sub

  3. #3
    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,
    En effet comme le dit Patrice740, lorsqu'on insère (ou supprime) des lignes, on utilise une boucle en sens inverse. Voici une explication pour la suppression de ligne, mais qui se transpose facilement pour l'ajout de ligne : https://www.developpez.net/forums/d1...e/#post9204035

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut
    Merci beaucoup pour vos réponses !

    Le code que vous m'avez donné fonctionne très bien

    Merci aussi pour le lien !

    Cordialement,

    Anthony.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2017
    Messages : 4
    Par défaut
    Je me permets de revenir vers vous Patrice740 car j'ai peut être été un peu rapide dans mes tests finalement.

    J'ai vu que vous avez généralisé le code pour qu'il fonctionne même quand l'intervalle entre deux valeurs est plus grand que 2 et je vous en remercie d'avoir anticipé cela alors que je n'avais pas été très clair !
    Cependant, l'insertion se fait bien pour combler tout l'intervalle avec un nouveau pas de 1, mais le problème est que la ligne i n'est copiée que sur la ligne i-1 mais pas sur les autres nouvelles lignes vides. Savez vous d'où peut venir ce problème ?

    Cordialement,

    Anthony.

  6. #6
    Expert confirmé Avatar de Patrice740
    Homme Profil pro
    Retraité
    Inscrit en
    Mars 2007
    Messages
    2 478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mars 2007
    Messages : 2 478
    Par défaut
    Bonjour,

    Effectivement, il faut déplacer le copy dans la boucle :
    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 CopierInsererLigne()
    Dim i&, j&, n&
      Application.ScreenUpdating = False
      For i = 106 To 6 + 1 Step -1
        n = Cells(i, 1).Value - Cells(i - 1, 1).Value
        If n > 1 Then
          For j = 1 To n - 1
            Rows(i).Copy
            Rows(i).Insert Shift:=xlDown
            Cells(i, 1).Value = Cells(i + 1, 1).Value - 1
          Next j
        End If
      Next i
      Application.CutCopyMode = False
      Application.ScreenUpdating = True
    End Sub

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 02/12/2014, 13h40
  2. Problème retour à la ligne dans formulaire
    Par Mysti¢ dans le forum Langage
    Réponses: 1
    Dernier message: 03/04/2006, 13h34
  3. [Tableaux] Problème saut de ligne
    Par @lexx dans le forum Langage
    Réponses: 14
    Dernier message: 26/03/2006, 15h20
  4. Problème saut de ligne dans un tableau
    Par talggir dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/11/2005, 15h10
  5. problèmes aide en ligne Delphi 2005
    Par philippe.vernhes dans le forum Delphi .NET
    Réponses: 4
    Dernier message: 25/10/2005, 19h35

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