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 :

comparaison entre deux lignes puis copie de ces lignes


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Par défaut comparaison entre deux lignes puis copie de ces lignes
    Bonjour,

    Je veux comparer la ligne( i )et la ligne suivante (i+1) selon la valeur de la cellule (i,1). Si la valeur de cette cellule est la même que celle de la ligne suivante, alors passer à l'enregistrement suivant. Si elle est différente, alors copier la ligne i et la ligne i+1 dans une autre feuille. Je joins un extrait de mon fichier.
    J'ai élaboré le code suivant :
    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
    Sub test2()
     
    Dim i As Integer
    Dim LR As Integer
     
     
    LR = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row
     
    For i = LR To 2 Step -1
    If Sheets("Feuil1").Cells(i, 1).Value <> Sheets("Feuil1").Cells(i + 1, 1).Value Then
     
    Sheets("Feuil1").Range(Cells(i, 1), Cells(i, 7)).Select
    Selection.Copy
    Sheets("Feuil3").Select
    Range("A1").Select
    ActiveSheet.Paste
     
    End If
     
     
    Next i
     
    End Sub
    Mais premier constat : ma condition ne marche pas du tout
    deuxième constat : il y a un pb avec la sélection selon le débogage. Dans le code ci-dessus, il n'y a que la sélection de la ligne et pas de i+1

    Merci d'avance,
    H.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ancien Etudiant
    Inscrit en
    Janvier 2019
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : Ancien Etudiant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 152
    Par défaut
    Bonjour,

    Mais premier constat : ma condition ne marche pas du tout
    Qu'est ce qui vous fait dire ça ?


    deuxième constat : il y a un pb avec la sélection selon le débogage. Dans le code ci-dessus, il n'y a que la sélection de la ligne et pas de i+1
    Si vous voulez sélectionner deux lignes, il faut écrire l'instruction pour qu'elle sélectionne deux lignes .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range(Cells(i, 1), Cells(i, 7)).Select
    va sélectionner les colonnes A à G sur la ligne courante (i)

    si vous voulez sélectionner les mêmes colonnes sur les lignes i et i+1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil1").Range(Cells(i, 1), Cells(i + 1, 7)).Select

    Attention la copie s'effectuant toujours en A1 de la feuille résultat, elle écrase la copie précédente ... Pour l'éviter, une solution consiste à utiliser un "compteur" de lignes incrémenté à chaque copie.

    Par ailleurs, il faut éviter les select qui alourdissent la clarté du code et sont gourmand en temps:

    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
    Dim i As Integer
    Dim LR As Integer, LF3 as Long 'LF3 N° de ligne dans la feuille 3
     
    LF3 =  1
    With Worksheets("Feuil1")
    LR = .Range("A" & Rows.Count).End(xlUp).Row
     
    For i = LR To 2 Step -1
        If .Cells(i, 1).Value <> .Cells(i + 1, 1).Value Then
            .Range(Cells(i, 1), Cells(i + 1, 7)).Copy  Sheets("Feuil3").Range("A" & LF3)
            LF3 = LF3 + 2
        End If
    Next i
     
    End With
    A+

  3. #3
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 974
    Par défaut
    bonjour
    essayez avec :
    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
    Sub VerifierCopier()
      Dim Lig     As Long
     
      Dim NbrLig  As Long
      Dim NumLig  As Long
      Application.ScreenUpdating = False
      ' néttoyer la feuille 2
      Sheets("feuil2").Select
      Sheets("feuil2").Cells.ClearContents 'nettoyer feuille 2
      Sheets("feuil2").Cells(1, 1).Resize(1, 7) = Array("id", "nom de la revue", "", "issn", "volume", "numero", "année") 'remplir les titres de colonnes
     
      '****************
      NumLig = 2
      With Sheets("Feuil1")     ' feuille source
      NbrLig = .Cells(Rows.Count, 1).End(xlUp).Row
      For Lig = 1 To NbrLig
        If .Cells(Lig, 1).Value <> .Cells(Lig + 1, 1).Value Then
          .Cells(Lig, 1).EntireRow.Copy
          .Cells(Lig + 1, 1).EntireRow.Copy
           Sheets("feuil2").Cells(NumLig, 1).Select
           ActiveSheet.Paste
        End If
        NumLig = Sheets("feuil2").Cells(Rows.Count, 1).End(xlUp).Row + 1
      Next
      End With
        Application.ScreenUpdating = True
    End Sub

  4. #4
    Membre averti
    Femme Profil pro
    information manager
    Inscrit en
    Janvier 2018
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : information manager

    Informations forums :
    Inscription : Janvier 2018
    Messages : 24
    Par défaut
    Les deux scripts marchent bien. Merci beaucoup !

    H.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 17/04/2018, 17h17
  2. Comparaison entre deux dates dans une table
    Par Biskot75 dans le forum Access
    Réponses: 6
    Dernier message: 19/09/2006, 11h16
  3. Réponses: 6
    Dernier message: 18/04/2006, 13h11
  4. Réponses: 5
    Dernier message: 10/04/2006, 12h07
  5. Comparaison entre deux champs de deux tables différentes
    Par liam81150 dans le forum Requêtes
    Réponses: 1
    Dernier message: 26/09/2005, 20h53

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