UserForm VBA - DoubleClick

Bonjour,

J'ai réalisé un formulaire de saisie qui fonctionne plutôt bien, mais je voudrai l'améliorer en ayant la possibilité de modifier via un formulaire qui récupèrent toutes les données saisies en double cliquant sur la ligne. Jusque là, tout va bien.

Le problème est que lorsque j'ai effectué les modifications dans le formulaire de modification et que je clique sur modifier, les valeurs ajoutées ou modifiées ne s'incrémentent pas dans la feuille.

Pouvez-vous m'éclairer sur l'erreur que j'ai pu faire ou l'oubli que j'ai pu omettre ?

Voici mon code :

  • im no_ligne1 As Integer
    Application.ScreenUpdating = False
    For no_ligne1 = Range("d" & Rows.Count).End(xlUp).Row To 35 Step -1
    If Range("d" & no_ligne1) = modification Then
    Sheets("Saisie des activités").Activate
    'insertion des valeurs sur la feuille
    Sheets("Saisie des activités").Cells(no_ligne1, 1) = TxtDateJour.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 2) = TxtDateDemande.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 3) = TxtDateFinEstimee.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 4) = CboPriorite.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 5) = CboTypeActivite.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 6) = TxtPersOrigine.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 7) = CboPrenomNom.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 8) = CboPlateauDomaine.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 9) = TxtTpsEstime.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 10) = CboEtat.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 11) = TxtSujet.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 12) = CboBatiment.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 13) = TxtReference.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 14) = CboNomPrenomContributeur1.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 15) = CboPlateauDom1.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 16) = TxtTpsEstimeContributeur1.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 17) = CboNomPrenomContributeur2.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 18) = CboPlateauDomaineContributeur2.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 19) = TxtTpsEstimeContributeur2.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 20) = CboNomPrenomContributeur3.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 21) = CboPlateauDomaineContributeur3.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 22) = TxtTpsEstimeContributeur3.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 23) = CboNomPrenomContributeur4.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 24) = CboPlateauDomaineContributeur4.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 25) = TxtTpsEstimeContributeur4.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 26) = CboNomPrenomContributeur5.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 27) = CboPlateauDomaineContributeur5.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 28) = TxtTpsEstimeContributeur5.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 30) = TxtDescription.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 31) = TxtCanal.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 32) = TxtDateDebut.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 33) = TxtDateFinReelle.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 34) = TxtTpsReel.Value
    Sheets("Saisie des activités").Cells(no_ligne1, 35) = TxtLienDossier.Value

    End If
    Next no_ligne1
    Application.ScreenUpdating = True
    Unload Me
    End Sub

Merci à vous pour votre aide !

Bonjour,

Une rondelle de code ne permet pas de comprendre ce qui ne colle pas...

Fournir au minium un classeur avec la feuille "Saisie des activités" et le userform intégral.

A+

Bonjour,

Le voici en pièce jointe de mon message

Merci !

Bonjour,

Je pense que le mieux c'est de ne permettre l'affichage de l'userform "Modification d'une activité" que lorsqu'il y a quelque chose à modifier.

Donc tu vérifies que la cellule n'est pas vide quand on double-clique :

If Target <> vbNullString Then
'tout le code de BeforeDoubleClick ici
endif

Pourquoi remplir les valeurs dans l'userform directement de la Worksheet ? Le mieux c'est de le faire dans la procédure UserForm_Initialize().

On peut utiliser :

Dim nbRow As Long
nbRow = Selection.Row

Pour récupérer la ligne de là où on a cliqué est travaillé avec dans l'userform.

Exemple :

CboPrenomNom.Text = Cells(nbRow, "G")

et pour remplir la feuille c'est la même chose en inversant les valeurs :

Cells(nbRow, "G") = CboPrenomNom.Text

Ensuite, il faut enlever les 2 lignes :

Rows(ActiveCell.Row).Select
Cells(ActiveCell.Row).Select

Dans le Worksheet_BeforeDoubleClick(), parce qu'elles font changer le focus par rapport à ce que l'on a cliquer.

Enfin je trouve dommage d'utiliser 2 userform quasiment identique, pourquoi ne pas juste mettre en .visible = false les valeurs que l'on ne souhaite pas voir apparaître est éditer juste quelque label.

bonjour

salut au passage Millaï

pourquoi un formulaire ? pour faire "pro" ?

ton fichier est bien structuré, je te conseille de faire les saisies directement dans la base de données

c'est simple , clair, on voit les totaux en direct live, on est responsable de la ligne qu'on saisit.

aucune complilcation

compatible tablettes, smartphones, Mac, OpenOffice gratuit

pas de risque de virus

te durera 20 ans

au passage "mettre sous forme de tableau" te facilitera la vie !

tu connais ?

Salut acorvis,

Donc, j'avais bien raison quand même!

If Range("d" & no_ligne1) = modification Then

[u]Variable 'modification' non-initialisée = "" (vide)

[/u]Donc, selon ton code,

'Si la dernière cellule non-vide de la colonne [D] ... est vide, alors on modifie...'

Problème, évidemment!

Je vais un peu regarder tout ça parce que, sans vouloir te vexer, c'est un peu bor...

A+

Bonjour Millaï !

Merci pour la proposition, mais je suis novice dans le domaine et je n'y comprends pas grand chose

Bonjour jmd !

Si je désire faire un autre formulaire pour la modification des données, c'est parce que c'est plus pratique pour les personnes qui saisissent leurs activités. Avant c'était effectivement un tableau, mais beaucoup trop long et l'avantage avec le formulaire c'est que la saisie est beaucoup simplifiée du fait de la vue d'ensemble des champs à renseigner.

Bonjour curulis57 !

C'est effectivement le bor... mais je me débrouille en vba, j'apprends sur le tas

Du coup, comment devrais-je modifier cette procédure ?

Merci à vous tous !

Passez une bonne journée et un bon courage dans vos fonctions

re à tous

la vue d'ensemble on l'a encore mieux dans le tableau global, sans formulaire

note : si on fait 20+ saisies par jour, alors passer à Access ou autre SGBD payant ou gratuit. Les formulaires sont plus beaux et plus fiables, et on peut travailler à plusieurs sur le fichier

sous Excel, il faut éviter les formulaires sur mesure

note 2 : on souhaite bon travail

le courage est réservé pour des moments où il faut surmonter sa peur !

bon travail à tous

Salut acorvis,

j'ai bien avancé sur ton fichier même s'il me fait maintenant des misères d'accès refusé (erreur 70 si mes souvenirs sont bons) sur des ComboBox...

De ton côté as-tu compris mes explications concernant le pourquoi du comment du souci?

Initialise la variable (comment encore...) ... ah oui, 'modification' qui doit être le n° de ligne correspondant à l'enregistrement modifié.

Dans ton code, il est égal à zéro donc, forcément, l'enregistrement ne s'exécute pas.

Je n'aurai encore accès à ton fichier que demain en fin de soirée.

Patience!

A+

Bonjour Curulis,

Désolée pour la lenteur de ma réponse.

Oui j'ai compris que mon code n'était pas bien exprimé.

Mais je ne sais pas alors comment faire pour qu'il puisse valider la saisie.

Merci encore pour ton aide

Bonjour jmd,

Merci pour tes recommandations.

note 2 : on souhaite bon travail

le courage est réservé pour des moments où il faut surmonter sa peur !

bon travail à tous

Je travaille sur un chantier, donc j'ai toujours pour habitude de souhaiter un bon courage. D'ailleurs le courage n'est pas que réservé pour affronter une peur, mais aussi la fatigue ! Etant donné que je méconnais votre état physique, je vous souhaite alors un bon courage dans vos fonctions

Bonjour,

Oui j'ai compris que mon code n'était pas bien exprimé.

C'est un euphémisme !

J'ai longuement hésité avant de continué de répondre sur ce sujet car je n'aime pas donner l'impression de n'être que négatif.

Dans un premier temps, bien que ton cas soit un tout peut peu différent j'ai envie de te renvoyer sur cette autre sujet ou je donne également un avis à un autre débutant.

Tu l'auras compris : pour moi ta production est inexploitable. De plus ton fichier joint est tellement minimaliste qu'il ne donne même pas envie de se pencher dessus...

A défaut de vrai fichier un pseudo fichier (comportant au moins un enregistrement "plausible") est nécessaire pour bien se mettre dans des conditions réelles d'utilisation.

Mais la route risque fort d'être longue avant d'arriver à un résultat intéressant car ton niveau d'expertise de VBA semble vraiment très faible.

A+

Bonjour galopin01,

Le but de cette plateforme est de décourager les personnes qui se lancent dans le vba ou bien ? lol

Je me débrouillerai comme je le pourrais parce que je vois que ce j'essaie de faire au final, ne sert à rien et n'aboutira à rien. Donc j'ai perdu du temps à comprendre le minium de ce qu'aujourd'hui je connais et de l'énergie et du temps. J'aurais pu vaquer à d'autres activités que de me casser la tête pour mes ingénieurs pour leur facilité la tâche.

Merci des conseils et des encouragements et bon travail.

Je suis le premier à me plaindre que certains renvoient trop systématiquement les nouveaux venus à leurs études quand ils abordent un sujet sous l'angle VBA.

Il faut comprendre qu'un UserForm de saisie / Modification... est tout sauf un exercice de programmation élémentaire.

Donc mon but n'est pas de décourager les nouveaux venus. Le découragement vient aussi surement quand on a passé un mois voire plus à ferrailler sur un tas de sujets complexes et qu'on se rend compte en fin de course qu'on n'aboutit à aucun résultat exploitable. Alors oui si prévenir les gens de ce qui les attends est dissuasif alors je suis désolé. Quelques uns passent outre et persévèrent et je me suis adressé à toi dans ce sens. Mais c'est vrai que cela demande beaucoup d'humilité, une longue patience et une ténacité dopé par une motivation assez exceptionnelle.

La programmation VBA reste comme la plupart des autres langages de programmation d'abord un apprentissage de langue, ou le "petit nègre" n'a pas sa place, tout l’intérêt d'une programmation est de présenter zéro défaut : Un truc peu fiable étant très rapidement rejeté par les victimes potentielles...

Cordialement.

Je peux comprendre et merci pour tes explications.

Bonne continuation

bonjour à tous

ce qu'il faut comprendre, c'est que pour un débutant, un formulaire "est " simple. Si simple que TOUS les progiciels ont des formulaires. Mais ce n'est qu'une apparence.

D'ailleurs AUCUN progiciel n'est fait sous Excel.

en réalité, un formulaire en VBA nécessite un bon apprentissage et donc un long investissement en temps. Ceci en vue d'aboutir à un résultat fiable.

il y a encore 3 jours, je déconseillais totalement VBA, à tout le monde !

depuis je suggère un apprentissage d'Excel préalable (il y a du boulot avec TOUS les menus ! ) durant 1 an. Et ensuite seulement d'apprendre VBA, et ensuite seulement de faire des macros en milieu professionnel.

Salut Acorvis,

Salut l'équipe,

voici ton fichier qui nécessite encore un peu de travail, malgré tout.

En effet, le temps me manque pour fixer la vérification du formulaire avant enregistrement.

  • tu peux éliminer tes deux jolis boutons colorés, devenus inutiles ;
  • tant qu'à faire, j'ai aussi éliminé un des deux USF, quasi identique, inutile ;
  • un double-clic démarre soit un nouvel enregistrement ou une modification avec la ligne concernée qui s'allume :
* [A...] = "" -> nouvel enregistrement (tu peux évidemment double-cliquer n'importe où en-dessous du tableau) ;

* [A...] <> "" -> modification.

- le code de chargement de l'USF est reproduit ci-dessous : plus court, non ?

* tous les contrôles portent maintenant le même nom "ctrl" + leur index correspondant à leur colonne dans 'Saisie des activités" ;

* une boucle suffit à charger ou enregistrer.

Je te laisse regarder à ton aise.

Private Sub UserForm_Activate()
'
Me.ctrl1.Caption = Date
With Sheets("Saisie des activités")
    Me.BtnModifier.Caption = IIf(.[A1] = 0, "Enregistrer", "Modifier")
    For x = 2 To 36
        If x <> 30 And .[A1] > 0 Then Me.Controls("ctrl" & x).Text = .Cells(.[A1], x)
        If x > 33 Then
            Me.Controls("ctrl" & x).Visible = IIf(.[A1] = 0, False, True)
            Me.Controls("lbl" & x).Visible = IIf(.[A1] = 0, False, True)
        End If
    Next
End With
'
End Sub

A+

Bonjour curulis57,

Je te remercie énormément pour ton implication parce que c'est tout simplement ce que je désirais avoir.

Je pourrais moî-même ajouter les contrôles, ce n'est pas compliqué ça au moins

C'est vraiment tout ce que je voulais, pas plus pas moins merci encore pour ton travail !

Bonne continuation

Salut Arcovis,

comme promis, la séquence de validation de ton Userform avec addition des 'Temps estimés'.

Private Sub BtnModifier_Click()
'
Dim tData(), tCheck(), iRow%
tCheck = Array(0, 8, 9, 4, 6, 7, 32, 5, 12, 11, 2, 33, 3, 34, 13, 14, 10, 35, 31, 36)
tData = Array("", "", _
        "Veuillez saisir la date de la demande !", "Veuillez saisir la date de fin estimée !", "", _
        "Veuillez sélectionner dans la liste déroulante le type d'activité", _
        "Veuillez saisir le prénom et le nom de la personne à l'origine de la demande !", "", _
        "Veuillez sélectionner dans la liste déroulante votre prénom et nom !", _
        "Veuillez sélectionner dans la liste déroulante le plateau et domaine !", _
        "Veuillez saisir le temps passé sur l'activité ! (exemple : 35)", "Veuillez sélectionner l'état de votre action", _
        "Veuillez saisir le sujet de votre action", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", _
        "Veuillez saisir la description de l'action !", _
        "Veuillez saisir le canal par lequel vous avez reçu la demande !" & Chr(10) & "(exemple : e-mail, DAS, etc.)", _
        "Veuillez saisir la date de début de l'activité !", "", "", "")
'
For x = 1 To 19
    If tData(tCheck(x)) <> "" And Me.Controls("ctrl" & tCheck(x)) = "" Then
        MsgBox CStr(tData(tCheck(x))), vbCritical + vbOKOnly, "Encodage - info"
        Me.Controls("ctrl" & tCheck(x)).SetFocus
        Exit Sub
    End If
Next
'
Application.EnableEvents = False
Application.ScreenUpdating = False
'
With Sheets("Saisie des activités")
    iRow = IIf(.[A1] > 0, .[A1], .Range("A" & Rows.Count).End(xlUp).Row + 1)
    For x = 1 To 36
        .Cells(iRow, x) = Me.Controls("ctrl" & x)
    Next
End With
'
MsgBox "Un bon courage dans vos fonctions :-)"
'
Unload Me
Application.ScreenUpdating = True
Application.EnableEvents = True
'
End Sub

A+

Je travaille sur un chantier, donc j'ai toujours pour habitude de souhaiter un bon courage. D'ailleurs le courage n'est pas que réservé pour affronter une peur, mais aussi la fatigue ! Etant donné que je méconnais votre état physique, je vous souhaite alors un bon courage dans vos fonctions

re à tous

acorvis,

ça part d'un bon sentiment, mais je (moi perso tout seul ) préfère réserver "courage" en cas de danger

bon travail

bon Excel à tous

Salut Acorvis,

voilà, j'ai simplement ajouté ceci à ton code.

    .Range("AD" & iRow).FormulaLocal = "=J" & iRow & "+Q" & iRow & "+T" & iRow & "+W" & iRow & "+Z" & iRow & "+AC" & iRow

A+

Rechercher des sujets similaires à "userform vba doubleclick"