Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème syntaxe dans fonction copier sosu VBA

Sujet résolu
    26 juillet 2018 à 11:47:29

    Bonjour, je vous sollicite car j'ai un petit problème de syntaxe qui me fait m'arracher les cheveux.

    Alors voila, le but de mon code est de créer un nouveau classeur, de copier mes données de mon classeur d'origine puis de me les coller dans la feuille 1 du nouveau classeur.

     Voila, mon problème est qu'Excel me signale que la propriété n'est pas géré par cet objet quand je souhaite copier mes données.

    Si quelqu'un pouvait voir mon erreur dans mon code svp

    Option Explicit
    Option Base 1
    
    Private Sub sauvegarder()
        Dim ClassOrig As Workbook, ClassSave As Workbook
        Dim endline As Integer
        
        Set ClassOrig = ThisWorkbook
        
        Application.SheetsInNewWorkbook = 2
        Set ClassSave = Workbooks.Add
    
    'Copiage de donnees du classeur d'origine de la liste sur chantier
        Set Liste_Chantier = Workbooks("logiciel_commande_materiel.xlsm").Sheets(3)
            
        With Liste_Chantier
            endline = .Range("A" & Rows.Count).End(xlUp).Row
        End With
        
        With ClassOrig
            .Sheets(3).Range(.Cells(1, 1), .Cells(endline, 2)).Select 'problème ici
            Selection.Copy
        End With
        
        
    'Collage des donnees
        With ClassSave
            .Sheets(1).Cells(1, 1).Paste
        End With
        
        
    End Sub
    

    -
    Edité par lackam913 26 juillet 2018 à 11:50:33

    • Partager sur Facebook
    • Partager sur Twitter
      26 juillet 2018 à 12:24:42

      Bonjour,

      Tu mélanges la collection d'objet "cells" et "range" pour ta selection d'élements...

      Pourquoi n'utilises tu pas l'un ou l'autre mais pas les deux ?

      Par exemple tu pourrais remplacer ces lignes : 

       With ClassOrig
              .Sheets(3).Range(.Cells(1, 1), .Cells(endline, 2)).Select 'problème ici
              Selection.Copy
          End With

      par ces lignes : 

      ClassOrig.range("A1:B" & endline).copy

      Peux tu stp tester si cela fonctionne ?


      • Partager sur Facebook
      • Partager sur Twitter
        26 juillet 2018 à 13:48:46

        Salut,

        Je rejoins l'avis de mattou2812 sur la solution.

        J'ai juste un commentaire sur la lisibilité du code, utiliser les With pour faire une seule opération alourdit la lecture, autant faire l'opération directement sur l'objet (ça fait partie de la solution de mattou en fait mais je préfère préciser ^^).

        • Partager sur Facebook
        • Partager sur Twitter
          1 août 2018 à 14:20:03


          Bonjour,

          Pardon de répondre une semaine plus tard mais je ne comprends pas. Quand je suis revenue consulter ma discussion, openclassroom ne m'avait pas affiché vos messages ce jour là (ni les jours suivants d'ailleurs).

          Du coup j'ai contourné le problème avec activesheet.Paste (même si je n'aime pas beaucoup cette écriture non plus).

          Voici mon code du coup retransformé pour ceuix qui serait dans le même problème (et encore dsl pour le temps mis pour mes réponses):

          Sub enregistrer()
              Dim ClassOrig As Workbook, ClassSave As Workbook
              Dim endline As Integer
              Dim filename
              
          
              
              Set ClassOrig = Workbooks("logiciel_commande_materiel.xlsm")
              
              Application.SheetsInNewWorkbook = 1
              Set ClassSave = Workbooks.Add
          
          'Copiage de donnees du classeur d'origine de la liste sur chantier
              Set Liste_Chantier = Workbooks("logiciel_commande_materiel.xlsm").Sheets(3)
                  
              With Liste_Chantier
                  endline = .Range("A" & Rows.Count).End(xlUp).Row
              End With
              
              Workbooks("logiciel_commande_materiel.xlsm").Sheets("liste_sur_chantier"). _
              Range(Feuil3.Cells(1, 1), Feuil3.Cells(endline, 2)).Copy
            
          'Collage des donnees de la liste sur chantier
              With ClassSave
                  With .Sheets(1).Columns("B:B")
                      .ColumnWidth = 100
                  End With
                  
                  With .Sheets(1).Columns("A:A")
                      .ColumnWidth = 30
                  End With
                  
                  With .Sheets(1)
                      .Name = "Liste sur chantier"
                  End With
                  
                  .Sheets(1).Cells(1, 1).copy
              End With
          • Partager sur Facebook
          • Partager sur Twitter

          Problème syntaxe dans fonction copier sosu VBA

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown