Copy

Résolu
emmjacq -  
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour,

Voilà, je suis plus que débutant en vba et je souhaiterais (fichier excel de gestion commandes/stocks) pouvoir copier une ligne de la feuil1 (ligne que je viens de taper) vers la feuille stocks après validation par userform.
Voilà ce que j'ai tapé ...

Private Sub OptionButton3_Click()
If Controls("OptionButton3").Value = True Then
Rows(Worksheets.Cells(.Rows.Count, 1).End(xlUp).Row).Copy _
Destination:=Rows(Sheets("feuil1").UsedRange.Rows.Count) + 1
End If
Unload UserForm4

et ça plante...lol...
Please help me!!!
A voir également:

10 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Bonjour,
On va y aller par étape pour que tu comprennes bien.

If Controls("OptionButton3").Value = True Then
Ce n'est pas une erreur en soit, mais une simplification que tu peux te permettre : le "Controls" est ici superflu. VBA, lorsque tu inscrit "OptionButton3 dans ton code, sait de quoi tu parles. A remplacer donc par :
If OptionButton3.Value = True Then

Rows(Worksheets.Cells(.Rows.Count, 1).End(xlUp).Row).Copy _ 
Ici VBA se demande : "C'est quoi Worksheets"? Je connais Worksheets("Feuil1"), Worksheets("Feuil2"), Sheets("Feuil3") voire Sheets(4), mais Worksheet tout seul...
Destination:=Rows(Sheets("feuil1").UsedRange.Rows.Count) + 1
Idem, le "Destination:=" est superflu.

De plus, essaie d'utiliser :
- toujours la même syntaxe (ici pourquoi utiliser .Rows.Count pour le copy et UsedRange.Rows.Count pour le Paste sans raison bien précise? )
- des variables ! Elles sont faites pour cela et ne sont pas "mangeuses" de mémoire.

Pour faire la même procédure, j'aurais utilisé 2 variables de type Long pour déterminer quels sont les numéros des dernières lignes de mes deux feuilles et j'aurais copié/collé les lignes grâce à ces numéros :
Dim DernLignFeuil2 As Long, DernLignFeuil1 As Long
If OptionButton3.Value = True Then
    DernLignFeuil2 = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
    DernLignFeuil1 = Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1
    Sheets("Feuil2").Rows(DernLignFeuil2).Copy Sheets("Feuil1").Rows(DernLignFeuil1)
End If

C'est une procédure qui se veux explicite. Lorsque, dans 3 ans et demi, tu reviendras sur ton code, il te semblera clair.
Mais bon, il est vrai que tu peux facilement le remplacer par :
If OptionButton3.Value = True Then
    Sheets("Feuil2").Rows(Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row).Copy Sheets("Feuil1").Rows(Sheets("Feuil1").Range("A" & Rows.Count).End(xlUp).Row + 1)
End If

Je n'ai pas testé ces codes, alors testes et dis nous...
0
emmjacq
 
Encore moi....
Toujours pas la solution après de multiples essais et tentatives...
Pour complèter mon problème :
*tableau source : début en ligne B11 fin en ligne B39
*tableau cible : début en ligne D63 fin en ligne D382

Avec le programme proposé (merci encore pour la rapidité) la ligne copiée n'est pas la bonne et pas a la bonne cible...sniff...
Alors si vous pouviez m'aider...
Merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Alors dis moi tout :
Nom de la feuille source, (exemple : Feuil1)
Nom de la feuille destination, (exemple : Feuil3)
Emplacement de la plage à copier (exemple : Range("B39:G39"))
Emplacement de la plage ou coller... (exemple : Range("D382:I382"))
0
emmjacq
 
Merci...
Nom de la feuille source :Feuil1
Nom de la feuille destination :Pièces en attente de classement
Emplacement de la plage à copier : Range("B11:E11"))
Emplacement de la plage ou coller : Range("D13:G13"))

Voilà...
Merci
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
If OptionButton3.Value = True Then 
    Sheets("Feuil1").Range("B11:E11").Copy Sheets("Pièces en attente de classement ").Range("D13") 
End If

!!! copiera systématiquement la ligne 11 en ligne 13
si tu le relance x fois, les x fois il va copier la ligne 11 et écraser les données en ligne 13

Rem : il y a toujours la possibilité d'insérer une ligne par VBA pour ne pas écraser la ligne 13....
0
emmjacq
 
Encore Merci..
Mais ce que je souhaiterais c'est que je puisse copier ensuite la ligne 12 en ligne 14 etc... etc...
Sachant que feuil1 est un bon de commande et que source est mon stock en attente.
Mon bon de commande revient à ligne 11 régulièrement mais au contraire mon stock doit tenir compte des lignes ajoutées.
Ton premier exemple était plus en phase avec ma recherche.
1000 excuses pour la méprise.
@+
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Que l'on soit bien clair......
Ce que tu fais :
1- tu complète x lignes de la feuille "Feuil1" à partir de la ligne 11 jusqu'à la ... dernière ligne saisie,
2- tu cliques sur ton OptionButton3 pour couper ces lignes et les coller en feuille ("Pièces en attente de classement" après la dernière ligne saisie.

C'est bien ça?
Sicépaçadile!! (Si c'est pas ça, dis le...)
0

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

Posez votre question
emmjacq
 
Exactement...
Ma feuil1 est mon bon de commande qui alimente mon stock.
Mon bon de commande contient au maximum 15 lignes.
Mon stock lui evoluera à chaque ligne ajoutée par MES bons de commande.
@+
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Hum...
Tu crois pas que tu aurais du commencer par expliquer ça????

Bon! Puisque tu as l'air nouveau par ici, sympa et poli, essaye ceci (je n'ai pas testé!) :

Dim DrLig As Long
If OptionButton3.Value = True Then 
    With Sheets("Pièces en attente de classement ")
        DrLig = .Range("D" & Rows.Count).End(xlUp).Row + 1
    End With
    With Sheets("Feuil1")
        .Range("B11:E26").Copy Sheets("Pièces en attente de classement ").Range("D" & DrLig)
       ' .Range("B11:E26").Clear 'si tu veux effacer les données copiées, enlève l'apostrophe 
    End With 
End If
0
emmjacq
 
je teste et je vois....

En attendant merci pour ton aide et désolé pour mon manque d'explications pour la compréhention...
J'y travaille...
@+
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Pas de souci.
Teste le code dans tous les sens et reviens nous dire...
A+
0
emmjacq
 
Encore moi...
Bon la solution est presque là...
Le petit souci...si je peux me permettre, c'est que je commence à remplir montableau source par le bas....
Pas trop trop... ne pas confondre avec trot trot (pour ceux qui ont des enfants...)
Merci de votre aide
@+
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Tu commences en B26 pour finir quelque part entre B26 et B11?
La colonne B, à ce moment là, est -elle systématiquement complétée? Pour toutes ces lignes (de B26 à B24 par exemple)?
0
emmjacq
 
Alors...
mon bon de commande commence en ligne (B11,E11) et se termine en ligne (B26,E26).
Mais je ne renseigne pas systématiquement ttes les lignes... Il peut avoir que 1 ligne...
Mon stock commence en ligne (D13,G13) et se termine au maximum de Excel...
Mais après chaque commande je dois ajouter ma nouvelle ligne de stock après la derniere ligne renseignée par la commande précedante...
Wahou... Pas simple...
@++
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Je ne comprends donc plus rien...
Tu dis :
c'est que je commence à remplir montableau source par le bas
mon bon de commande commence en ligne (B11,E11)
Tu parles de tableau source, de bon de commande de stock... C'est incompréhensible!
Soit clair.

Donc mon conseil :
1- respire un grand coup,
2- va aux toilettes (sisi c'est lemoment!)
3- reviens, respire à nouveau
4- réfléchis et dis nous EXACTEMENT ce que tu fais et ce que tu veux faire automatiquement!!!
0
emmjacq
 
M E R C I !!!!!!
La victoire était au bout du chemin!!!!
Alors 1000 merci pour ton aide!!!!
Formidable.
Top.
Ca fonctionne.
Merci encore pour l'aide.
@++ pour de nouvelles aventures
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Et bien ... de rien!
On ne sait pas :
- ce qui n'allait pas,
- comment tu l'as résolu...
Mais bon...
A+
0
emmjacq
 
Certes...
Mais l'erreur était de moi.
Problème, d'espace dans la formule, de copier coller et encore plus problème dans mon tableau.
Il y avait une ligne avec un "filtre automatique"... donc le départ n'était pas bon.
C'est pourquoi, comme l'erreur était de mon côté j'ai préféré etre humble...
Merci et a tres bientot...
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Salut,
Merci de ton retour.
En fait, sur un forum il convient de dire ce qui n'a pas été, pourquoi et comment afin d'aiguiller au mieux les futurs visiteurs de ce sujet.
Donc merci à toi et à bientôt.
0