Modification du fichier excel via userform tres simple mais dur pour moi...merci [Résolu]

Signaler
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009
-
bigfish_le vrai
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
bonjour

je souhaite savoir comment gerer une modification dune ligne de mon tableur excel via un userform
jai deja essaye bcp de fois sans succes...
merci

exemple concret;

colonne A   colonne B    colonne C
damien        17ans           scolarise
adrien          18ans          non scolarise
paul             19ans          non inscrit

comment faire quel code pour via un userform supprimer la ligne de paul
 ou la modifier
jai deja mon userform qui permet dajouter des personnes avec age et statut
je peux les rechercher aussi facilement mais une fois afficher comment dire modifier ou supprimer
jai creer le bouton modifier et le bouton supprimer et apres?

MERCI A TOUS

19 réponses

Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

voici la nouvelle version du code de la form :

Option Explicit

Private Sub EffacerTout_Click() 'boutton effacer tout
    Vider
End Sub

Private Sub identite_Change()
    If Me.identite.Value <> Me.recherche.Value Or Me.recherche.Value = "" Then
        Me.ajouter.Enabled = True
        Me.mettreajour.Enabled = False
        Me.supprimer.Enabled = False
    Else
        Me.mettreajour.Enabled = True
        Me.ajouter.Enabled = False
        Me.supprimer.Enabled = True
    End If
End Sub

Private Sub identite_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Dim LigneSource As Long
    With Sheets("Feuil1")
        On Local Error Resume Next
        LigneSource = .Columns("A").Find(Me.identite.Value, .Range("A1"), , , xlByRows, xlPrevious).Row
        MsgBox Err
        If Err = 0 Then 'si l'utilisateur a lui meme ecrit le nom et que ce nom est deja dans la liste
            Call remplissage(LigneSource)
        End If
    End With
End Sub

Private Sub imprimer_Click()
    Me.PrintForm
End Sub

Private Sub mettreajour_Click()
    Dim ModifLigne As Long
    'on recherche le nom choisi par l'utilisateur
    On Local Error Resume Next
    ModifLigne = Columns("A").Find(recherche.Value, Range("A1"), , , xlByRows, xlPrevious).Row
   
    'Pour voir se qui se passe je bascule sur la feuille
    Sheets("Feuil1").Activate

    'Ici c'est le report de la saisie dans la feuille
    With Sheets("Feuil1")
        .Range("A" & ModifLigne).Value = Me.identite.Value
        .Range("B" & ModifLigne).Value = Me.phone.Value
        .Range("C" & ModifLigne).Value = Me.statut.Value
        .Range("D" & ModifLigne).Value = Me.adresse.Value
        .Range("E" & ModifLigne).Value = Me.entreprise.Value
        .Range("F" & ModifLigne).Value = Me.reference.Value
        .Range("G" & ModifLigne).Value = Me.investissement.Value
        .Range("H" & ModifLigne).Value = Me.action.Value
        .Range("I" & ModifLigne).Value = Me.email.Value
        .Range("J" & ModifLigne).Value = Me.maj.Value
        .Range("K" & ModifLigne).Value = Me.commentaire.Value
    End With
End Sub

Private Sub rechercher_Click()
    Dim LigneSource As Long
    With Sheets("Feuil1")
        On Local Error Resume Next
        LigneSource = .Columns("A").Find(Me.recherche.Value, .Range("A1"), , , xlByRows, xlPrevious).Row
        If Err <> 0 Then 'si l'utilisateur a lui meme ecrit le nom et que ce nom n'est pas dans la liste
            MsgBox "le Nom specifié n'ai pas dans la liste ! ", vbExclamation
            recherche.Value = ""
            Err.Clear
            Exit Sub
        Else
            Call remplissage(LigneSource)
        End If
       
    End With
End Sub

'Ce qu'il se passe quand on clique sur le Bouton "ajouter"
Private Sub ajouter_Click()
    Dim L As Integer 'Déclaration de variable "L" pour connaitre la Ligne Numéro
   
    'ici je repère la dernière ligne vide pour la collection des données
    L = Sheets("Feuil1").Range("C65536").End(xlUp).Row + 1
   
    'ici un Test exemple pour identite, si elle est vide on est averti
    If identite = "" Then
        MsgBox "Vous n'avez rien saisi"
        identite.SetFocus
        Exit Sub
    End If
   
    'Pour voir se qui se passe je bascule sur la feuille
    Sheets("Feuil1").Activate
   
    'Ici c'est le report de la saisie dans la feuille
    With Sheets("Feuil1")
        .Range("A" & L).Value = identite.Value
        .Range("B" & L).Value = phone.Value
        .Range("C" & L).Value = statut.Value
        .Range("D" & L).Value = adresse.Value
        .Range("E" & L).Value = entreprise.Value
        .Range("F" & L).Value = reference.Value
        .Range("G" & L).Value = investissement.Value
        .Range("H" & L).Value = action.Value
        .Range("I" & L).Value = email.Value
        .Range("J" & L).Value = maj.Value
        .Range("K" & L).Value = commentaire.Value
    End With
    Me.mettreajour.Enabled = True
    Me.ajouter.Enabled = False
    Me.supprimer.Enabled = True
   
    sort.ordre
End Sub

Private Sub UserForm_Initialize()
    Me.mettreajour.Enabled = False
    Me.supprimer.Enabled = False
End Sub
Sub remplissage(LigneSource As Long)
    With Sheets("Feuil1")
        Me.mettreajour.Enabled = True
        Me.ajouter.Enabled = False
        Me.supprimer.Enabled = True
        Me.identite.Text = .Range("A" & LigneSource).Value
        Me.phone.Text = .Range("B" & LigneSource).Value
        Me.statut.Text = .Range("C" & LigneSource).Value
        Me.adresse.Text = .Range("D" & LigneSource).Value
        Me.entreprise.Text = .Range("E" & LigneSource).Value
        Me.reference.Text = .Range("F" & LigneSource).Value
        Me.investissement.Text = .Range("G" & LigneSource).Value
        Me.action.Text = .Range("H" & LigneSource).Value
        Me.email.Text = .Range("I" & LigneSource).Value
        Me.maj.Text = .Range("J" & LigneSource).Value
        Me.commentaire.Text = .Range("K" & LigneSource).Value
    End With
End Sub
Sub Vider() 'Ici je vide les textbox
    Me.ajouter.Enabled = True
    Me.mettreajour.Enabled = False
    Me.supprimer.Enabled = False
    identite.Value = ""
    phone.Value = ""
    statut.Value = ""
    adresse.Value = ""
    entreprise.Value = ""
    reference.Value = ""
    investissement.Value = ""
    action.Value = ""
    email.Value = ""
    maj.Value = ""
    commentaire.Value = ""
    'ici je remets le curseur en identite
    Me.identite.SetFocus
End Sub

il faut imperativement remplacer le code existant par celui que je te donne ici.
Pour profiter pleinnement de toute les modif il faut rajouter un bouton [Effacer Tout], nomé EffacerTout dans le code et qui sert a vider les textbox de la form.
Le bouton [modier] fonctionne maintenant. Tu veras que suivant la situation les boutons sont activés ou desactivés ce qui limite l'utilisateur ce qu'il a le droit de faire.
Par exemple si le nom saisi dans la textbox "Identite du Prospect" existe deja dans la base et que l'utilisateur clic dans une autre textbox toutes les textbox seront alors automatiquement remplis et seul les boutons modifier et supprimer seront activer. Par contre nom n'existe pas dans la base seul le bouton ajouter sera activer.
Autre modif, apres ajout d'un nouveau nom dans la base les textbox ne sont plus automatiquement vider mais par contre le bouton ajouter est alors desactiver et les boutons modifier et supprimer sont eux actcif.

Voila
A+
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

il sont ou les bouton modifier supprimer ? dans une feuille ou dans la form ?

A+
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

salut big fish,

les boutons sont dans le userform
jaimerai savoir ce que je met dans le code de ces boutons sachant que dans le code du bouton ajouter jai mis:

'Ce qu'il se passe quand on clique sur le Bouton "ajouter"
Private Sub ajouter_Click()
Dim L As Integer 'Déclaration de variable "L" pour connaitre la Ligne Numéro


'ici je repère la dernière ligne vide pour la collection des données
L = Sheets("Feuil1").Range("C65536").End(xlUp).Row + 1


'ici un Test exemple pour identite, si elle est vide on est averti
If identite = "" Then
MsgBox "Vous n'avez rien saisi"
identite.SetFocus
Exit Sub
End If


'Pour voir se qui se passe je bascule sur la feuille
Sheets("Feuil1").Activate


'Ici c'est le report de la saisie dans la feuille
With Sheets("Feuil1")
.Range("A" & L).Value = identite.Value
.Range("B" & L).Value = phone.Value
.Range("C" & L).Value = statut.Value
.Range("D" & L).Value = adresse.Value
.Range("E" & L).Value = entreprise.Value
.Range("F" & L).Value = reference.Value
.Range("G" & L).Value = investissement.Value
.Range("H" & L).Value = action.Value
.Range("I" & L).Value = email.Value
.Range("J" & L).Value = maj.Value
.Range("K" & L).Value = commentaire.Value


End With


'Ici je vide les textbox
identite.Value = ""
phone.Value = ""
statut.Value = ""
adresse.Value = ""
entreprise.Value = ""
reference.Value = ""
investissement.Value = ""
action.Value = ""
email.Value = ""
maj.Value = ""
commentaire.Value = ""


'ici je remets le curseur en identite
identite.SetFocus


sort.ordre
End Sub

et jai pas fait non plus le code du bouton supprimer...
merci bcp
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Ben pour la modif ou la supression 2 solutions :

soit apres avoir cliquer sur le bouton tu demande a l'utilisateur de selectionner une des cellules de la ligne a modifier ou supprimer

ou soit tu crés une nouvelle form dans la quelle tu met une combobox qui permet de coisir le nom a modifier ou a supprimer.

par exemple pour la modif a l'aide d'une autre form que j'appelerais ListeNom et qui contient une combobox, un bouton Valider et un bouton Annuler

dans le code de cette forme tu mets :

Private Sub ListeNom_Initialize() 'initialisation de la form
    Dim LastName As Long
    'recherche du dernier nom
    LastName = Columns("A").Find("*", Range("A1"), , , xlByRows, xlPrevious).Row
    'on rempli la list de la combobox
    ComboBox1.List = Range("A1:A" & LastName).Value
End Sub

Private Sub CommandButton1_Click() 'bouton validé
    'un clic sur le bouton validé alors que le champs de la combobox est vide sera assimilé à un clic sur le bouton annulé
    If ComboBox1.Value <> "" Then
        Dim ModifLigne As Long
        'on recherche le nom choisi par l'utilisateur
        On Local Error Resume Next
        ModifLigne = Columns("A").Find(ComboBox1.Value, Range("A1"), , , xlByRows, xlPrevious).Row
        If Err <> 0 Then 'si l'utilisateur a lui meme ecrit le nom et que ce nom n'est pas dans la liste
            MsgBox "le Nom specifié n'ai pas dans la liste ! ", vbExclamation
            ComboBox1.Value = ""
            Err.Clear
            Exit Sub
        End If
        'comme tout est ok on remplis la userform1 a partir des données du nom choisi
        With Sheets("Feuil1")
            UserForm1.identite.Value = .Range("A" & ModifLigne).Value
            UserForm1.phone.Value = .Range("B" & ModifLigne).Value
            UserForm1.statut.Value = .Range("C" & ModifLigne).Value
            UserForm1.adresse.Value = .Range("D" & ModifLigne).Value
            UserForm1.entreprise.Value = .Range("E" & ModifLigne).Value
            UserForm1.reference.Value = .Range("F" & ModifLigne).Value
            UserForm1.investissement.Value = .Range("G" & ModifLigne).Value
            UserForm1.Action.Value = .Range("H" & ModifLigne).Value
            UserForm1.Email.Value = .Range("I" & ModifLigne).Value
            UserForm1.maj.Value = .Range("J" & ModifLigne).Value            UserForm1.commentaire .Value .Range("K" & ModifLigne).Value
        End With
    End If
    Unload Me
End Sub

Private Sub CommandButton2_Click() 'bouton annulé
    Unload Me
End sub

J'ai ecris tout ça ici donc pas tester. Voila y a plus qu'a...
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
ah oui j'oubliais, Userform1 est la form que tu as deja créée et qui te sert a ajouter un nom.
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

je pe te lenvoyer mon fichier?
comment?
merci
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

big fish?
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Attend de vouloir m'envoyer ton fichier essai de me dire ce qui ne vas pas dans ce que je t'ai donné ?
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
erratum :



Attend avant de vouloir m'envoyer ton fichier essai de me dire ce qui ne vas pas dans ce que je t'ai donné ?
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

ben il me faut un seul userform...


et que ca change directement dans excel
dis moi ou je pe te lenvoyer ce sera plus simple en le voyant
jai essayer ton code la 2eme partie sans succes...
merci
je te lenvoi et apres on parle du probleme sur codes sources pour les autres utilisateurs interesses
merci
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Ok vu mais il faut que l'utilisateur a un moment ou un autre specifi le nom a modifier donc ma question est :

Comment veux-tu que l'utilisateur face ce choix ?
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
ben en faite je viens de regarder ton fichier et j'ai vu que tu as deja une combobox qui permet de selectionner un nom existant. En plus tu sais deja remplire ton formulaire une fois le nom selectionné.

Donc désolé mais je ne comprend quel est le probleme !
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

ben tu vois quand tu as le userform ouvert ajoute deja qq nouvo propsects
et apres va dans le menu deroulant en haut et cherche lun des prospect que tu as precedemment entre et fait rechercher
il va te lafficher dans les textbox avec les differents infos
et bien si je change la valeur dune des textbox ( info) et que je met "mise a jour" il la change directement dans excel
merci
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

et aussi si je ve cliker sur supprimer ca supprime la ligne correspondante en mettant une textbox "prospect supprime"
voila
merci de ta grande aide
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
Salut,
Ce qui veut donc dire que avant d'appuyer sur Modifier ou Supprimer, tu as déjà sélectionné un Utilisateur.

Sert toi te ta fonction d'ajout pour t'aider.

Ta fonction d'ajout recherche la premiere ligne vide (NOTE: La variable L DOIT être de type LONG et non INTEGER)

'ici je repère la dernière ligne vide pour la collection des données
L = Sheets("Feuil1").Range("C65536").End(xlUp).Row + 1, ----
[../code.aspx?ID=41455 By Renfield]

Et bien tu peux la modifier pour que L prenne la valeur de la ligne ou se trouve l'utilisateur sélectionné  ( [../auteur/BIGFISHLEVRAI/510670.aspx bigfish_le vrai] ,t'a d'ailleurs montrer qqch d'intéressant pour cela).

ModifLigne = Columns( "A" ).Find(ComboBox1.Value, Range("A1"), , , xlByRows, xlPrevious).Row

A toi de le modifier et d'adapter à tes besoins...

car une fois que tu as la ligne ou se trouve l'utilisateur sélectionné,

Modifier: => a peu de chose près la fonction d'ajout.
Supprimer: =>
'L Ligne as supprimer
Call Rows(L & ":" & L).Delete(xlUp)
, ----
[../code.aspx?ID=41455 By Renfield]

Voilà tu as a peu près tout pour t'en tirer seul. pas besoin d'envoi de fichier pour que l'on fasse le boulot à ta place

@+: Ju£i€n
Pensez: Réponse acceptée
Messages postés
63
Date d'inscription
mercredi 16 juillet 2008
Statut
Membre
Dernière intervention
15 juillet 2009

PARFAITTTTTTTTTTTTTTTTTTT TOUT MARCHEEEE A MERVEILLESSSS

Merci beaucoup encore big fish de ton aideee

jai adapte un peu selon mes preferences mais tout le code est super

merci encore!!!
Messages postés
7393
Date d'inscription
mercredi 23 avril 2003
Statut
Membre
Dernière intervention
6 avril 2012
46
@+: Ju£i€n


Pensez: Réponse acceptée
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Merci Julien

pour moi il est l'heure d' aller ce coucher pour l'heure de ce lever donc : Bonne journee a tous
Messages postés
1839
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Aaarff !

pour moi il est l'heure d' aller ce coucher alors que pour vous il est l'heure de ce lever donc : Bonne journee a tous

Desole jusqu' au dernier moment de cette p..ain de journee j'aurais ecrit n'importe quoi... il vraiment temps que je dormes