Affiner code pour transfert données

Bonjour

Voilà, je vais essayer d'être le plus claire possible sur ma demande et par avance merci de votre aide.

Ma demande est juste de vouloir transferer les infos d'une feuille vers une autre feuille. Je suis arrivé a faire des macros qui correspond à ce que j'attend mais bien évidemment avec des bugs que je n'arrive pas a régler. Grrrrr

Dans le fichier pour exemple en PJ il y a 4 feuilles,

  • -> Cat et thème. (BDD servant aux 3 ComboBox en cascade dans l'UserForm1)
  • -> Feuil2. (Ce trouve le bouton permettant l'ouverture du UserForm1)
  • -> BDD Previ. (BDD qui ce complète grâce à la feuille "Passage" et qui permettra de compléter une future feuille (à créer).
  • -> Passage. (feuille qui permet de servir de tampon lors du renseignement du UserForm1 afin de remplir la ListBox1)
Jusque la je pense avoir réussi les codes puisque j'obtiens le résultat voulu.

La ou ça coince c'est sur la suite et donc sur le transfert des données en feuille "Passage" vers feuille "BDD Previ" malgré avoir trouvé un code sur ce fonctionnement.

Ce code appelé "Transfert" dans Module 1 fonctionne si j'ouvre l'UserForm1 sur la feuille "BDD Previ" Mais pour mon cas toutes les feuilles sauf "Feuil2" seront masquées et la !! la macro ne fonctionne plus et dans la ListBox1 je récupère les titres (ligne 1) de la feuille "Passage". JE N'Y Comprends plus rien.

Mon but est d'avoir juste la feuill2 visible, ouvrir l'UserForm1 que l'on renseigne, valide avec bouton "journée suivante" puis quand on le souhaite Click sur bouton "Validation liste" qui permet le transfert des données vers feuill "BBD Previ".

Merci de votre soutien sur cette demande.

Fichier en PJ.

17essai-liste.xlsm (73.05 Ko)

Bonjour pompaero

dans le chargement de la listbox

le code est le suivant

bd = f.Range("A2:D" & [A65536].End(xlUp).Row).Value

le problème est que tu sélectionne une plage de cellules de la feuille f A2 a D mais de la feuille active soit la feuille 2 qui est vide.

il manque un f.

comme ceci

bd = f.Range("A2:D" & f.[A65536].End(xlUp).Row).Value

c'est le même problème dans la macro transfert (2 fois)

Worksheets("Passage").Range("A2:H" & Worksheets("Passage").Range("A" & Rows.Count).End(xlUp).Row).Copy

il faut également supprimer le .select dans la macro transfert

Bonjour BOB71AU

Merci d'être arrêté sur mon post pour m'aider.

Je viens de suivre tes conseils, après plusieurs essais cela a l'aire de fonctionner parfaitement maintenant.

sauf que (il y a tjrs un mais, , désolé), malheureusement quand je click sur le bouton "Validation liste" la listbox se vide de sa liste mais récupère les titres : Date, Catégorie, Unité de valeur, Thème, de je ne sais ou !!!

Cdlt

Re

Je viens de tester , c'est bien la ligne 1 de la feuille "Passage" donc les titres qui s'affiche dans listbox après avoir click sur bouton "Validation liste".

Re

je ne constate pas ce problème

Sub Transfert() 'Transfert des données de la feuille "passage" vers feuille "BDD Previ"
    With Sheets("BDD Previ")
        dl = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        Worksheets("Passage").Range("A2:H" & Worksheets("Passage").Range("A" & Rows.Count).End(xlUp).Row).Copy
        .Cells(dl, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
                                                                            :=False, Transpose:=False
        Worksheets("Passage").Range("A2:H" & Worksheets("Passage").Range("A" & Rows.Count).End(xlUp).Row).ClearContents
        Application.CutCopyMode = False
        'Worksheets("Passage").Visible = 0
'        .Select

    End With
End Sub

Sub Alim_ListBx1() 'Alimentation de la ListBox1 par rapport à la feuille "Passage" qui sert de tampon
Dim f, bd()
   Set f = Sheets("passage")
   bd = f.Range("A2:D" & f.[A65536].End(xlUp).Row).Value
   UserForm1.ListBox1.List = bd
 End Sub

sinon reposte le fichier modifié qui ne fonctionne pas


rere

Effectivement, je viens de constater.

Je ne vois pas trop pourquoi recharger la listbox puisque tu viens de vider la feuille passage

mais plutot vider la listbox

' Alim_ListBx1
Me.ListBox1.Clear

Re

Effectivement après réflexion je me suis rendu compte que je réarmé la ListBox donc j'ai cherché un code pour effacer,

le code

Sub Vide_ListBx1() 'Vide la ListBox1 après validation du transfert des données
Dim i As Integer
    For i = 1 To UserForm1.ListBox1.ListCount
     'Supprimer un élément de la ListBox.
     UserForm1.ListBox1.RemoveItem 0
    Next i
End Sub

Mais ta solution fonctionne aussi bien et est plus simple, donc je garde la tienne.

Merci

Cdlt

Merci pour tout

Je vais essayer de poursuivre seul l'évolution du projet et si besoin je reviendrais ici avec grand plaisir.

Je mets résolu et certainement à plus tard, .

Encore merci

Cdlt

Rechercher des sujets similaires à "affiner code transfert donnees"