Programme VBA:copier une ligne sur une feuille

  • Initiateur de la discussion pepette54
  • Date de début
P

pepette54

Guest
Bonsoir à tous.
Il faut que je créé un programme permettant à un utilisateur d'entrer un nom afin de créer une nouvelle feuille excel et de copier les données liées à cet utilisateur (peut etre présent plusieurs fois).

Voici mon programme:
______________________________________________________________
Private Sub Ok_Click()
If nom = '' Or nom = ' ' Then
MsgBox ('Veuillez entrer un nom d'utilisateur pour continuer'), vbOKOnly
GoTo fin
Else
For ligne = Worksheets('journal').UsedRange.Rows.Count To 1 Step -1
If UCase(Worksheets('journal').Cells(ligne, 6).Value) = UCase(nom.Value) Then
GoTo suite
End If
Next
MsgBox ('L'utilisateur n'a pas ouvert de session'), vbOKOnly
GoTo fin
End If
suite:
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = nom
Range('A1:E1').Select
ActiveCell.Offset(0, 0).Value = 'Id'
ActiveCell.Offset(0, 1).Value = 'ouverture:date'
ActiveCell.Offset(0, 2).Value = 'ouverture:heure'
ActiveCell.Offset(0, 3).Value = 'fermeture date'
ActiveCell.Offset(0, 4).Value = 'fermeture heure'
For ligne = Worksheets('journal').UsedRange.Rows.Count To 1 Step -1
If UCase(Worksheets('journal').Cells(ligne, 6).Value) = UCase(nom.Value) Then
'copier toute la ligne dans la ligne 1ere ligne vide de la feuille nom
End If
Next
fin:
Unload utilisateur
End Sub
_______________________________________________________________
 

pat1545.

XLDnaute Accro
salut,

une partie est à modifier :

suite:
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = 'aaaaa'
ActiveCell.Offset(0, 0).Value = 'Id'
ActiveCell.Offset(0, 1).Value = 'ouverture:date'
ActiveCell.Offset(0, 2).Value = 'ouverture:heure'
ActiveCell.Offset(0, 3).Value = 'fermeture date'
ActiveCell.Offset(0, 4).Value = 'fermeture heure'
Set cible = ActiveSheet.Range('A32000')(2)
cell.EntireRow.Copy cible


Patrick
 
P

pepette54

Guest
Je comprend pas, ca marche pas, c'est censé faire quoi?
Moi ce que je veux c'est pouvoir copier toutes les lignes trouvées par mon programme dans la nouvelle feuille (à partir de la 2eme ligne car la 1ere est déjà remplie).
 

ChTi160

XLDnaute Barbatruc
Salut pepette54
bonsoir Patrick
bonsoir le forum
tout d'abord je tiens à dire et même à répéter ,qu'il n'est pas évident de travailler directement sur du code ,un fichier joint permet de tester et donc de mieux comprendre.
car il faudrait reconstruire un fichier ainsi que les Forms etc
pas possible Lol
donc en Gras ce que j'ai rajouté non Testé
Private Sub Ok_Click()
If nom = '' Or nom = ' ' Then
MsgBox ('Veuillez entrer un nom d'utilisateur pour continuer'), vbOKOnly
GoTo fin
Else
For ligne = Worksheets('journal').UsedRange.Rows.Count To 1 Step -1
If UCase(Worksheets('journal').Cells(ligne, 6).Value) = UCase(nom.Value) Then
GoTo suite
End If
Next
MsgBox ('L'utilisateur n'a pas ouvert de session'), vbOKOnly
GoTo fin
End If
suite:
ActiveWorkbook.Worksheets.Add
ActiveSheet.Name = nom
Range('A1:E1').Select
ActiveCell.Offset(0, 0).Value = 'Id'
ActiveCell.Offset(0, 1).Value = 'ouverture:date'
ActiveCell.Offset(0, 2).Value = 'ouverture:heure'
ActiveCell.Offset(0, 3).Value = 'fermeture date'
ActiveCell.Offset(0, 4).Value = 'fermeture heure'
For ligne = Worksheets('journal').UsedRange.Rows.Count To 1 Step -1

If UCase(Worksheets('journal').Cells(ligne, 6).Value) = UCase(nom.Value) Then
Worksheets('journal').Cells(ligne, 6).EntireRow.Select
Selection.Copy
With Worksheets(nom)
Derlgn = .Range('A65536').End(xlUp).Row + 1
.Cells(Derlgn, 1).Paste
End With


End If
Next
fin:
Unload utilisateur
End Sub
 
P

pepette54

Guest
Tout d'abord je voulais vous remercier tous pour votre aide.
Bon alors voilà, en regardant un peu partout sur internet g réussi à trouver une commande me permettant de copier les lignes que je voulais. Je l'ai donc adapté à mon programme mais ca ne marche pas. Quand je l'exécute ca me marque 'erreur d'exécution '13':incompatibilité de type pour la ligne Worksheets('journal').Rows(ligne).Range('A1:E1').Copy (Worksheets(nom).Rows(numlig).Range('A1:E1')) (ligne 18 de mon programme) par contre j'ai essayé de copier dans une feuille que j'ai appellé au préalable 'Feuille1' et là il veut bien me copier ce que je lui demande. Apparement c'est la variable nom qu'il n'apprécie pas mais j'en ai besoin car le nom de la feuille de destination est le nom entré par l'utilisateur (lignes 18 et 19). Je ne sais pas pourquoi cela ne marche pas ni comment y remédier.
Code:
1.Private Sub Ok_Click() 
2.    Dim numlig As Integer 
3.    numlig = 1 
    
    
4.    If nom = '' Or nom = ' ' Then 
5.        MsgBox ('Veuillez entrer un nom d'utilisateur pour continuer'), vbOKOnly 
6.        GoTo fin 
      
7.    Else 
8.        ActiveWorkbook.Worksheets.Add 
9.        ActiveSheet.Name = nom 
10.      Range('A1').Value = 'Id' 
11.      Range('B1').Value = 'ouverture:date' 
12.      Range('C1').Value = 'ouverture:heure' 
13.      Range('D1').Value = 'fermeture:date' 
14.      Range('E1').Value = 'fermeture:heure' 
                    
15.      For ligne = 1 To Worksheets('journal').UsedRange.Rows.Count 
16.          If UCase(Worksheets('journal').Cells(ligne, 6).Value) = UCase(nom.Value) Then 
17.                 numlig = numlig + 1 
18.                 Worksheets('journal').Rows(ligne).Range('A1:E1').Copy (Worksheets(nom).Rows(numlig).Range('A1:E1')) 
19.          End If 
20.      Next 
21.      If numlig = 1 Then 
22.          MsgBox ('L'utilisateur n'a pas ouvert de session'), vbOKOnly 
23.      End If 
24.  End If 

25.fin: 
26.Unload utilisateur 

27.End Sub
 

ChTi160

XLDnaute Barbatruc
bonsoir pepette54
bonsoir le Forum
en pièce jointe une possibilité
[file name=Transfert_Ligne.zip size=9541]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Transfert_Ligne.zip[/file]
 
Dernière édition:
P

pepette54

Guest
Ok ca marche bien. C génial. Par contre g un nouveau problème: si l'utilisateur a déjà utilisé ce programme, la feuille se créée. Et donc s'il relance le programme avec le meme nom, il y a un problème car il va y avoir 2 fois la meme feuille et donc ca ne va pas aller.
Y a-t-il une possibilité pour vérifier si la feuille qui va se créer existe déjà? Et si oui comment?
G essayé ca mais ca ne marche pas.
Code:
Private Sub Valider_Click()
    For Each Worksheets In Workbook('data1')
        If Worksheets.Name = Nom Then
            msgbox ('veuillez supprimer la feuille ' & Nom)
        End If
    Next Worksheets
Unload nouvelle_feuille
End Sub
Comment dois-je m'y prendre?
 

ChTi160

XLDnaute Barbatruc
Salut pepette54
bonsoir le fil
bonsoir leForum
en pièce jointe ton fichier modifié [file name=Transfert_LigneV1.zip size=10339]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Transfert_LigneV1.zip[/file]
 
Dernière édition:
P

Pepette54

Guest
Merci beaucoup ChTi160 c'est vraiment gentil, ca marche tout bien.
Je suis désolée d'abuser encore une fois mais j'ai encore un problème(j'espère que ce sera le dernier): toujours à partir des memes données, il faut a présent que je créé une macro permettant d'ajouter une feuille dans laquelle il va falloir copier les donnees relatives à une personne mais pour une période donnée par l'utilisateur. Pour le programme en lui-meme ca ne devrait pas etre trop compliqué.
Mon problème est que j'ai pensé faire un userform afin que l'utilisateur puisse saisir le nom de la personne voulue ainsi que la date du début et la date de fin de la période désirée. Mon problème est qu'avant de lancer le programme il va falloir vérifier que l'utilisateur ait bien saisi des dates au format JJ/MM/AA et si ces dates existent et sont déjà passées (problème si date à venir ou problème du 30/02/01 par exemple).
A partir de là je pense qu'il sera assez facile de comparer ces dates à celles existantes deja. Donc je pense que ca devrait aller pour le reste.
Merci pour votre aide.
 

ChTi160

XLDnaute Barbatruc
Salut pepette54
bonsoir le fil
bonsoir le Forum
en pièce jointe une possibilité inspirée d'une macro de Didier mDf
[file name=Transfert_LigneV2.zip size=14173]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Transfert_LigneV2.zip[/file]
 
Dernière édition:
P

pepette54

Guest
Erf là c'est un peu trop compliqué pour moi ca. En fait je viens d'avoir une idée:
je vais faire un userform ou l'utilisateur devra entrer séparément le jour au format JJ(que j'appellerai jour), le mois au format MM(que j'appellerai 'mois') et l'année au format AA(que je désignerai par la variable 'année').

=> Ainsi il faut donc que j'écrive une macro vérifiant que les entrées 'jour','mois' et 'année' sont bien numériqueset au format '00', que 01<'jour'<31, 01<'mois'<12 et 04<'année'<année en court. Sinon msg 'entrez une date correcte'.

=> Ensuite il faut que je dise que la valeur 'jour'/'mois'/'année' est une date et vérifier qu'elle a bien existé sinon msg 'saisir une date existante' et qu'elle ne soit pas > date d'aujourd'hui sinon msg 'saisir une date passée'.


Je pense kil me sera ensuite facile de comarer cette date à celles contenues dans les données.

J'ai noté en rouge ce que j'aimerais pouvoir faire mais je n'ai aucune idée de comment m'y prendre.
Merci d'avance.
 
P

pepette54

Guest
Bon alors voila en faite j'ai fait un combobox mais je ne sais pas pkoi il ne m'affiche pas tjrs les valeurs lorsque je le lance. Ai-je oublié qqch?
=>Comment fais-ton pour obliger l'utilisateur à selectionner une date dans la liste proposée, qu'il ne puisse pas en ajouter.
=> pour le format des nombres y n'y aura plus de problème comme ca
=> il faut quand meme que je dise que les valeurs selectionnées forment une date au format jj/mm/aa
=> il faut quand meme que je vérifie si la date existe bien et si elle est déjà passée(car si la date est à venir je ne pourrai pas utiliser les données qui lui correspond car elles n'existent pas)
PS: je joint mon userform
[file name=data.zip size=11126]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/data.zip[/file]
 

Pièces jointes

  • data.zip
    24.4 KB · Affichages: 32
  • data.zip
    24.4 KB · Affichages: 31
  • data.zip
    24.4 KB · Affichages: 32
P

pepette54

Guest
Bonjour tlm.
Alors en cherchant un peu partout sur internet j'ai trouvé qqch que je ne connaissais pas (le datepicker) et c'est super utilie pour ce que je veux faire. Du coups je n'ai plus de problème sur le format des dates. J'en ai donc fait un. Mais j'ai a nouveau quelques petits problèmes:
=> en fait je voudrais que le calendar1 soit caché jusqu'à ce que l'utilisateur clike sur le TextBox1 (pour entrer la date) et qu'il disparaisse une fois la date choisie (uniquement dans le calendrier et pas manuellement).
=> ensuite, je ne sais pas si celà est possible mais j'aimerais que le calendrier n'affiche que les dates entre le 27/11/04 et la date ou l'utilisateur utilise le programme (date en cours).
PS:en pièce jointe ce que j'ai fait (dans userform1)
[file name=data1.zip size=10044]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/data1.zip[/file]
Merci d'avance.
 

Pièces jointes

  • data1.zip
    9.8 KB · Affichages: 27
  • data1.zip
    9.8 KB · Affichages: 27
  • data1.zip
    9.8 KB · Affichages: 28

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 177
Messages
2 085 972
Membres
103 073
dernier inscrit
MSCHOE16