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 :

[VBA-E] pb pour copier une plage vers un autre repertoire


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut [VBA-E] pb pour copier une plage vers un autre repertoire
    Bonjour à tous,

    j'ai un problème pour copier une plage de cellules vers un autre fichier dans un autre répertoire.
    Lorsque j'exécute il n'y a aucun message d'erreur mais ma feuille reste vierge.

    J'ai créé le code dans un module et j'appelle ce code lors d'un clic bouton dans un formulaire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Call M1_Structuration_FMEA.Ajout_Fides(FenetrePrincipale.LblNomCarte.Value, FenetrePrincipale.LblVersion.Value)
    M1_Structuration_FMEA nom du module
    Ajout_Fides nom de la procedure

    je voudrais copier de la feuille Résultats 1_Stress du fichier FIDES-nom_carte-version vers la feuille Recap-Fides du fichier Recap-Calcul-Fides-version
    mon code est le 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
    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
    'procédure qui permet de récupérer les données fournies par FIDES-nom_carte-version
    'et de les insérer dans le fichier excel Recap-Calcul-Fides-version.xls
    Public Sub Ajout_Fides(NomCarte As String, Version As String)
     
        'ouverture du fichier FIDES-nom_carte.xls
        On Error Resume Next
        Workbooks("FIDES-" & NomCarte & "-" & Version & ".xls").Save
        If Err.Number = 9 Then
            GoTo line1
        End If
    line1:
        On Error Resume Next
        Workbooks.Open Filename:=RepertoireTravail & "Fichiers FMEA\Fichiers_generiques_carte\FIDES-" & NomCarte & "-" & Version & ".xls"
        If Err.Number = 1004 Then
            GoTo line2
        End If
    line2:
     
        'Activation du fichier FIDES
        Windows("FIDES-" & NomCarte & "-" & Version & ".xls").Activate
     
        'récupère le nombre de lignes du fichier Nomenclature-nom_carte.xls
        nb_lignes_totales = ActiveSheet("Résultats 1_Stress").UsedRange.Rows.Count
     
        'rend actif le fichier Recap-Calcul-Fides
        Windows("Recap-Calcul-Fides-" & NomCarte & ".xls").Activate
     
        ActiveWindow.WindowState = xlMaximized
     
        'renseigne le fichier Recap-Calcul-Fides tant que la fin du fichier FIDES-nom_carte.xls n'est pas atteinte
        i = 34
        j = 8
        Do While nb_lignes_totales <> j - 8
     
            'renseigne le composant
            Sheets("Recap-Fides").Range("A" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!A" & i
            Sheets("Recap-Fides").Range("A" & j).Value = Sheets("Recap-Fides").Range("A" & j).Value
     
            'renseigne la famille
            Sheets("Recap-Fides").Range("H" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!C" & i
            Sheets("Recap-Fides").Range("H" & j).Value = Sheets("Recap-Fides").Range("H" & j).Value
     
            i = i + 1
            j = j + 1
        Loop
     
        'sauvegarde du fichier Recap-Calcul-Fides-nom_carte.xls
        ActiveWorkbook.Save
     
        'Fermeture du fichier FIDES
        Workbooks("FIDES-" & NomCarte & "-" & Version & ".xls").Close
     
    End Sub
    Est-ce que quelqu'un a une idée sur les raisons du bug?
    merci d'avance.

    Cordialement.
    alex.a

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Déjà, là tu as un problème
    nb_lignes_totales = ActiveSheet("Résultats 1_Stress").UsedRange.Rows.Count
    Remplace ActiveSheet par worksheets. Ou mieux, instancie tes feuilles et utilises l'instance.
    Tu as également un truc curieux, ici
    Sheets("Recap-Fides").Range("H" & j).Value = Sheets("Recap-Fides").Range("H" & j).Value
    Tu copies la cellule Hj sur la cellule Hj...
    etc.
    Comme à partir de là je n'ai plus compris si tu avais un ou deux fichiers ou si les deux feuilles étaient dans le même, je me suis arrêté.
    Pour instancier et utiliser les instances, un exemple
    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
    Dim CL1 As Workbook
    Dim CL2 As Workbook
    Dim FL1 As Worksheet
    Dim FL2 As Worksheet
        ActiveWindow.WindowState = xlMaximized
    
        'ouverture du fichier FIDES-nom_carte.xls
        If Not ActiveWorkbook.Name = "FIDES-" & NomCarte & "-" & Version & ".xls" Then _
            Set CL1 = Workbooks.Open(RepertoireTravail & _
                "Fichiers FMEA\Fichiers_generiques_carte\FIDES-" & _
                NomCarte & "-" & Version & ".xls")
            Else
                Set CL1 = ActiveWorkbook
        End If
        Set FL1 = Worksheets("Résultats 1_Stress")
        'récupère le nombre de lignes du fichier Nomenclature-nom_carte.xls
        nb_lignes_totales = FL1.UsedRange.Rows.Count
        
        'renseigne le fichier Recap-Calcul-Fides tant que la fin du fichier FIDES-nom_carte.xls n'est pas atteinte
        i = 34
        j = 8
        'si cette feuille est dans le classeur CL1, remplace ??? par CL1
        'Sinon, instancie l'autre classeur
        Set FL2 = ???.Worksheets("Recap-Fides")
        Do While nb_lignes_totales <> j - 8
     
            'renseigne le composant
            FL2.Range("A" & j).Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & _
            "Résultats 1_Stress" & " '!A" & i
            'Sheets("Recap-Fides").Range("A" & j).Value = Sheets("Recap-Fides").Range("A" & j).Value
    NB - Mon code ne fait peut-être pas ce que tu veux si CL1 n'est pas le classeur actif au départ. Donc, tu auras à adapter
    A+

  3. #3
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Merci ouskel'n'or pour ton code

    je l'ai adapté mais j'ai une Erreur d'exécution '1004' erreur définie par l'application ou par l'objet

    la ligne de code en question est:
    FL2.Range("A" & j).Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!A" & i

    j'utilise les Classeurs CL1 Et CL2 et leurs feuilles respectives FL1 et FL2
    la copie se fait de FL1 vers FL2
    mon nouveau code est celui-ci
    j'ai laissé une méthode de chaque avec et sans le select

    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
    Public Sub Ajout_Fides(NomCarte As String, Version As String)
     
    Dim CL1 As Workbook
    Dim CL2 As Workbook
    Dim FL1 As Worksheet
    Dim FL2 As Worksheet
     
        ActiveWindow.WindowState = xlMaximized
     
        'ouverture du fichier FIDES-nom_carte.xls
        If Not ActiveWorkbook.Name = "FIDES-" & NomCarte & "-" & Version & ".xls" Then
            Set CL1 = Workbooks.Open(RepertoireTravail & _
                "Fichiers FMEA\Fichiers_generiques_carte\FIDES-" & _
                NomCarte & "-" & Version & ".xls")
            Else
                Set CL1 = ActiveWorkbook
        End If
     
        Set FL1 = Worksheets("Résultats 1_Stress")
        'récupère le nombre de lignes du fichier FIDES-nom_carte.xls
        nb_lignes_totales = FL1.UsedRange.Rows.Count
     
        'renseigne le fichier Recap-Calcul-Fides tant que la fin du fichier FIDES-nom_carte.xls n'est pas atteinte
        i = 34
        j = 8
     
        'ouverture du fichier Recap-Calcul-Fides-nom_carte.xls
        If Not ActiveWorkbook.Name = "Recap-Calcul-Fides-" & NomCarte & ".xls" Then
            Set CL2 = Workbooks.Open(RepertoireTravail & _
                "Recap-Calcul-Fides-" & NomCarte & ".xls")
            Else
                Set CL2 = ActiveWorkbook
        End If
     
        Set FL2 = CL2.Worksheets("Recap-Fides")
        Do While nb_lignes_totales <> j - 8
     
            'renseigne le composant
            FL2.Range("A" & j).Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & _
            "Résultats 1_Stress" & " '!A" & i
            FL2.Range("A" & j).Value = FL1.Range("A" & i).Value
     
     
            'renseigne la famille
            FL2.Range("H" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!C" & i
            FL2.Range("H" & j).Value = FL1.Range("C" & i).Value
     
            i = i + 1
            j = j + 1
        Loop
     
        'sauvegarde du fichier Recap-Calcul-Fides-nom_carte.xls
        ActiveWorkbook.Save
        'Fermeture du fichier FIDES
        Workbooks(CL1).Close
     
    End Sub
    Merci pour vos conseil.

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Dans la formule,
    "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!A" & i
    il doit manquer quelque chose. As-tu la formule telle que tu souhaites la voir dans une cellule ? (Ça m'évitera d'avoir à l'écrire )
    A+

    edit
    Essaie ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "=[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & "!A" & i
    Pas testé (!)

  5. #5
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par ouskel'n'or
    Dans la formule,
    il doit manquer quelque chose. As-tu la formule telle que tu souhaites la voir dans une cellule ? (Ça m'évitera d'avoir à l'écrire )
    La voilà
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ='[FIDES-IO-01A.xls]Résultats 1_Stress'!B34
    Essaie ça
    Code :
    "=[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & "!B" & i
    L'erreur est la même
    est-ce que l'erreur peut venir du chemin?
    (les deux fichiers sont situés dans des répertoires différents)

  6. #6
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    En effet, si le fichier est fermé, tu as besoin du chemin.
    A+

  7. #7
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    Malheureusement mon problème ne vient pas de là, puisque mon fichier est ouvert.

    j'ai toujours mon Erreur d'exécution '1004' erreur définie par l'application ou par l'objet

    la ligne de code en question est toujours:
    FL2.Range("A" & j).Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!B" & i

    une idée?

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Alors fais ça
    Msgbox "=[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & "!B" & i
    Et vérifie que ça donne bien ce que tu veux que ça donne

  9. #9
    Membre régulier
    Inscrit en
    Avril 2006
    Messages
    175
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 175
    Points : 91
    Points
    91
    Par défaut
    c'est bon ca marche
    j'ai modifié mes ouvertures de fichier avec des

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    On Error Resume Next
     
        If Err.Number = 1004 Then
            GoTo line2
        End If
    line2:
    Même si je c'est pas pourquoi il me m'était cette erreur

    merci encore ouskel'n'or


    voici mon code pour ceux que ca intéresse:
    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
    94
    95
    Public Sub Ajout_Fides(NomCarte As String, Version As String)
     
        Dim CL1 As Workbook
        Dim CL2 As Workbook
        Dim FL1 As Worksheet
        Dim FL2 As Worksheet
     
        On Error Resume Next
        Set CL1 = Workbooks("FIDES-" & NomCarte & "-" & Version & ".xls")
        If Err.Number = 9 Then
            GoTo line1
        End If
    line1:
        On Error Resume Next
        Set CL1 = Workbooks.Open(RepertoireTravail & _
                "Fichiers FMEA\Fichiers_generiques_carte\FIDES-" & _
                NomCarte & "-" & Version & ".xls")
        If Err.Number = 1004 Then
            GoTo line2
        End If
    line2:
     
       Windows(CL1).Activate
       Set FL1 = Worksheets("Résultats 1_Stress")
     
        If Workbooks("FIDES-" & NomCarte & "-" & Version & ".xls").FL1.AutoFilterMode Then
           Workbooks("FIDES-" & NomCarte & "-" & Version & ".xls").FL1.AutoFilterMode = False
        End If
     
        nb_lignes_totales = FL1.UsedRange.Rows.Count
     
        On Error Resume Next
        Set CL2 = Workbooks("Recap-Calcul-Fides-" & NomCarte & ".xls")
        If Err.Number = 9 Then
            GoTo line3
        End If
    line3:
        On Error Resume Next
        Set CL2 = Workbooks.Open(RepertoireTravail & "Recap-Calcul-Fides-" & NomCarte & ".xls")
        If Err.Number = 1004 Then
            GoTo line4
        End If
    line4:
     
        Windows(CL2).Activate
        Set FL2 = CL2.Worksheets("Recap-Fides")
     
        If Workbooks(CL2).FL2.AutoFilterMode Then
            Workbooks(CL2).FL2.AutoFilterMode = False
        End If
     
        ActiveWindow.WindowState = xlMaximized
     
        i = 34
        j = 8
     
        Do While nb_lignes_totales <> j - 8
     
            'renseigne le composant
            FL2.Range("A" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" '&"!B"&i
            FL2.Range("A" & j).Value = FL1.Range("B" & i).Value
     
            'renseigne la famille
            FL2.Range("H" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!C" & i
            FL2.Range("H" & j).Value = FL1.Range("C" & i).Value
     
            'renseigne la quantité de composant
            FL2.Range("B" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!E" & i
            FL2.Range("B" & j).Value = FL1.Range("E" & i).Value
     
            'renseigne le FIT
            FL2.Range("C" & j).Select
            ActiveCell.Value = "='[FIDES-" & NomCarte & "-" & Version & ".xls]" & "Résultats 1_Stress" & " '!F" & i
            FL2.Range("C" & j).Value = FL1.Range("F" & i).Value
     
            'renseigne le FIT cal
            If FL2.Range("H" & j) = "condensateur" Then
            FL2.Range("D" & j) = FL2.Range("C" & j) * FL2.Range("G4").Value
            Else
            FL2.Range("D" & j) = FL2.Range("C" & j)
            End If
     
            i = i + 1
            j = j + 1
        Loop
     
        'sauvegarde du fichier Recap-Calcul-Fides-nom_carte.xls
        ActiveWorkbook.Save
        'Fermeture du fichier FIDES
        Workbooks(CL1).Close
     
    End Sub

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 543
    Points
    15 543
    Par défaut
    Ajoute une fin de gestion d'erreur après chaque étiquette sans quoi tu pourrais bien avoir des pb de boucle sans fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    line4:
         Err.clear
         On error goto 0

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

Discussions similaires

  1. [VBA] Copie d'une plage vers un autre classeur
    Par Pachee dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/08/2008, 15h14
  2. [VBA]comment copier une ligne vers un autre classeur
    Par iboulaye1980 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2007, 18h22
  3. [VBA-E] Erreur pour copier une feuille
    Par Persons dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 02/06/2006, 22h38
  4. Precission pour copier une base vers une autre
    Par Jim_Nastiq dans le forum Requêtes
    Réponses: 2
    Dernier message: 10/04/2006, 17h30
  5. [MFC] Copier une ressource vers un autre projet
    Par annedjomo dans le forum MFC
    Réponses: 7
    Dernier message: 25/01/2006, 15h17

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