Copier les valeurs d'une feuille avec vba
marina
-
Ivan-hoe Messages postés 433 Date d'inscription Statut Membre Dernière intervention -
Ivan-hoe Messages postés 433 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je suis débutante avec vba et j'aurai besoin de votre aide. Je voudrai à partir de valeurs contenues dans une feuille excel pouvoir les recopier en cliquant sur un bouton valider.
Merci de votre aide
je suis débutante avec vba et j'aurai besoin de votre aide. Je voudrai à partir de valeurs contenues dans une feuille excel pouvoir les recopier en cliquant sur un bouton valider.
Merci de votre aide
A voir également:
- Copier les valeurs d'une feuille avec vba
- Comment copier une vidéo youtube - Guide
- Super copier - Télécharger - Gestion de fichiers
- Comment faire un livret avec des feuilles a4 - Guide
- Bruler une feuille de laurier - Guide
- Comment supprimer une feuille sur word - Guide
13 réponses
Salut marina,
ta demande n'est vraiment pas très explicite, mais je suis sûr que tu peux t'en sortir par toi-même.
Même débutante en VBA, ce que tu peux faire pour commencer, c'est utiliser l'enregistrement automatique de macros :
Outils/Macro/Nouvelle Macro / donne un nom puis OK
A partir de là, toutes les opérations que tu réalises manuellement sont enregistrées en VBA.
Tu peux donc faire manuellement tes copies de cellules, puis cliquer sur "Arrêter l'enregistrement de la macro".
Ainsi, tu auras fait le plus gros du boulot.
Retrouve ensuite ta macro : Outils/Macro/ nom de ta macro puis Modifier.
Elle devrait commencer par
Tu remplaces cette ligne par
où NomduBouton est le nom du bouton Valider que tu auras créé.
S'il y a alors des choses qui ne marchent pas ou que tu ne comprends pas, reviens donc vers nous.
A suivre...
ta demande n'est vraiment pas très explicite, mais je suis sûr que tu peux t'en sortir par toi-même.
Même débutante en VBA, ce que tu peux faire pour commencer, c'est utiliser l'enregistrement automatique de macros :
Outils/Macro/Nouvelle Macro / donne un nom puis OK
A partir de là, toutes les opérations que tu réalises manuellement sont enregistrées en VBA.
Tu peux donc faire manuellement tes copies de cellules, puis cliquer sur "Arrêter l'enregistrement de la macro".
Ainsi, tu auras fait le plus gros du boulot.
Retrouve ensuite ta macro : Outils/Macro/ nom de ta macro puis Modifier.
Elle devrait commencer par
Sub Macro1()
Tu remplaces cette ligne par
Private Sub NomduBouton_Click()
où NomduBouton est le nom du bouton Valider que tu auras créé.
S'il y a alors des choses qui ne marchent pas ou que tu ne comprends pas, reviens donc vers nous.
A suivre...
Bon, maintenant que tu as une base, tu peux :
1°-ré-expliquer clairement ce que tu veux faire
2°-copier ici la macro que tu utilises, afin qu'on voit ce qu'on doit y modifier.
A suivre...
1°-ré-expliquer clairement ce que tu veux faire
2°-copier ici la macro que tu utilises, afin qu'on voit ce qu'on doit y modifier.
A suivre...
Alors en fait je veux faire un programme pour gérer les stocks de fournitures administratives.
Dans une feuille les différents services de la clinique sélectionnent ce qu'ils ont besoin à l'aide d'une liste de choix pour les produits, la quatité et le service demandeur comme ci-dessous par exmple.
Date 23/06/08
service ambulatoire
Produit 10
Quantité + 15
Du coup à chaque fois que je clique sur le bouton valider, ces données vont se recopier dans une autre feuille "commandes". Ces valeurs vont se recopier su la première ligne, et je voudrais qu'à chaque fois qu'on clique sur valider, les données se recopient les unes après les autres sans se remplacer.
Voici ma macro
Sub saisieservices()
'
' saisieservices Macro
' Macro enregistrée le 23/06/2008 par Marina
'
'
Range("B2").Select
Selection.Copy
Sheets("validation commandes").Select
Range("A3").Select
ActiveSheet.Paste
Sheets("saisie services").Select
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("validation commandes").Select
Range("B3").Select
ActiveSheet.Paste
Sheets("saisie services").Select
Range("B4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("validation commandes").Select
Range("C3").Select
ActiveSheet.Paste
Sheets("saisie services").Select
Range("B5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("validation commandes").Select
Range("D3").Select
ActiveSheet.Paste
End Sub
Merci encore
Dans une feuille les différents services de la clinique sélectionnent ce qu'ils ont besoin à l'aide d'une liste de choix pour les produits, la quatité et le service demandeur comme ci-dessous par exmple.
Date 23/06/08
service ambulatoire
Produit 10
Quantité + 15
Du coup à chaque fois que je clique sur le bouton valider, ces données vont se recopier dans une autre feuille "commandes". Ces valeurs vont se recopier su la première ligne, et je voudrais qu'à chaque fois qu'on clique sur valider, les données se recopient les unes après les autres sans se remplacer.
Voici ma macro
Sub saisieservices()
'
' saisieservices Macro
' Macro enregistrée le 23/06/2008 par Marina
'
'
Range("B2").Select
Selection.Copy
Sheets("validation commandes").Select
Range("A3").Select
ActiveSheet.Paste
Sheets("saisie services").Select
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("validation commandes").Select
Range("B3").Select
ActiveSheet.Paste
Sheets("saisie services").Select
Range("B4").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("validation commandes").Select
Range("C3").Select
ActiveSheet.Paste
Sheets("saisie services").Select
Range("B5").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("validation commandes").Select
Range("D3").Select
ActiveSheet.Paste
End Sub
Merci encore
D'abord, on va simplifier un peu tout ça.
Connais-tu le collage spécial "transposé" ? tu copies une colonne, tu fais clic droit/collage spécial, tu sélectionnes l'option "Transposé" et ça te colle tes données... en ligne !!
ça va nous permettre de tout coller d'un coup au lieu de copier/coller chaque cellule.
Ensuite, pour coller à la suite, on va utiliser la propriété End(xldown) qui permet d'accéder à la dernière ligne vers le bas.
Je me permets donc de corriger ta macro comme suit :
Dis-moi si ça fonctionne bien chez toi.
A suivre...
Connais-tu le collage spécial "transposé" ? tu copies une colonne, tu fais clic droit/collage spécial, tu sélectionnes l'option "Transposé" et ça te colle tes données... en ligne !!
ça va nous permettre de tout coller d'un coup au lieu de copier/coller chaque cellule.
Ensuite, pour coller à la suite, on va utiliser la propriété End(xldown) qui permet d'accéder à la dernière ligne vers le bas.
Je me permets donc de corriger ta macro comme suit :
Sub marina() Sheets("saisie services").Select Range("B2:B5").Copy Sheets("validation commandes").Range("A2").End(xlDown).Offset(1, 0) _ .PasteSpecial Paste:=xlPasteValues, Transpose:=True Application.CutCopyMode = False Exit Sub
Dis-moi si ça fonctionne bien chez toi.
A suivre...
Ca me met erreur d'exécution 1004, débogage. Ca veut dire quoi? je suis désolée, je suis pas très douée!
Merci
Merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Dans ta feuille "Validation commandes", est-ce que tu as une ligne d'en-tête ? Je suppose qu'elle ne se trouve pas sur la ligne 2. Essaie donc plutôt le code ci-dessous (qui devrait marcher quelle que soit ta ligne d'en-tête).
Est-ce que c'est mieux ?
A suivre...
Sub marina() Sheets("saisie services").Select Range("B2:B5").Copy Sheets("validation commandes").Cells(Columns(1).Cells.Count, 1) _ .End(xlUp).Offset(1, 0) _ .PasteSpecial Paste:=xlPasteValues, Transpose:=True Application.CutCopyMode = False End Sub
Est-ce que c'est mieux ?
A suivre...
Est-ce-qu'il est possible de vous faire parvenir mon fichier excel pour que vous puissiez voir directement ce que je veux faire et ma macro?
Bien sûr !
tu peux le mettre sur www.cijoint.fr et nous transmettre ensuite le lien qui nous permettra d'aller le chercher.
Supprime avant ce que tu peux avoir de confidentiel dans ton fichier.
I.
tu peux le mettre sur www.cijoint.fr et nous transmettre ensuite le lien qui nous permettra d'aller le chercher.
Supprime avant ce que tu peux avoir de confidentiel dans ton fichier.
I.
Bonjour,
Voici comme prvu le lien où j'ai déposé mon travail avec les macros.
http://www.cijoint.fr/cjlink.php?file=cj200806/cijjx4HBvR.xls
En fait le passage de saisie services à validation commandes marche, mais la suite ne marche pas.
- Je souhaiterais pouvoir recopier les données de la feuiille validation des commandes uniquement pour celles qui sont validées, et pouvoir les trier par produits.
Merci,
Marina
Voici comme prvu le lien où j'ai déposé mon travail avec les macros.
http://www.cijoint.fr/cjlink.php?file=cj200806/cijjx4HBvR.xls
En fait le passage de saisie services à validation commandes marche, mais la suite ne marche pas.
- Je souhaiterais pouvoir recopier les données de la feuiille validation des commandes uniquement pour celles qui sont validées, et pouvoir les trier par produits.
Merci,
Marina
Salut Marina,
j'ai apporté quelques petites corrections à ta procédure "validation".
Pour le tri par produit, tu peux t'aider de l'enregistrement automatique de macros.
I.
j'ai apporté quelques petites corrections à ta procédure "validation".
Pour le tri par produit, tu peux t'aider de l'enregistrement automatique de macros.
I.
Sub validation_Corrige() Dim derlig As Integer, i As Integer Dim validée As String Application.ScreenUpdating = False With Sheets("commande") derlig = .Range("A65536").End(xlUp).Row + 1 End With Sheets("validation commandes").Activate For i = Sheets("validation commandes").Range("E65536").End(xlUp).Row To 2 Step -1 validée = LCase(Cells(i, 5).Value) If validée = "oui" Then With Sheets("commande") .Cells(derlig, 1) = Sheets("validation commandes").Cells(i, 3) .Cells(derlig, 2) = Sheets("validation commandes").Cells(i, 1) .Cells(derlig, 3) = Sheets("validation commandes").Cells(i, 4) derlig = derlig + 1 End With End If Next Sheets("commande").Activate Application.ScreenUpdating = True End Sub
Coucou, je suis à nouveau embêter avec vba..décidemment!
Alors en fait je voudrai copier les valeurs de trois colonnes les unes après les autres.
Par exemple, soit un tableau avec 3 colonnes (A,B,C) et X lignes. Je voudrai copier chaque ligne à l'aide du bouton valider,( là le tableau de saisie s'initialise), et la nouvelle saisie se recopie à la suite de l'autre.
En fait j'aimerai recopier toutes les valeurs en concervant les anciennes.
Merci
Alors en fait je voudrai copier les valeurs de trois colonnes les unes après les autres.
Par exemple, soit un tableau avec 3 colonnes (A,B,C) et X lignes. Je voudrai copier chaque ligne à l'aide du bouton valider,( là le tableau de saisie s'initialise), et la nouvelle saisie se recopie à la suite de l'autre.
En fait j'aimerai recopier toutes les valeurs en concervant les anciennes.
Merci
Bonjour Marina, ça faisait longtemps !
ta question, posée abruptement, reste assez obscure.
je te propose à nouveau de joindre un exmeple de ton fichier et d'exposer ta problématique plus clairement, en disant quelles feuilles sont concernées, quelles colonnes, quel tableau tu veux initialiser, quelles anciennes valeurs doivent être conservées, tout ça...
I.
ta question, posée abruptement, reste assez obscure.
je te propose à nouveau de joindre un exmeple de ton fichier et d'exposer ta problématique plus clairement, en disant quelles feuilles sont concernées, quelles colonnes, quel tableau tu veux initialiser, quelles anciennes valeurs doivent être conservées, tout ça...
I.
http://www.cijoint.fr/cjlink.php?file=cj200806/cijqOTCTVR.xls
J'aimerai recopier les valeurs de la feuille "saisie mvt nathalie" dans la feuille "suivi commandes nathalie" pour chaque saisie différente en conservant les anciennes valeurs.
J'espère que je suis plus claire.
Merci
J'aimerai recopier les valeurs de la feuille "saisie mvt nathalie" dans la feuille "suivi commandes nathalie" pour chaque saisie différente en conservant les anciennes valeurs.
J'espère que je suis plus claire.
Merci
Pour que les lignes se recopient bien les unes à la suite des autres, il faut corriger la ligne
en
ou bien
ça, tu aurais pu trouver toute seule, puisque tu l'as déjà utilisé dans ta procédure "transfert_base_service" !!
ligne = .Range("A3:C20").Row + 1
en
ligne = .Range("A3").End(xlDown).Row + 1
ou bien
ligne = .Range("A65536").End(xlUp).Row + 1
ça, tu aurais pu trouver toute seule, puisque tu l'as déjà utilisé dans ta procédure "transfert_base_service" !!
et pour recopier toutes les lignes une par une, on peut rajouter une boucle While...Wend
(ça tourne en boucle tant qu'on trouve une valeur dans la colonne B)
Note que tu aurais pu faire une macro avec un simple copier/coller d'une feuille à l'autre, c'était une autre solution.
Bonne continuation.
I.
(ça tourne en boucle tant qu'on trouve une valeur dans la colonne B)
Note que tu aurais pu faire une macro avec un simple copier/coller d'une feuille à l'autre, c'était une autre solution.
Sub saisie_commandes_nathalie_corrige() Sheets("saisie mvt nathalie").Activate Range("A5").Select While ActiveCell.Offset(0, 1).Value <> "" With Sheets("suivi commandes nathalie") ligne = .Range("A65536").End(xlUp).Row + 1 .Cells(ligne, 1) = ActiveCell.Value .Cells(ligne, 2) = ActiveCell.Offset(0, 1).Value .Cells(ligne, 3) = ActiveCell.Offset(0, 2).Value End With ActiveCell.Offset(0, 2).ClearContents ActiveCell.Offset(1, 0).Activate Wend Range(Range("B5"), Range("B5").End(xlDown)).ClearContents End Sub
Bonne continuation.
I.
Bonjour Ivan, j'aurai à nouveau besoin de ton aide..
Je voudrai pouvoir à partir de la feuille "récap livraison services" recopier les valeurs dans la feuille correspondante. Par exemple toute les commandes du service maternité dans la feuille "commandes maternité", les commandes du service chirurgie dans la feuille "commandes chirurgie", et ainsi de suite. J'ai réalisé une macro qui me met les données dans les bonnes feuilles mais le problème c'est qu'elle ne me les met pas au début du tableau et que quand je refais une saisie de commande par service, elle m'efface les anciennes données en les remplaçant par la nouvelle saisie.
Voici mon fichier avec ma macro.
http://www.cijoint.fr/cjlink.php?file=cj200807/cija3wFcub.xls
Je te remercie pour ton aide
Je voudrai pouvoir à partir de la feuille "récap livraison services" recopier les valeurs dans la feuille correspondante. Par exemple toute les commandes du service maternité dans la feuille "commandes maternité", les commandes du service chirurgie dans la feuille "commandes chirurgie", et ainsi de suite. J'ai réalisé une macro qui me met les données dans les bonnes feuilles mais le problème c'est qu'elle ne me les met pas au début du tableau et que quand je refais une saisie de commande par service, elle m'efface les anciennes données en les remplaçant par la nouvelle saisie.
Voici mon fichier avec ma macro.
http://www.cijoint.fr/cjlink.php?file=cj200807/cija3wFcub.xls
Je te remercie pour ton aide
Salut Marina,
tu fais une erreur sur le calcul de ta variable derlig. La variable derlig doit prendre le numéro de la dernière ligne de la feuille de commandes par service, et non pas de la feuille "récap livraison service".
Supprime la partie ci-dessous, qui ne sert à rien :
Et fais ton calcul de derlig dans chaque bloc If :
A suivre...
tu fais une erreur sur le calcul de ta variable derlig. La variable derlig doit prendre le numéro de la dernière ligne de la feuille de commandes par service, et non pas de la feuille "récap livraison service".
Supprime la partie ci-dessous, qui ne sert à rien :
With Sheets("récap livraison services") derlig = .Range("A65536").End(xlUp).Row + 1 End With
Et fais ton calcul de derlig dans chaque bloc If :
If Service = "maternité" Then With Sheets("commandes maternité") derlig = .Range("A65536").End(xlUp).Row + 1 .Cells(derlig, 1) = Sheets("récap livraison services").Cells(i, 1) .Cells(derlig, 2) = Sheets("récap livraison services").Cells(i, 3) .Cells(derlig, 3) = Sheets("récap livraison services").Cells(i, 4) End With End If
A suivre...
En tout cas merci pour tout