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 :

Copie de la ligne = erreur 438 [XL-2016]


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
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut Copie de la ligne = erreur 438
    Bonjour



    J'ai bizouné mon code. J'obtiens un erreur de type 438 à la ligne et n'étant pas très bon en VBA. Je ne sais pas ou est le problème.

    
    

    Voici mon code en entier:


    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
     
     
    Sub Liste_()
     
            Dim Ws As Worksheet
            Dim Cellule As Range
            Dim Premiere As Variant
            Dim Réponse As Integer
            Dim i As Integer
            Dim Nwb As Workbook
     
     
    Réponse = MsgBox("Des éléments ont été trouvés " & Chr(10) & Chr(10) & Chr(10) & _
                    "Voulez-vous afficher la liste?", vbYesNo)
     
     
     
            If Réponse = vbYes Then
     
     
     
            For Each Ws In Worksheets 'Pour toute les feuilles du classeur
     
            Set Cellule = Range("N5:N100").Find("", , , , xlByColumns, xlNext)
     
            If Not Cellule Is Nothing Then
                Premiere = Cellule.Address
     
     
     
            Do
     
     
     
            'action a faire dès que la ligne est trouvée
     
            Set Cellule = Range("N5:N100").FindNext(Cellule)
            Loop While Not Cellule Is Nothing And Cellule.Address <> Premiere
     
                End If
     
     
            Next
     
     
                i = 0
     
            For Each Ws In Worksheets
     
                Set Cellule = Range("N5:N100").Find("", , , , xlByColumns, xlNext)
                If Not Cellule Is Nothing Then
                    Premiere = Cellule.Address
     
     
                    If i = 0 Then Set Nwb = Workbooks.Add
                ThisWorkbook.Sheets("Test").Visible = True
                ThisWorkbook.Sheets("Test").Copy Before:=Nwb.Sheets(1)
                ThisWorkbook.Sheets("Test").Visible = False
                Application.DisplayAlerts = False
                Nwb.Sheets(2).Delete
                Application.DisplayAlerts = True
     
     
     
                    Do
     
     
                         i = i + 1
                     Ws(Cellule.Row).Copy
                     Nwb.Sheets("Test").Range("A" & i + 5).PasteSpecial Paste:=xlPasteValues
                        Set Cellule = Range("N5:N100").FindNext(Cellule)
                    Loop While Not Cellule Is Nothing And Cellule.Address <> Premiere
     
     
                End If
     
                Next
     
     
            Else
     
            Exit Sub
     
            End If
     
     
     
    Application.CutCopyMode = False
     
    Application.ScreenUpdating = True
     
    End Sub
    Est-ce possible de me donner un coup de main pour régler mon problème.
    
    
    Merci

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En parcourant rapidement votre code, je vois que la variable objet ws est un objet Worksheet donc l'instruction Ws.Copy pourrait éventuellement fonctionner mais certainement pas Ws(Cellule.Row).Copy
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Merci de votre réponse.


    Alors si je voudrais coller la ligne en entier que le find a trouvé. Je devrais coder comment?

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 166
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 166
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je suppose que vous voulez copier la ligne entière de la cellule trouvée et ensuite coller cette plage à un autre endroit.
    Le problème c'est qu'en copiant la ligne entière, on ne peux coller cette plage qu'à partir de la première colonne d'une feuille quelconque mais sans doute voulez-vous dire la ligne complète d'une certaine liste.

    Voici un exemple simple qui copie la ligne complète (soit 16384 cellules) de la cellule trouvée dans la plage E1:E10 de la feuille nommée Feuil3 en la collant dans la feuille nommée Feuil2 à partir de la cellule A20
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub t()
      Dim c As Range
      Dim r As Range
      Set r = ThisWorkbook.Worksheets("Feuil3").Range("E1:E10")
      Set c = r.Find(What:="toto")
      c.EntireRow.Copy Destination:=ThisWorkbook.Worksheets("Feuil2").Range("A20")
      Set c = Nothing: Set r = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Octobre 2015
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2015
    Messages : 54
    Par défaut
    Finalement résolu:

    Voici le code

    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    Sub Liste_()
     
     
    Dim Ws As Worksheet
    Dim Cellule As Range
    Dim Premiere As Variant
    Dim i As Integer
    Dim Nwb As Workbook
    Dim Feuille As Object
     
    If MsgBox("Des éléments ont été trouvés " & Chr(10) & Chr(10) & Chr(10) & _
                    "Voulez-vous afficher la liste?", vbYesNo, "Afficher les éléments") = vbYes Then
     
        Application.ScreenUpdating = False
        For Each Ws In Worksheets
     
            Set Cellule = Ws.Range("N5:N100").Find("", , , , xlByColumns, xlNext)
     
            If Not Cellule Is Nothing Then
                Premiere = Cellule.Address
     
                If i = 0 Then Set Nwb = Workbooks.Add
     
                With ThisWorkbook.Sheets("Test")
                    .Visible = True
                    .Copy Before:=Nwb.Sheets(1)
                    .Visible = False
                End With
     
                Application.DisplayAlerts = False
     
                For Each Feuille In Sheets
                If Feuille.Name <> "Test" Then
                Feuille.Delete
                End If
     
                Next Feuille
                Application.DisplayAlerts = True
     
     
     
                Do
                    i = i + 1
     
                    Ws.Range(Cellule.Address).EntireRow.Copy
                    Nwb.Sheets("Test").Range("A" & i + 4).PasteSpecial Paste:=xlPasteValues
     
                    Set Cellule = Ws.Range("N5:N100").FindNext(Cellule)
                Loop While Not Cellule Is Nothing And Cellule.Address <> Premiere
     
            End If
     
        Next Ws
     
        Application.CutCopyMode = False
    End If
    Application.ScreenUpdating = True
    End Sub

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

Discussions similaires

  1. [AC-2013] [ERREUR 438] Copie de graphique sur Powerpoint
    Par toaster31 dans le forum VBA Access
    Réponses: 5
    Dernier message: 29/03/2017, 09h32
  2. Réponses: 1
    Dernier message: 20/08/2006, 17h34
  3. [SQL Server] Créer la copie d'une ligne
    Par joeln3 dans le forum Langage SQL
    Réponses: 7
    Dernier message: 01/06/2006, 16h54
  4. [newbie]message erreur 438 object doen't support ...
    Par megapacman dans le forum Access
    Réponses: 6
    Dernier message: 13/03/2006, 14h28
  5. [VB6]créer une copie d'une ligne d'une table
    Par h82kev dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/02/2006, 16h08

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