Fonction copier/coller/couper
Bonjour à tous,
cela fait quelque temps que je cherche mais en vain, un code permettant de :
Dès le click sur un bouton
De copier ou couper la ligne non vide d'une feuille ou le userform est actif donc mon classeur actif ( nom du classeur "test" nom de la feuille "erreur" )
Je souhaite après la coller dans un autre classeur ( nom classeur "Erreurs" nom de la feuille "feuil1") dans la feuille mais dans la dernière ligne non vide
Je souhaite vide la ligne de la feuille erreur du classeur test
Puis enregistrer les 2 classeurs
Et tout fermer
voici le code que j'ai essayer mais cela ne fonctionne pas :
Private Sub CommandButton1_Click() 'quitter
Dim ligne As Long
Sheets("Erreur").Select 'selectionner la feuille
ligne = Range("B65536").End(xlUp).Row + 1 'se mettre dans ligne de la colonne B dans la premiere case vide
Range("B" & ligne).Value = TextBox5.Value 'mettre la valeur dans la cellule
Range("C" & ligne).Value = ComboBox2.Value
Range("D" & ligne).Value = ComboBox5.Value
Range("E" & ligne).Value = TextBox4.Value
Range("F" & ligne).Value = ComboBox4.Value
Range("G" & ligne).Value = ComboBox7.Value
Range("H" & ligne).Value = ComboBox3.Value
Range("I" & ligne).Value = TextBox2.Value
Range("J" & ligne).Value = ComboBox1.Value
Range("K" & ligne).Value = ComboBox6.Value
Range("L" & ligne).Value = TextBox3.Value
Dim wk As Workbook
Dim b As Long, a As Long
Set wk = Workbooks.Open(Filename:="C:\Users\mickael.deflorenne\Desktop\PROJETS\Projet informatique\Programme\Erreurs.xls")
a = Workbooks("Erreurs").worsheets("feuil1").Range("B" & Cells.Rows.Count).End(x1up).Row + 1
b = Worksheets("Erreur").Range("B" & Cells.Rows.Count).End(x1up).Row
If b = 1 Then Exit Sub
Worksheets("Erreur").Range("B2:L" & b).Copy Destination:=wk.Worksheets("feuil1").Range("A" & a)
Application.DisplayAlerts = False 'ne pas avoir le message voulez vous enregistre
ActiveWorkbook.Save 'enregistrer
Application.Quit 'quitter
end subMerci de votre aide
Mika
Bonjour,
Honnêtement !
Pas d'utilisation des balises Code pour citer du code !
Code non indenté !
Dès la 3e ligne on trouve un Select !
Expressions évidemment non qualifiées... !
Longue énumération d'affectations à des cellules qui se suivent... (pas d'utilisation de boucles...)
Pas d'utilisation de tableau là où ça pourrait améliorer.
Des déclarations au milieu du code exécutable !
Utilisation triviale d'un copier-coller de ce qu'on vient d'affecter juste avant !
Cela fait vraiment beaucoup trop pour me donner envie de m'y pencher.
Désolé pour les balises pour le code
et puis je ne suis pas un pro en vba alors oui je fais comme je peux et le code est peut etre pas simplifié au maximum
Bonjour,
Une réécriture de ton code, à titre indicatif, sous réserve de problèmes qui ne peuvent apparaître en l'absence de fichier permettant de mieux cerner le contexte, les types de données en présence, etc.
Private Sub CommandButton1_Click()
Dim erreur, ln&, ch$, wk As Workbook
ch = "C:\Users\mickael.deflorenne\Desktop\PROJETS\Projet informatique\Programme\Erreurs.xls"
erreur = Array(TextBox5.Value, ComboBox2.Value, ComboBox5.Value, TextBox4.Value, ComboBox4.Value, _
ComboBox7.Value, ComboBox3.Value, TextBox2.Value, ComboBox1.Value, ComboBox6.Value, TextBox3.Value)
With Worksheets("Erreur")
ln = .Range("B" & .Rows.Count).End(xlUp).Row + 1
.Range("B" & ln).Resize(, 11).Value = erreur
End With
Set wk = Workbooks.Open(ch)
With wk.Worksheets(1)
ln = .Range("B" & .Rows.Count).End(xlUp).Row + 1
.Range("B" & ln).Resize(, 11).Value = erreur
End With
wk.Close True
ThisWorkbook.Close True
End SubPour ma part, je ne fermerai pas le classeur appelant avant d'avoir proprement fermé le Userform...
Cordialement.