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 :

Problème de Copy Destination


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut Problème de Copy Destination
    Bonjour, je suis débutant.
    Mon code coince à la ligne copy

    le fichier s'ouvre bien mais quand je veux copier les cellules A1 à... cela bloque.

    Merci pour votre aide.


    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
    Sub TEST()
     
    Dim wk, wk2 As Workbook
    Dim ws, ws2 As Worksheet
    Dim pth, prf1, prf2, prf3, suf, chemin, nom, Fichier As String
    Dim dat, dat2 As Date
    Dim derlign As Variant
     
    derlign = Range("A1048576").End(xlUp).Row - 1
     
    '        pth = "\\spvcertipost001\Expensys\Fedcom\2020\SPV\source_rapports_budget\source_rapport_krc\"
    pth = "P:\VBA\BETA_KRC\file\"
    suf = ".XLSX"
    prf1 = "ZBUDRAP_"
    prf2 = "ZBUDRAPCV_"
    prf3 = "S_P99_ALL_ "
     
    Set wk = ThisWorkbook
    Set ws = wk.Worksheets("Feuil1")
     
    dat = CDate("1900/01/01")
        nom = Dir(pth & prf1 & "*" & suf)
        Do While nom > ""
            nom = Trim(Replace(Replace(nom, prf1, ""), suf, ""))
            If IsNumeric(nom) And Len(nom) = 8 Then
                If IsDate(Format(nom, "####/##/##")) Then
                    dat2 = CDate(Format(nom, "####/##/##"))
                    If dat2 > dat Then Fichier = pth & prf1 & nom & suf: dat = dat2
                End If
            End If
            nom = Dir
            Debug.Print nom
        Loop
    Debug.Print Fichier
     
     
    Set wk2 = Workbooks.Open(Fichier, ReadOnly:=True)
    wk2.Worksheets("Sheet1").Range("A2:A" & derlign).Copy
    ws.Range("A2").Paste
    wk2.Close True
    Set wk2 = Nothing
     
    End Sub

  2. #2
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 579
    Par défaut
    Il faut faire un collage spécial !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Range("A2").PasteSpecial  Xl?????
    'ou
    wk2.Worksheets("Feuil1").Range("A2:A" & derlign).Copy ws.Range("A2")
    RangesSources.copy RangeDestinaton

  3. #3
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Super le copy / paste fonctionne mais j'ai un autre problème
    ma formule de somme.si.ens renvoie une erreur vba
    pourquoi ?


    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
    Sub TEST()
     
    derlign = Range("A1048576").End(xlUp).Row
    cderlign = Cells(Rows.Count, 1).End(xlUp).Row + 1
     
     
    '        pth = "\\spvcertipost001\Expensys\Fedcom\2020\SPV\source_rapports_budget\source_rapport_krc\"
    pth = "P:\VBA\BETA_KRC\file\"
    suf = ".XLSX"
    prf1 = "ZBUDRAP_"
    prf2 = "ZBUDRAPCV_"
    prf3 = "S_P99_ALL_ "
     
    Set wk = ThisWorkbook
    Set ws = wk.Worksheets("Feuil1")
     
    dat = CDate("1900/01/01")
        nom = Dir(pth & prf1 & "*" & suf)
        Do While nom > ""
            nom = Trim(Replace(Replace(nom, prf1, ""), suf, ""))
            If IsNumeric(nom) And Len(nom) = 8 Then
                If IsDate(Format(nom, "####/##/##")) Then
                    dat2 = CDate(Format(nom, "####/##/##"))
                    If dat2 > dat Then Fichier = pth & prf1 & nom & suf: dat = dat2
                End If
            End If
            nom = Dir
            Debug.Print nom
        Loop
    Debug.Print Fichier
     
    ws.Range("A2:A999").ClearContents
    Set wk2 = Workbooks.Open(Fichier, ReadOnly:=True)
    wk2.Worksheets("sheet1").Range("A2:A" & derlign - 1).Copy ws.Range("A2")
     
    info = ws.Range("A" & Rows.Count).End(xlUp).Row
    MsgBox info
    ws.Range("A2:A" & info).RemoveDuplicates Columns:=1, Header:=xlNo
     
    info = ws.Range("A" & Rows.Count).End(xlUp).Row
    MsgBox info
     
    For i = 2 To info
        somme = Application.WorksheetFunction.SumIfs(wk2.Worksheets("sheet1").Range(Cells(2, 2), Cells(cderlign - 1, 2)), wk2.Worksheets("sheet1").Range(Cells(1, 1), Cells(cderlign - 1, 1)), ws.Cells(i & 1))
        ws.Range("B" & i).Value = somme
    Next i
     
     
     
    'wk2.Close True
    'Set wk2 = Nothing
     
    End Sub

  4. #4
    Membre Expert
    Avatar de pijaku
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    1 817
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Août 2010
    Messages : 1 817
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Cette syntaxe ws.Cells(i & 1) me semble curieuse (cf au bout de ta formule).

  5. #5
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    sorry

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    somme = Application.WorksheetFunction.SumIfs(wk2.Worksheets("sheet1").Range(Cells(2, 2), Cells(cderlign - 1, 2)), wk2.Worksheets("sheet1").Range(Cells(1, 1), Cells(cderlign - 1, 1)), ws.Cells(i, 1))

  6. #6
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Curieux ces lignes de code avec la date. Pas le temps de faire un test pour l'instant mais cela me semble étrange
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                If IsDate(Format(nom, "####/##/##")) Then
                    dat2 = CDate(Format(nom, "####/##/##"))
                    If dat2 > dat Then Fichier = pth & prf1 & nom & suf: dat = dat2
                End If
    j'ai un autre problème ma formule de somme.si.ens renvoie une erreur vba pourquoi ?
    Comme l'a indiqué Franck, que je salue, le problème est que les objets Cells, ne sont pas reliés à leur parent qui est la feuille

    Voici un exemple simple
    Affichage de la somme des cellules de chaque ligne (de 2 à 4) des colonnes A & B de la feuille nommé CA. Soit pour la ligne 2, l'équivalent excel de =SOMME(CA!A2:B2)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Sub t()
      Dim sht As Worksheet
      Dim row As Long
      Set sht = ThisWorkbook.Worksheets("CA")
      For row = 2 To 4
        With sht
          MsgBox "Somme de la ligne " & row & " est " & _
                  Format(Application.WorksheetFunction.Sum(.Range(.Cells(row, 1), .Cells(row, 2))), "#,###")
        End With
      Next
    End Sub
    4
    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

  7. #7
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    pourtant la feuille wk2 ici et ws en début de module est indiquée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Set wk2 = Workbooks.Open(Fichier, ReadOnly:=True)
    wk2.Worksheets("sheet1").Range("A2:A" & derlign - 1).Copy ws.Range("A2")
     
    info = ws.Range("A" & Rows.Count).End(xlUp).Row
    MsgBox info
    ws.Range("A2:A" & info).RemoveDuplicates Columns:=1, Header:=xlNo
     
    info = ws.Range("A" & Rows.Count).End(xlUp).Row
    MsgBox info
     
    For i = 2 To info
    '    somme = Application.WorksheetFunction.SumIfs(wk2.Worksheets("sheet1").Range(Cells(2, 2), Cells(cderlign - 1, 2)), wk2.Worksheets("sheet1").Range(Cells(1, 1), Cells(cderlign - 1, 1)), ws.Cells(i, 1))
        ws.Range("B" & i).Value = "4"
    Next i

  8. #8
    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 176
    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 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    pourtant la feuille wk2 ici et ws en début de module est indiquée :
    Avez-vous bien lu ce que j'ai écrit ?
    J'avais pourtant mis Cells en gras que je mets en rouge maintenant

    Comme l'a indiqué Franck, que je salue, le problème est que les objets Cells, ne sont pas reliés à leur parent qui est la feuille
    Code partiel (sans le With Sht)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sum(.Range(.Cells(row, 1), .Cells(row, 2)))
    Vous voyez que Range, et Cells sont précédés d'un point qui les relie à ..... la feuille (Sht)
    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

Discussions similaires

  1. [VBA-E] Problème de copie de données
    Par JM_stp dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 25/02/2006, 00h33
  2. [VB]Problème de copie
    Par sterepathie dans le forum VB 6 et antérieur
    Réponses: 27
    Dernier message: 26/01/2006, 17h10
  3. [XSL] problème avec copy espace de nom
    Par luta dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 11/10/2005, 15h18
  4. Problème de copie de string dans string
    Par kazarn dans le forum SL & STL
    Réponses: 17
    Dernier message: 15/03/2005, 18h35

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