XL 2019 Ouverture userform sur une page avec donnée d'une autre.

farid

XLDnaute Occasionnel
Bonjour,
en PJ, le document qui me permet d'ajouter des agents, de vérifier la liste des agents et de supprimer des agents et cela fonctionne.
Cependant, j'aurais souhaité lorsque je clique sur le bouton de la feuille 1 et que mon userform s'ouvre et reste sur la feuille 1 et non basculer sur la feuille 2 actuellement et en gardant les mêmes fonctionnalités actuelles.
Merci pour votre soutien
bonne journée.
Farid
 

Pièces jointes

  • liste agent.xlsm
    64.8 KB · Affichages: 7

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Farid,
Un essai en PJ. Il faut supprimer tous les Sheets("Feuil2").select.
Vous pouvez utiliser l'instruction With End with. Par exemple :
VB:
Private Sub UserForm_initialize()
'Liste collaborateur
With Sheets("Feuil2")
    For N = 1 To .Range("a65536").End(xlUp).Row
        ComboBox24.AddItem .Range("a" & N)
    Next N
    'Supprime'
    For N = 1 To .Range("a65536").End(xlUp).Row
        ComboBox23.AddItem .Range("a" & N)
    Next N
    'Fin supprime'
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
End With
End Sub
Le "." devant les range signifie qu'on utilise la feuille déclarée dans le with.
J'ai modifié toutes les macros mais vérifiez bien.
Utilisez l'indentation, ça rend le code beaucoup plus lisible.
 

Pièces jointes

  • liste agent.xlsm
    63.3 KB · Affichages: 4

Oneida

XLDnaute Impliqué
Bonjour,
Meme reflection que Sylvanu
Une autre facon pour remplissage Combobox sans boucle For next
VB:
Private Sub UserForm_initialize()
    Dim TB_Collab
    
    With Worksheets("Feuil2")
        TB_Collab = .Range("A1:A" & .Range("A65536").End(xlUp).Row)     'Table Collab
        ComboBox24.List() = TB_Collab       'Collab
        ComboBox23.List() = TB_Collab      'Supprime
    End With
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
End Sub
 

patricktoulon

XLDnaute Barbatruc
bonjour
efface tout le code de ton userform et met celui ci
VB:
'patricktoulon
Private Sub Btn_Ajouter_Click()
    If Len(Me.Txt_nom) = 0 Then
        MsgBox "Veillez remplir les champs obligatoirs avec une étoile (*)"
        Me.Txt_nom.SetFocus
    Else
        Sheets("Feuil2").Cells(Rows.Count, 1).End(xlUp).Offset(1, 0) = Me.Txt_nom
        Me.Txt_nom = ""
        Sheets("Feuil2").Range("A:A").Sort Key1:=Sheets("Feuil2").Range("A1")
        razcomb
    End If
End Sub
Private Sub CommandButton3_Click()
    Unload Nouveau
End Sub

'supprime'
Private Sub CommandButton7_Click()
    Sheets("Feuil2").Range("a" & ComboBox23.ListIndex + 1).EntireRow.Delete
    razcomb
End Sub

Private Sub UserForm_initialize()
    razcomb
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
End Sub


Sub razcomb()
'Liste collaborateur
    With ComboBox24: .Clear: .List = Sheets("Feuil2").Range("A1", Sheets("Feuil2").Cells(Rows.Count, 1).End(xlUp)).Value: End With
    'Supprime'
    With ComboBox23: .Clear: .List = ComboBox24.List: End With
    'Fin supprime'
End Sub

il faut apprendre à travailler avec les object range directement sans select ou activate
inscrit depuis 2016 tu devrais savoir faire c'est le B à BA du vba en Excel
d'autre part apprendre aussi à travailler avec des tableaux structurés c'est un minimum pour ce genre de manœuvre du genre BDD les code en deviennent plus simple a faire et a maintenir
 

farid

XLDnaute Occasionnel
Bonjour Farid,
Un essai en PJ. Il faut supprimer tous les Sheets("Feuil2").select.
Vous pouvez utiliser l'instruction With End with. Par exemple :
VB:
Private Sub UserForm_initialize()
'Liste collaborateur
With Sheets("Feuil2")
    For N = 1 To .Range("a65536").End(xlUp).Row
        ComboBox24.AddItem .Range("a" & N)
    Next N
    'Supprime'
    For N = 1 To .Range("a65536").End(xlUp).Row
        ComboBox23.AddItem .Range("a" & N)
    Next N
    'Fin supprime'
    Me.Left = Application.Left + Application.Width / 2 - Me.Width / 2
    Me.Top = Application.Top + Application.Height / 2 - Me.Height / 2
End With
End Sub
Le "." devant les range signifie qu'on utilise la feuille déclarée dans le with.
J'ai modifié toutes les macros mais vérifiez bien.
Utilisez l'indentation, ça rend le code beaucoup plus lisible.
Bonjour Sylvanu,
Votre proposition fonctionne très bien sauf que sur la feuille 2 j'ai dans d'autre colonne des informations qui ne doivent pas être modifié lorsque je supprime un agent. Mais uniquement de la colonne A. Dans l'exemple dans la colonne C et D, j'ai des informations et ces deniers se déplace dans autre colonne lorsque je supprime un agent via "Nouveau" ! Y a-t-il possible que l'on supprime unique l'agent désigné sans impacte sur les autres colonnes et aussi, y a-t-il possible que lorsque j'enregistre un nouvel agent que cela commence à partir de la cellule A2 jusqu'à A 99999 et non à partir de la cellule A1 car ce dernier me sert d'entête.
Par avance, merci pour votre retour.
Bonne fin de journée
 

Pièces jointes

  • liste agent (3).xlsm
    65.3 KB · Affichages: 1

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Votre proposition fonctionne très bien sauf
Ce n'est pas mon code mais le votre, ma modif ne portait que sur le With EndWith.
Pour supprimer un élément uniquement sur la colonne A :
VB:
Utilisez :
.Range("a" & dl).Delete Shift:=xlUp
plutôt que
.Range("a" & dl).Delete  ' qui supprime toute la ligne.'
Enfin au risque de me répéter :
Utilisez l'indentation, ça rend le code beaucoup plus lisible.
 

Pièces jointes

  • liste agent (3).xlsm
    62.9 KB · Affichages: 2

farid

XLDnaute Occasionnel
Bonsoir
comme je l'ai dit plus haut tu t'ennuierais moins avec un Tableau structuré
plus de problème ajouter un nom ou pour deleter sans perdre la ligne
Bonjour Patrick
merci pour ces précisions. En faisant quelque manip d'ajout d'agent, ok, mais en supprimant des agents, 1 bug se produit sur l'avant-dernier agent supprimé et ensuite impossible de relancer l'userform 'Nouveau si reste 1 agent ds la liste. Dans le cas immédiat, afin de relancer l'userform Nouveau, il faut minimum 2 agents dans la liste.
Est-il possible que l'on puisse supprimer tous les agents sans bug et de pouvoir lancer "Nouveau" et d'ajouter autant d'agent nécessaire.

par avance merci
 

Pièces jointes

  • listagent V patricktoulon (Listobject).xlsm
    63.5 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
312 222
Messages
2 086 394
Membres
103 200
dernier inscrit
pascalgip