[VBA] Problème de copier/coller d'un classeur a un autre

Themoliere -  
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je suis un petit débutant dans le domaine du VBA et je cherche à faire un code faisant la moyenne sur plusieurs fichiers de mesures initialement sous format texte. Le principe de mon code est de faire une boucle qui va sélectionner un a un les fichier, les importer sous format excel, les copier les uns après les autres dans une feuille commune dans le classeur originel du programme puis faire la moyenne. Cependant je rencontre un problème au niveau de la fonction Copier/Coller, j'ai sans arret des message d'erreur quand j'essaye d'activer le classeur original. Pouvez vous m'aider? Merci d'avance!
Public WB_Principal As Workbook

Sub CommandButton1_Click()
    Dim col
    col = 1
    Set WB_Principal = ActiveWorkbook

' Sélection du classeur source à partir d'une fenêtre
 cheminfichier = Application.GetOpenFilename("Fichiers txt (*.txt), *.txt, Fichiers xlsx (*.xlsx),*.xlsx")
        
        If cheminfichier = "Faux" Then
        Exit Sub
        End If
        
    ' Récupération du nom du classeur + extension
    For i = Len(cheminfichier) To 1 Step -1
        If Mid(cheminfichier, i, 1) = "\" Then Exit For
    Next
    nomfichier = Mid(cheminfichier, i + 1, Len(cheminfichier))
        
    Chemin = Mid(cheminfichier, 1, Len(cheminfichier) - Len(nomfichier))
    
    'Boucle sur tous les fichiers txt du répertoire.
    fichier = Dir(Chemin & "*.txt")
    'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
    'Fichier = Dir(Chemin & "*.*")
    
    Do While Len(fichier) > 0
    
        cheminfichier = Chemin & "" & fichier
        doc = Parcourir(cheminfichier)
        Copier (doc)
        
        fichier = Dir()
        col = col + 5
        
    Loop



'Unload Me

End Sub

Function Parcourir(cheminfichier)
        
        Workbooks.OpenText Filename:= _
        cheminfichier, _
        Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
        xlDoubleQuote, ConsecutiveDelimiter:=True, Tab:=True, Semicolon:=False, _
        Comma:=False, Space:=True, Other:=False, FieldInfo:=Array(Array(1, 1), _
        Array(2, 1), Array(3, 1), Array(4, 1), Array(5, 1), Array(6, 1)), TrailingMinusNumbers _
        :=True
        
        For i = Len(cheminfichier) To 1 Step -1
        If Mid(cheminfichier, i, 1) = "\" Then Exit For
        Next
        nomfichier = Mid(cheminfichier, i + 1, Len(cheminfichier))
        
        Chemin = Mid(cheminfichier, 1, Len(cheminfichier) - Len(nomfichier))
        
        'Récupération seulement du nom du classeur
        For i = 1 To Len(nomfichier) Step 1
        
            If Mid(nomfichier, i, 1) = "." Then
            Exit For
            End If
            
        Next
        ext = Mid(nomfichier, 1, i - 1)
        
        'copie du fichier de données
        
        Worksheets(ext).Select
        
        
        With Application
        .DecimalSeparator = "."
        .ThousandsSeparator = " "
        .UseSystemSeparators = False
        End With
        
        Worksheets(ext).Select
        Selection.NumberFormat = "0.00"

End Function

Function Copier(doc)

    ActiveSheet.UsedRange.Select
    Selection.Copy
    Workbooks("WB_Principal").Activates
    Worksheets("Feuil2").Activates
    Cells(1, col).Select
    ActiveSheet.Paste
    
End Function
    


A voir également:

5 réponses

f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Bonjour,

Workbooks("WB_Principal").Activates: WB_Principal est une variable, donc ne pas mettre entre doubles cotes et en principe Activate sans s, sauf si vous avez un excel particulier.

bonne suite
0
Themoliere
 
Merci beaucoup f894009, le probleme c'est que quand je ne met pas les "", excel me renvoie a une "incompatibilité de type" pourtant j'ai bien définit WB_principal comme un workbook au début du code.
0
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Avez-vous declarer WB_principal en variable public dans un moule ???
0
Themoliere
 
Je suppose que vous voulez dire module? Non je ne l'ai pas fait. J'ai tapé directement tout mon code dans la même page.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
f894009 Messages postés 17277 Date d'inscription   Statut Membre Dernière intervention   1 713
 
Re,

Autant pour moi:

Workbooks(WB_Principal.Name).Activate
0