Macro copier-coller deplacer sur la droite si cellule pleine

Résolu/Fermé
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016 - Modifié par fagots le 15/08/2013 à 10:21
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 - 22 août 2013 à 17:42
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
A voir également:

27 réponses

Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 août 2013 à 11:48
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
16 août 2013 à 12:01
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 août 2013 à 14:08
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 août 2013 à 14:23
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
16 août 2013 à 14:44
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 16/08/2013 à 16:07
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
16 août 2013 à 16:13
Ok merci tous cela fonctionne parfaitement.
Salutations
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
16 août 2013 à 16:23
Merci, de rien.
0
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
19 août 2013 à 10:51
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
19 août 2013 à 11:06
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
19 août 2013 à 11:18
ok et encore merci
0
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
19 août 2013 à 13:25
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
19 août 2013 à 22:39
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
20 août 2013 à 07:00
non c'est bien la dernière question en rapport à ma 1ère question.
Salutations
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
20 août 2013 à 08:59
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
20 août 2013 à 09:53
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
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
20 août 2013 à 13:27
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
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
20 août 2013 à 13:41
bonjour,
Le résultat est toujours le même. C'est toujuors la priemère colonne qui est copié.
Salutations
fagots
0
re
donne au moin un modele car ca marche chez moi

A+

Maurice
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
20 août 2013 à 14:24
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
20 août 2013 à 15:10
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
20 août 2013 à 15:37
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
Modifié par Le Pingou le 20/08/2013 à 16:53
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
20 août 2013 à 17:06
Bonjour,
Non il n'y a pas de formule dans le fichier source.
Salutations
fagots
0
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
20 août 2013 à 20:50
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
20 août 2013 à 22:20
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
21 août 2013 à 10:15
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
21 août 2013 à 10:57
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
21 août 2013 à 11:36
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
21 août 2013 à 16:35
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
21 août 2013 à 16:50
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
Le Pingou Messages postés 12035 Date d'inscription mercredi 11 août 2004 Statut Contributeur Dernière intervention 1 avril 2024 1 425
21 août 2013 à 17:49
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
fagots Messages postés 92 Date d'inscription mercredi 14 août 2013 Statut Membre Dernière intervention 26 avril 2016
21 août 2013 à 18:39
Bonjour,
SOURCE :
nom classeur fichier1xlsx
feuil1
ligne3
CIBLE:
nom classeur fichier2xlsm
feuil2
ligne3

Salutations
fagots
0