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 :

Copier une ligne d'une feuille 2 vers une feuille 1 après avoir vérifier qu'elle n'existe pas dans la feuille1


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Points : 19
    Points
    19
    Par défaut Copier une ligne d'une feuille 2 vers une feuille 1 après avoir vérifier qu'elle n'existe pas dans la feuille1
    Bonjour à tous !
    J'ai un petit programme qui est censé faire ceci : " Copier une ligne d'une feuille 2 vers une feuille 1 après avoir vérifier qu'elle n'existe pas dans la feuille1"

    Sauf que j'ai un problème dans mon code, il ne reconnait pas un objet j'ai un message d'erreyr "objet requis"

    Si vous pouvez m'aider ce serait top .

    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
    29
    30
    31
    32
    33
    34
    'le but de la macro suivante est de chercher une valeur dans une colonne contenue dans une feuille2 _
    ' et regarder si elle existe dans une autre feuille , si elle existe , on ne fait rien, et si elle n'existe pas
    'copier la ligne entière de la feuille2 et l'ajouter à la en bas de la feuille1.
    Option Explicit
     
    Sub ChercherTrouverCopier()
    'déclaration des variables pouvant occuper des cases mémoires
    Dim NumCompteFOUND As Variant
    Dim NumCompte As Variant
    Dim Numligne As Integer
    Dim i As Integer
     
     
    Numligne = Sheets("feuille1").Range("A65536").End(xlUp).Row  'on attribue à Numligne le la dernière case connue renseignée va servir pour le copiage _
                                                                ' de ligne à la fin
     
    Application.ScreenUpdating = False 'permet d'accélérer les calculs en ne raffraichissant pas la page.
     
    For i = 2 To Sheets("feuille2").Range("A65536").End(xlUp).Row
        NumCompte = Sheets("feuille2").Cells(i, 1).Value 'attribuer le NumComtpe à la cellule ligne i colonne 1
        NumCompteFOUND = Sheets("feuille1").Range("A1:F999").Find(NumCompte, lookat:=xlPart) 'à étendre la palge de recherche si besoin A1 F999
        If NumCompteFOUND Is Nothing Then
            Sheets("Feuille2").Cells(i, 1).EntireRow.Copy 'copier la ligne entière de la feuille2
        Sheets("feulle1").Activate
        Cells(Numligne + i - 1, 1).Select
          ActiveSheet.Paste
        Else
        End If
    Next i
     
    Application.ScreenUpdating = True 'raffraichit a la page de calcul a la fin.
     
    End Sub
    'fin de la précédure

  2. #2
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour, bonjour !

    et c'est pourtant bien expliqué dans les règles du forum, il y a même une animation ‼


    Après avoir édité la demande initiale et donc balisé le code, merci d'indiquer le n° de la ligne déclenchant l'erreur,
    on aura peut-être alors une idée de l'objet requis

    En fait il suffit de lire l'exemple de l'aide de la méthode Find car une variable sans Set n'est pas une variable objet …
    Et voilà !

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    1ère façon
    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
    Sub ChercherTrouverCopier()
    Dim NumCompteFOUND As Range
    Dim Numligne As Integer
    Dim i As Integer
     
    With Sheets("feuille1")
      Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première cellule vide
    End With
    Application.ScreenUpdating = False
    With Sheets("feuille2")
      For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
        Set NumCompteFOUND = Sheets("feuille1").Range("A1:F999").Find(.Cells(i, 1), lookat:=xlPart) 'es-tu sur de "lookat:=xlPart" ?
        If NumCompteFOUND Is Nothing Then
          With Sheets("feuille1")
            Sheets("feuille2").Cells(i, 1).EntireRow.Copy .Cells(Numligne, 1) 'copier la ligne entière de la feuille2
            Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première cellule vide
          End With
        End If
      Next i
    End With
    Application.ScreenUpdating = True
    End Sub
    2ème façon
    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 ChercherTrouverCopier2()
    Dim NumCompteFOUND As Range
    Dim Numligne As Range
    Dim Cel As Range, CelPl As Range
     
    With Sheets("feuille1")
      Set Numligne = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'Première cellule vide
    End With
    Application.ScreenUpdating = False
    With Sheets("feuille2")
      Set CelPl = .Range("A" & .Rows.Count).End(xlUp)
      For Each Cel In .Range("A2", CelPl)
        Set NumCompteFOUND = Sheets("feuille1").Range("A1:F999").Find(.Cells(i, 1), lookat:=xlPart) 'es-tu sur de "lookat:=xlPart" ?
        If NumCompteFOUND Is Nothing Then
          With Sheets("feuille1")
            Sheets("feuille2").Cells(i, 1).EntireRow.Copy Numligne 'copier la ligne entière de la feuille2
             Set Numligne = .Range("A" & .Rows.Count).End(xlUp)(2, 1) 'Première cellule vide
          End With
        End If
      Next Cel
    End With
    Application.ScreenUpdating = True
    End Sub
    et on pourrait encore faire autrement, surtout si tu as beaucoup de lignes à traiter, en passant par des variables tableau

  4. #4
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    @ Marc-L , oui je m'excuse je ferai attention la prochaine fois ! Je suis débutant dans VBA, j'espère m'améliorer grâce à ce forum .

    @ Dominique, ça fonctionne parfaitement !

    Par contre je ne comprends pas l'utilisation du With / end With , il permet de se placer dans l'espace objet désigné?
    J'ai à peu près 500 lignes à traiter je pense que ça ira , mais je serai curieux de savoir comment traiter par cette autre méthode!

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Par contre je ne comprends pas l'utilisation du With / end With , il permet de se placer dans l'espace objet désigné?
    non, il économise des écritures, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Sheets("feuille1")
      Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1
    End With
    remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      Numligne = Sheets("feuille1").Range("A" & Sheets("feuille1").Rows.Count).End(xlUp).Row + 1

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Points : 19
    Points
    19
    Par défaut
    En effet ! .. merci encore !

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2014
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mars 2014
    Messages : 19
    Points : 19
    Points
    19
    Par défaut victoire trop rapide!
    re-bonjour je reviens vers vous parce que j'ai réalisé que j'ai crié victoire un peu trop tôt la dernière fois :

    En effet , ma macro ne prend pas tout en compte, des valeurs qui sont dans la feuille2 et qui n'existent dans la feuille1 n'étaient pas copié vers la feuille1.. comme je voulais le faire.. je ne sais pas ce qui cloche dans la macro , j'ai pourtant fait un find " xlWhole"

    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
     
     
    Sub ChercherTrouverCopier2()
    Dim NumCompteFOUND As Range
    Dim Numligne As Integer
    Dim i As Integer
     
    With Sheets("feuille1")
      Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première cellule vide
    End With
    Application.ScreenUpdating = False
    With Sheets("feuille2")
      For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
        Set NumCompteFOUND = Sheets("feuille1").Range("A1:F999").Find(.Cells(i, 1), lookat:=xlWhole)
        If NumCompteFOUND Is Nothing Then
          With Sheets("feuille1")
            Sheets("feuille2").Cells(i, 1).EntireRow.Copy .Cells(Numligne, 1) 'copier la ligne entière de la feuille2
            Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première cellule vide
          End With
        End If
      Next i
    End With
    Application.ScreenUpdating = True
    End Sub

    Je vous ai mis un échantillon de mon fichier en pièce jointe ,

    Merci d'avance !!!
    Fichiers attachés Fichiers attachés

  8. #8
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2017
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par casdidier Voir le message
    re-bonjour je reviens vers vous parce que j'ai réalisé que j'ai crié victoire un peu trop tôt la dernière fois :

    En effet , ma macro ne prend pas tout en compte, des valeurs qui sont dans la feuille2 et qui n'existent dans la feuille1 n'étaient pas copié vers la feuille1.. comme je voulais le faire.. je ne sais pas ce qui cloche dans la macro , j'ai pourtant fait un find " xlWhole"

    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
     
     
    Sub ChercherTrouverCopier2()
    Dim NumCompteFOUND As Range
    Dim Numligne As Integer
    Dim i As Integer
     
    With Sheets("feuille1")
      Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première cellule vide
    End With
    Application.ScreenUpdating = False
    With Sheets("feuille2")
      For i = 2 To .Range("A" & .Rows.Count).End(xlUp).Row
        Set NumCompteFOUND = Sheets("feuille1").Range("A1:F999").Find(.Cells(i, 1), lookat:=xlWhole)
        If NumCompteFOUND Is Nothing Then
          With Sheets("feuille1")
            Sheets("feuille2").Cells(i, 1).EntireRow.Copy .Cells(Numligne, 1) 'copier la ligne entière de la feuille2
            Numligne = .Range("A" & .Rows.Count).End(xlUp).Row + 1 'Première cellule vide
          End With
        End If
      Next i
    End With
    Application.ScreenUpdating = True
    End Sub

    Je vous ai mis un échantillon de mon fichier en pièce jointe ,

    Merci d'avance !!!
    Salut, je me permets de déterrer ton sujet puisque je suis confronté exactement au même problème que toi et j'aimerais savoir si tu avais trouvé une solution.

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

Discussions similaires

  1. [XL-2007] Copier ligne saisie par un formulaire vers une autre feuille selon le nomclient
    Par pasterlouis dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/06/2013, 21h36
  2. Ajouter une ligne si elle n'existe pas dans la table
    Par daimadoshi dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 19/11/2010, 15h52
  3. [XL-2003] copier une ligne d'un fichier txt vers une cellule
    Par hatemhatem dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/03/2010, 13h20
  4. copier une ligne entière d'un tableau vers un autre
    Par ktulu77 dans le forum VBA PowerPoint
    Réponses: 3
    Dernier message: 15/09/2008, 09h12
  5. Comment transférer une ligne d'une feuille Excel vers une autre
    Par iboulaye1980 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/05/2007, 10h32

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