Macro copier-coller deplacer sur la droite si cellule pleine

Résolu
fagots Messages postés 96 Statut Membre -  
Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   -
Je recherche une macro pour copier la cellule A1 de la feuille 1 d'un classeur "macro" et la coller sur la feuille "résultat" en A1 du classeur "graph". Mais si celle-ci n'est pas vide décaler vers la droite etc.
Fagots

27 réponses

  • 1
  • 2
Résumé de la discussion

Une macro permet de copier A1 de feuille 1 d'un classeur source et de le coller sur A1 de la feuille 'résultat' du classeur 'graph', en décalant vers la droite si zone est occupée.
Des éléments clés de la solution incluent le comptage des cellules non vides de ligne 1 dans les fichiers source et cible, puis une boucle qui copie les valeurs manquantes vers la destination.
Par exemple, le code détermine nbvaso et nbvaci par CountA sur la ligne 1, puis, si nbvaci < nbvaso, copie les colonnes manquantes avec PasteSpecial xlPasteValues.
D'autres solutions évoquées suggèrent d'ajuster les noms de fichiers et d'adapter les feuilles, afin d'éviter les erreurs de référence et de faciliter l'extension.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Voici un exemple de procédure à adapter selon vos classeurs :
    Sub Importer_plage_A1()
    Dim objcible As Workbook, objsource As Workbook
    Dim cel As Variant, c As Long
    Set objsource = Workbooks(nomclassuersource.xlsm)
    Set objcible = Workbooks(nomclassuercible.xlsx)
    Application.ScreenUpdating = False
    nucol = objcible.Sheets(1).Cells(1,Rows(1).Cells.Count).End(xlUp).Column objsource.Sheets(1).Range("A1 ").copy Destination := objcible.Sheets(1).Cells(1,nucol)
    Set objcible = Nothing
    Set objsource = Nothing
    Application.ScreenUpdating = True
    End Sub

    0
    1. fagots Messages postés 96 Statut Membre
       
      bonjour,
      l'argument
      " nucol = objcible.Sheets(1).Cells(1,Rows(1).Cells.Count).End(xlUp).Column objsource.Sheets(1).Range("A1 ").copy Destination := objcible.Sheets(1).Cells(1,nucol)"

      Ne fonctionne pas. Une fois coller la ligne est en rouge avec message erreur de compilation.
      J'ai bien mis les noms des deux fichiers.

      En tous cas merci de vous pencher sur ma question.
      Salutation
      0
  2. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour ,
    Ce doit-être 2 lignes de code :
    nucol = objcible.Sheets(1).Cells(1,Rows(1).Cells.Count).End(xlUp).Column
    
    objsource.Sheets(1).Range("A1 ").copy Destination := objcible.Sheets(1).Cells(1,nucol)

    0
  3. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Une petite erreur de code m'a échappée, la ligne correcte pour la variable [nucol]:
    nucol = objcible.Sheets(1).Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column + 1

    0
    1. fagots Messages postés 96 Statut Membre
       
      bonjour,
      Lorsque je lance la macro celle-ci s'arrête à:
      Set objsource = Workbooks(fichier2.xlsm)
      le déboguer surligne la ligne en jaune????
      Salutation
      0
  4. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    C'est normal le nom du classeur doit être écrit entre guillemet (je pensais que vous le saviez, désolé):
    Set objsource = Workbooks("fichier2.xlsm")

    Note : il va de soi que les 2 classeurs sont ouverts.

    Salutations.
    Le Pingou
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. fagots Messages postés 96 Statut Membre
     
    Ok merci tous cela fonctionne parfaitement.
    Salutations
    0
  7. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Merci, de rien.
    0
  8. fagots Messages postés 96 Statut Membre
     
    Bonjour,
    Derniere petite question dans la macro donnée, comment faire pour coller uniquement la valeur de la cellule A1?
    merci de votre aide
    0
  9. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Remplacer cette ligne
    objsource.Sheets(1).Range("A1 ").copy Destination := objcible.Sheets(1).Cells(1,nucol)
    Par ces 2 lignes :
    objsource.Sheets(1).Range("A1 ").Copy 
    objcible.Sheets(1).Cells(1,nucol).PasteSpecial xlPasteValues

    0
    1. fagots Messages postés 96 Statut Membre
       
      ok et encore merci
      0
    2. fagots Messages postés 96 Statut Membre
       
      Dans le cas ou j'ai un fichier source "fichier1" et que dans ce fichier la ou les cellules à copier s'acrément elles aussi en collone +1.
      Exmple. Mois janvier résultat à prendre cellule A1, mois de février résultat à prendre en cellule A2 etc. peut-on faire, si oui comment l'ajouter dans la macro excitante du dessus?
      Merci de votre aide
      0
  10. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Dans ce cas il faut modifier la manière de travaillé de la procédure.
    Comme j'ai l'impression qu'après chaque réponse il y a une nouvelle question, alors je vais attendre un petit peu pour la réponse... !

    0
    1. fagots Messages postés 96 Statut Membre
       
      non c'est bien la dernière question en rapport à ma 1ère question.
      Salutations
      0
  11. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Une question, comment je fais pour savoir quelle cellule de la ligne 1 je dois copier/coller sur l'autre classeur ?
    Si vous dite la dernière, alors comment savoir si cela n'a pas déjà été réalisé ?

    0
    1. fagots Messages postés 96 Statut Membre
       
      Bonjour,
      C'est bien la dernière cellule de la ligne 1 du classeur source à copier/coller sur le classeur cible.
      Effectivement nous pouvons nous poser la question de savoir si cela n'a pas déjà été réalisé.
      Cela viendra dans ma gestion de mise à jour de mon classeur cible. J'identifie dan mon fichier cible les dates de mise à jour.
      Les résultats sont au mois. Donc, si je fais ma manip deux cela va me copier /coller deux fois les même chiffres sur deux mois différents.
      D'ou l'importance pour moi d'avoir une gestion rigoureuse de l'alimentation de mon fichier cible par le fichier source.
      Salutations
      fagots
      0
  12. foo
     
    bonjour
    Tien pour jouer avec une boucle

    Sub testColonne()
    Feuil1.Select
    For L = 2 To 29
    Range("A" & L).Copy
    Nucol = Feuil2.Cells(L, Columns.Count).End(xlToLeft).Column + 1
    Feuil2.Cells(L, Nucol).PasteSpecial xlPasteValues
    Next
    End Sub

    A+
    Maurice
    0
    1. fagots Messages postés 96 Statut Membre
       
      Bonjour,
      La macro me copie uniquement le premier colonne de la feuil1.
      Je voudrais prendre sur la feuil1 toujours la dernière colonne et la copier sur la feuil2.
      La partie coller fonctionne puise qu'elle acrémente toujours la derniére colonne vide.
      Salutations
      fagots
      0
  13. foo
     
    Bonjour

    une petite modife

    Sub testColonne()
    Feuil1.Select
    For L = 2 To 29
    Col = Cells(L, Columns.Count).End(xlToLeft).Column
    Cells(L, Col).Copy
    Nucol = Feuil2.Cells(L, Columns.Count).End(xlToLeft).Column + 1
    Feuil2.Cells(L, Nucol).PasteSpecial xlPasteValues
    Next
    End Sub

    A+
    Maurice
    0
    1. fagots Messages postés 96 Statut Membre
       
      bonjour,
      Le résultat est toujours le même. C'est toujuors la priemère colonne qui est copié.
      Salutations
      fagots
      0
  14. foo
     
    re
    donne au moin un modele car ca marche chez moi

    A+

    Maurice
    0
  15. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour fagots,
    Merci pour l'explication (message 17 de 09 :.53)
    Je regarde le problème en fin de journée et la réponse suivra.

    0
  16. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour fagots,
    Question intermédiaire : est-ce que les valeurs de la ligne 1 du fichier source sont identiques à la ligne 1 du fichier source ... ?
    Note : pourquoi pas de titre de colonne en ligne 1 et le début des données en ligne 2 ?

    0
    1. fagots Messages postés 96 Statut Membre
       
      Bonjour Le Pingou
      Les valeurs du fichiers source sont à copier toujours en collage spécial valeur. Oui les valeurs sont les mêmes.
      Dans mon fichier sources ,il existe bien des titres de colonne ainsi que dans le fichier cible.
      Mais elles ne sont pas identique.
      Fichier construit par entité national qui regroupe plusieurs site et plusieurs données qui ne me sont pas toutes nécessaire pour mon fichier cible.
      En espérant avoir été clair.
      Salutations
      fagots
      0
  17. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Merci c'est parfait.
    Un dernier petit détail, il y-a-t-il des formules dans la ligne 1 du fichier source et si oui sur combien de colonnes?

    Salutations.
    Le Pingou
    0
    1. fagots Messages postés 96 Statut Membre
       
      Bonjour,
      Non il n'y a pas de formule dans le fichier source.
      Salutations
      fagots
      0
  18. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Ma proposition, copie et colle le(s) valeur(s) vers le fichier cible.
    Merci d'adapter les noms selon vos besoins.
    La procédure :
    Sub Importer_valeur_cellule()
    Dim objcible As Workbook, objsource As Workbook
    Dim c As interger, nbvaci As Integer, nbvaso As Integer
    Set objsource = Workbooks("Classeur11.xlsm")
    Set objcible = Workbooks("classeur12.xlsx")
    Application.ScreenUpdating = False
    ' contrôler si nouvelle valeur sur classeur source
    nbvaso = WorksheetFunction.CountA(objsource.Sheets("Feuil1").Rows(1))
    nbvaci = WorksheetFunction.CountA(objcible.Sheets("Feuil1").Rows(1))
    If nbvaci < nbvaso Then
        For c = 1 To (nbvaso - nbvaci)
            objsource.Sheets("Feuil1").Cells(1, nbvaci + c).Copy
            objcible.Sheets("Feuil1").Cells(1, nbvaci + c).PasteSpecial xlPasteValues
        Next c
    End If
    Set objcible = Nothing
    Set objsource = Nothing
    Application.ScreenUpdating = True
    End Sub 

    0
    1. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
       
      Bonjour,
      Attention il y a une petite erreur d'écriture du mot Integer dans cette ligne :
      Dim c As interger
      Doit être :
      Dim c As Integer
      Salutations.
      Le Pingou
      0
    2. fagots Messages postés 96 Statut Membre
       
      Bonjour,
      J'ai bien fais la correction, mais la macro tourne et elle ne fonctionne pas car elle ne copie rien. Question pourquoi la source est-elle en xlsm?

      Je sais que cela veut dire classeur prenant en charge les macro.Pour moi c'est mon fichier cible qui a en charge la macro.
      J'ai des essai comme indiqué dans la procédure proposée et fait inversement des fichiers sources et cible.
      Et toujours rien.
      Cordialement
      fagots
      0
  19. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    C'est étonnant, j'ai testé et cela fonctionne parfaitement.
    Pouvez-vous me mettre une copie de la macro telle que vous l'utilisez... !

    0
    1. fagots Messages postés 96 Statut Membre
       
      bonjour,
      Voici la macro:

      Sub Importer_valeur_cellule()
      Dim objcible As Workbook, objsource As Workbook
      Dim c As Integer, nbvaci As Integer, nbvaso As Integer
      Set objsource = Workbooks("fichier2.xlsm")
      Set objcible = Workbooks("fichier1.xlsx")
      Application.ScreenUpdating = False
      ' contrôler si nouvelle valeur sur classeur source
      nbvaso = WorksheetFunction.CountA(objsource.Sheets("Feuil2").Rows(1))
      nbvaci = WorksheetFunction.CountA(objcible.Sheets("Feuil1").Rows(1))
      If nbvaci < nbvaso Then
      For c = 1 To (nbvaso - nbvaci)
      objsource.Sheets("Feuil2").Cells(1, nbvaci + c).Copy
      objcible.Sheets("feuil1 ").Cells(1, nbvaci + c).PasteSpecial xlPasteValues
      Next c
      End If
      Set objcible = Nothing
      Set objsource = Nothing
      Application.ScreenUpdating = True
      End Sub

      Salutations
      fagots
      0
  20. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    De cette manière je pense que ce sera bon:
    Sub Importer_valeur_cellule()
    Dim objcible As Workbook, objsource As Workbook
    Dim shci As Object, shso As Object
    Dim c As Integer, nbvaci As Integer, nbvaso As Integer
    Set objsource = Workbooks("fichier1.xlsx")
    Set objcible = Workbooks("fichier2.xlsm")
    Set shso = objsource.Sheets("Feuil1")
    Set shci = objcible.Sheets("Feuil2")
    
    Application.ScreenUpdating = False
    ' contrôler si nouvelle valeur sur classeur source
    nbvaso = WorksheetFunction.CountA(shso.Rows(1))
    nbvaci = WorksheetFunction.CountA(shci.Rows(1))
    If nbvaci < nbvaso Then
     For c = 1 To (nbvaso - nbvaci)
     shso.Cells(1, nbvaci + c).Copy
     shsi.Cells(1, nbvaci + c).PasteSpecial xlPasteValues
     Next c
    End If
    Set objcible = Nothing: Set shci = Nothing
    Set objsource = Nothing: Set shso = Nothing
    Application.ScreenUpdating = True
    End Sub 
    0
    1. fagots Messages postés 96 Statut Membre
       
      Bonjour,
      Toujours pareil, la macro tourne me rien n'est copier dans mon fichier cible.
      J'ai copier la macro sans rien toucher car vous avez bien nommé les fichier source et cible.
      Salutations
      fagots
      0
  21. Le Pingou Messages postés 12274 Date d'inscription   Statut Contributeur Dernière intervention   1 476
     
    Bonjour,
    Pouvez-vous me mettre :
    Fichier source c'est celui ou vous avez les nouvelles valeurs pour votre classeur cible
    - Nom du classeur
    - Nom de la feuille
    - Numéro de la ligne pour les données
    Idem pour le classeur cible qui est celui ou vous aurez la procédure.

    0
    1. fagots Messages postés 96 Statut Membre
       
      Bonjour,
      SOURCE :
      nom classeur fichier1xlsx
      feuil1
      ligne3
      CIBLE:
      nom classeur fichier2xlsm
      feuil2
      ligne3

      Salutations
      fagots
      0
  • 1
  • 2