VBA Excel: erreur d'execution '438' lors du copier / coller

Résolu
Aurelie000 -  
 Aurelie000 -
Bonjour,

Je bidouille un peu en VBA, mais je ne suis pas très douée (j'apprends lors de chaque macro toute seule).

Je vous explique mon problème, si quelqu'un a une idée par hasard.

J'ai un fichier excel qui contient la macro, je lui demande d'ouvrir un fichier csv, je veux récupérer le contenu du fichier, et le coller dans un onglet de mon fichier excel de base.

Voici le code que j'ai utilisé:


Sub test()

Dim Brut1 As String

Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogOpen)
Dim vrtSelectedItem As Variant

With fd
.AllowMultiSelect = True

If .Show = -1 Then
.Execute
Else
Exit Sub

End If
End With

Workbooks(2).Columns("A:A").Value = ThisWorkbook.Worksheets("Brut1").Columns("A:A").Value

End Sub


J'ai l'erreur '438' proprieté ou méthode non gérée par cet objet sur cette ligne de code
Workbooks(2).Columns("A:A").Value=ThisWorkbook.Worksheets("Brut1").Columns("A:A").Value

J'ai essayé d'autres codes pour ce copier coller mais toujours cette erreur

Workbooks(2).Columns("A:A").Copy _
Destination:=ThisWorkbook.Worksheets("Brut1").Columns("A:A")


Et aussi

Workbooks(2).Activate
Cells.Select
Selection.Copy
ThisWorkbook.Activate
Worksheets("Brut1").Activate
Range("A1").Select
Selection.Paste


Si quelqu'un a une idée je serai preneuse :))

Merci d'avance

Bonne soirée

Aurélie
Configuration: Windows / Chrome 87.0.4280.66

3 réponses

  1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
     
    Bonjour,

    Avec ce code :
    Option Explicit
    Sub test()
    Dim wbk As Workbook
    Dim rng As Range
    Dim cel As Range
    Dim nom As String
      
      With Application.FileDialog(msoFileDialogOpen)
        .AllowMultiSelect = False
        If .Show = -1 Then
          nom = .SelectedItems.Item(1)
          ' Ouvrir le fichier csv "français" avec séparateur point virgule
          Set wbk = Workbooks.Open(Filename:=nom, Format:=4, local:=True)
    
    ' pour un cvs "anglais" avec séparateur virgule, remplacer la ligne précédente par :
    ' Set wbk = Workbooks.Open(Filename:=nom, Format:=2, local:=False)
          
          ' Plage source
          Set rng = wbk.Worksheets(1).UsedRange
          ' Cellule de destination
          Set cel = ThisWorkbook.Worksheets("Brut1").Range("A1")
          ' Copie des valeurs
          cel.Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
          ' Fermer le fichier csv
          wbk.Close False
        End If
      End With
    
    End Sub
    0
  2. Aurelie000
     
    Bonjour Patrice,

    Merci beaucoup !!!
    Ca faisait 2 jours que je tournais en rond avec cet erreur. J'avais beau chercher sur internet, je n'ai pas réussi toute seule.

    Ton code marche super bien, merci encore.

    Question bete: as tu remarquer quelque chose qui n'allait pas dans ma façon de faire?

    Bonne journée
    0
    1. Patrice33740 Messages postés 8400 Date d'inscription   Statut Membre Dernière intervention   1 784
       
      Bonjour,

      Pour un début, c'est très bien.
      Je conseille de toujours commencer les modules par Option Explicit, ça oblige à déclarer toutes les variables.

      Il faut éviter les Activate et Select (bannir du code comme ton 3ème essai).

      Il est mieux d'éviter Exit Sub, ça provoque un sortie prématurée de la procédure avec un risque d'oublier le retour au contexte initial.

      Cordialement
      Patrice
      0
  3. Aurelie000
     
    Merci beaucoup pour tes conseils. J'en prends note ;)
    0