Copier les valeurs d'une feuille avec vba

marina -  
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
A voir également:

13 réponses

Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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
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...
0
marina
 
C'est impécable, je te remercie ça marche. cependant, j'aurai voulu changer de ligne pour chaque saisie différente (à chaque fois que je clique sur le bouton) pour pouvoir collecter toutes les commandes effectuées.
En tout cas merci pour tout
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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...
0
marina
 
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
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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 :
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...
0
marina
 
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
0

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

Posez votre question
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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).
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...
0
marina
 
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?
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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.
0
marina
 
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
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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.
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
0
marina
 
Ok, je te remercie pour ton aide. Je crois que j'ai terminé de t'embêter pour l'instant.
Merci encore.
0
marina
 
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
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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.
0
marina
 
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
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
Pour que les lignes se recopient bien les unes à la suite des autres, il faut corriger la ligne
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" !!
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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.
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.
0
marina
 
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
0
Ivan-hoe Messages postés 433 Date d'inscription   Statut Membre Dernière intervention   309
 
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 :
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...
0