Macro copier-coller deplacer sur la droite si cellule pleine [Résolu/Fermé]

Signaler
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016
-
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
-
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

Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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)

Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

Ok merci tous cela fonctionne parfaitement.
Salutations
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
Merci, de rien.
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

Bonjour,
Derniere petite question dans la macro donnée, comment faire pour coller uniquement la valeur de la cellule A1?
merci de votre aide
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

ok et encore merci
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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... !

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

non c'est bien la dernière question en rapport à ma 1ère question.
Salutations
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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é ?

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
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
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
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
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

bonjour,
Le résultat est toujours le même. C'est toujuors la priemère colonne qui est copié.
Salutations
fagots
re
donne au moin un modele car ca marche chez moi

A+

Maurice
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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.

Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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 ?

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

Bonjour,
Non il n'y a pas de formule dans le fichier source.
Salutations
fagots
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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 

Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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... !

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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 
Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

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
Messages postés
10190
Date d'inscription
mercredi 11 août 2004
Statut
Contributeur
Dernière intervention
23 juillet 2021
1 165
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.

Messages postés
92
Date d'inscription
mercredi 14 août 2013
Statut
Membre
Dernière intervention
26 avril 2016

Bonjour,
SOURCE :
nom classeur fichier1xlsx
feuil1
ligne3
CIBLE:
nom classeur fichier2xlsm
feuil2
ligne3

Salutations
fagots