Copier valeur dans la première cellule vide dune ligne [Résolu/Fermé]

Signaler
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
-
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
-
Bonjour,

Une fois de plus je dois faire appel à votre savoir faire !

Je voudrai savoir comment obtenir une macro qui me fais un couper coller des valeurs de la feuil2 à la feuil1 (jusque là rien de bien compliqué), cependant ces valeurs iront chacune dans une ligne spécifique à la suite des autres valeurs que j'aurais déjà importé grâce à cette macro.

Exemple : en feuil2 cellule D8 j'ai un nom que j'aimerai importer à la suite des autres noms feuil1 ligne14


Merci de votre aide

16 réponses

Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
mon énoncé n'est pas clair ?
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
SVP
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Salut,

Effectivement pas très clair, mais pour coller à la suite sur la feuille nommée
Feuil1 en prenant référence sur la colonne A

Sheets("Feuil1").Activate 'sélectionne la feuille du transfert
Range("A65000").End(xlUp).Offset(1).Select 'recherche la première cellule vide
ActiveSheet.Paste 'copie les données
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
Bonjour et merci de ton aide

je vais essayer d'être plus clair,

Ce que je recherche c'est copier la cellule D8 de la feuil2 en cellule B14 de la feuil1.
Puis à chaque fois que j'execute la macro j'aimerai quelle me colle la valeur de D8 feuil2 en C14, puis D14, puis E14... de la feuil1.

la macro doit copier la valeur de D8 feuil2 et la coller en feuil1 ligne 14 dans la première cellule non vide.

désolé c'est jamais évident d'expliquer son problème.

Merci
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

Si tu utilises un bouton ActiveX, on peut rechercher depuis la colonne DZ ligne 14 la première cellule non vide et on colle la valeur de la Feuil2

Private Sub CommandButton1_Click()
Sheets("Feuil1").Range("DZ14").End(xlToLeft)(1, 2) = Sheets("Feuil2").Range("D8")
End Sub

Si c'est ce que tu cherches on peut simplifier la ligne, tu nommes la cellule cible D8 Feuil2 par exemple nommée titi

Sheets("Feuil1").[DZ14].End(xlToLeft)(1, 2) = [titi]

mais si tu nommes également la cellule de départ du balayage Feuil1 ligne 14 dans l'exemple DZ14 mais pourrait être la cellule de la dernière colonne XFD14 et nommée toto

la ligne de code se résume à

[toto].End(xlToLeft)(1, 2) = [titi]

il faudrait peut être effacer la cellule Sheets("Feuil2").Range("D8") après l'exécution de la macro pour éviter le collage en doublon
en ajoutant cette ligne
Sheets("Feuil2").Range("D8") .clearcontents
ou si cellule nommée
[titi].clearcontents



A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
Re,

J'ai essayé ton code je n'arrive pas à le faire correctement fonctionner mais le peu que j'ai réussi me prouve que c'est la solution que je cherche.

Je n'arrive pas à faire le lien entre copier la valeur et aller la coller
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

regarde le fichier joint

https://www.cjoint.com/c/CDwkxthTRJK
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
Je regarderai ce soir je peux pas l'ouvrir pour visualiser le code ici.
Je te retiens au courant, merci d'avance
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

Pas de problème je serais la mais assez tard dans la soirée
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
Je vais prendre un peu d'avance en attendant ce soir, dans la formule :

Sheets("Feuil1").Range("DZ14").End(xlToLeft)(1, 2) = Sheets("Feuil2").Range("D8")

qu'est ce qu'il faut rajouter pour garder la mise en forme de la cellule source ?

J'ai essayé de le faire avec l'enregistreur de macro puis de rajouter le code à la suite mais ca ne fonctionne pas.
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

dans ton module Visual Basic colle ce code et associe le à un bouton

sub test ()
Sheets("Feuil1").Range("DZ14").End(xlToLeft)(1, 2) = Sheets("Feuil2").Range("D8")
end if
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
ok ca fonctionne mais admettons que ma case en D8 a une mise en forme spécifique, j'aimerais garder cette mise en forme lorsque je la colle en Feuil1, je dois rajouter un bout de code nn ? je n'arrive pas à le faire avec l'enregistreur de macro.

Merci encore
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

Voila le code

Sheets("Feuil2").Range("D8").Copy
Sheets("Feuil1").Range("DZ14").End(xlToLeft)(1, 2).Select
ActiveSheet.Paste
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
ok c'est bien ce qui me semblait on doit repasser avec le code copy, mais je retombe sur le même problème que j'avais, j'ai une erreur de macro à la deuxième ligne alors que je ne vois pas d'erreur.

Tu as fais un essai toi ? ca fonctionne ?
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
J'ai trouvé un moyen pour que ca fonctionne mais ça rajoute des lignes pour rien je pense :

Sheets("Feuil2").Range("D8").Copy
Sheets("Feuil1").Select
Sheets("Feuil1").Range("DZ14").End(xlToLeft)(1, 2).Select
ActiveSheet.Paste
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

Contrôle bien le nom de ton onglet, pas d'intervalle, il doit y avoir un problème à ce niveau différence de nom
complète ton code comme ceci

Sheets("Feuil2").Range("D8").Copy
Sheets("Feuil1").Activate
Sheets("Feuil1").Range("DZ14").End(xlToLeft)(1, 2).Select
ActiveSheet.Paste
Application.CutCopyMode = False


mais si la commande se fait depuis la Feuil1 tu n'as pas besoin de cette ligne

Sheets("Feuil1").Activate

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
Suite à toutes tes réponse j'ai réussi à faire ce que je souhaitai, le dernier point consiste si tu à le temps à allèger la macro, je pense que quelques lignes peuvent remplacer mes 100 lignes (j'ai recopier 26 fois le meme code....)

je te mets le lien de mon fichier (modifié pour des raison de confidentialité)

https://www.cjoint.com/?3DwrAdgr9hn

Merci encore pour ton aide et ta disponibilité
Messages postés
17297
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
30 octobre 2020
4 350
Re,

ce qui pose problème sont les formats sinon chaque module de 4 lignes pourrait se limiter à 1 ligne,
on pourrait utiliser la syntaxe With ou faire une boucle ce qui limiterait chaque module à 2 lignes, je regarde mais tard dans la soirée ce qui peut être fait
Messages postés
203
Date d'inscription
lundi 21 mars 2011
Statut
Membre
Dernière intervention
8 janvier 2014
10
ok merci beaucoup