VBA afficher et modifier userform

alexleng

XLDnaute Nouveau
Bonjour à tous
Je sais que ce post existe mais je n'ai pas trouvé de reponses à mes questions et surtout des exemples.
Très débutant en VBA je souhaites creer appeler et modifier les données du formulaire
Creation ok
Zero pointé pour appeler et enregistrer les modifs via un combobx1 =num_demande

Puis-je avoir des exemples, aides

merci beaucoup
 

Pièces jointes

  • dep.xls
    112.5 KB · Affichages: 248
  • dep.xls
    112.5 KB · Affichages: 327
  • dep.xls
    112.5 KB · Affichages: 310

Papou-net

XLDnaute Barbatruc
Re : VBA afficher et modifier userform

Bonsoir alexleng, et bienvenue à toi,

Ci-joint ton fichier partiellement complété.

J'ai rajouté une ligne à la fin de la procédure Private Sub UserForm_Initialize()

J'ai crée l'événement Private Sub num_demande_Change() dans le module Userform1. Il te reste à compléter ce code car je n'ai pas bien saisi toutes les correspondances de cases et de colonne.

Voilà qui, je crois, t'aidera à continuer ton programme.

N'hésite pas à revenir en cas de besoin.

Cordialement.
 

Pièces jointes

  • Copie de dep.xls
    119 KB · Affichages: 479

alexleng

XLDnaute Nouveau
Re : VBA afficher et modifier userform

Bonjour Papou-net

Un grand emrci pour votre aide début de semaine. J'ai pu en effet completer les codes et tout est ok. Cependant je reviens vers vous car je souhaiterais que mes données puis être modifiées quand on rappelle celles-ci.
Ce qui se passe c'est que la modification rajoute une ligne et ne fait pas la modifs sur la ligne selectionnée

Puis-je soliciter votre aide

Merci

Cordialement
 

Pièces jointes

  • DEP v.03.xls
    124 KB · Affichages: 286
Dernière édition:

Papou-net

XLDnaute Barbatruc
Re : VBA afficher et modifier userform

Bonsoir alexleng,

Voici ton fichier adapté à ta demande.

Je n'ai pas utilisé le bouton rouge (ENR. MODIFICATIONS) mais je l'ai conservé. Un clic sur le bouton violet (que j'ai renommé ENREGISTRER) affiche un message de confirmation en cas de modification d'une demande existante, sinon elle enregistre la nouvelle demande à la suite dans la liste.

Tu constateras que j'ai grandement condensé le code lié à ce bouton en utilisant une boucle de lecture des contrôles du formulaire. Dans la propriété Tag des TextBox et ComboBox, j'ai écrit la référence littérale de la colonne correspondante. La boucle lit les Tag et s'ils contiennent une référence, elle affecte la valeur de la cellule rattachée. J'ai utilisé une boucle de même type pour l'initialisation du formulaire, mais en "sautant" la colonne A.

Par ailleurs, j'ai cru remarquer une erreur dans ton code : dans le cadre TAXI, les deux premières lignes comportent les mêmes références de cellule. Dans le doute, je les ai conservés mais si tu dois les rectifier, il te reste à modifier les propriétés Tag des contrôles suivants (sans avoir besoin de changer le code).

En te souhaitant bon courage.

Cordialement.
 

Pièces jointes

  • Copie de DEP v.03.xls
    84.5 KB · Affichages: 493

imallinman

XLDnaute Nouveau
Re : VBA afficher et modifier userform

bonjour,

Merci de ma part d'avoir proposé cette solution. ça m'a été très util.

Par contre, j'ai un souci d'insertion. C'est à dire que au momant de l'insertion ou la modification, la boucle sur les controls ne prends pas en compte leurs valeurs au dela du deuxieme control ! J'oublie peut être de faire quelque chose ? A part donner le nom de mes colonnes du feuille excel aux tags de mes controls, il faut faire autre choses aussi ?

Je suis d'autant plus étonné, puisque ma boucle sur les controls récupère bien les valeurs de mes cellules et les mets bien dans mes controls au moment de l'affichage dans userform ! Dans tous ! Mais pas à l'insertion et modification !

Dans ce fichier joint, les colonnes A et B fonctionnent parfaitement mais la colonne C ne fonctionne pas !!

Une idée ?

Merci encore
 

Pièces jointes

  • Formulaire_maj.zip
    13.1 KB · Affichages: 301

imallinman

XLDnaute Nouveau
Re : VBA afficher et modifier userform

En fait en gros, dans le fichier Copie de DEP v.03.xls , si j'ajoute un TextBox (avec un Tag DA par exemple) à cette UserForm, il n'est pas prise en compte ! A part lui donner un Tag, qu'est-ce qu'il faudrait faire d'autre ?
 

imallinman

XLDnaute Nouveau
Re : VBA afficher et modifier userform

En fait le souci vient de cette condition de la fonction Btn_OK_Click() :

If Not ctl.Tag = "" Then

Il considère le Tag de ma nouvelle TextBox (DA par exemple) de mon TextBox comme vide ("") !! En tout cas il ne le prend pas en compte !

Tandis que si j'utilise cette condition :

If ctl.Tag > "A" Then

Il reconnait bien mon nouveau control avec le Tag DA et effectue la mise à jour.
icon12.png

Le probleme c'est que là, je perds la Colonne A et je ne peux plus créer un nouveau enregistrement !
icon9.png


J'ai bien essayé de changer la formulation de ma condition comme :

If (ctl.Tag > "A") Or (ctl.Tag = "A") Then
If ctl.Tag > "A" Or ctl.Tag = "A" Then
If ctl.Tag <> "" Then
If Not ctl.Tag = Null Then
If ctl.Tag >= "A" Then

sans résultat !
icon9.png
 
Dernière édition:

imallinman

XLDnaute Nouveau
Re : VBA afficher et modifier userform

Bonjour Robert,
Merci beaucoup pour cette solution.

Effectivement j'ai pu ajouter des textbox et ça fonction bien. pas de souci.

Mais on n'est plus dans les TAGs alors !

En fait dans mon projet, j'ai 400 champs à insérer et mettre à jour ! Avec ta solution, si j'ai bien compris, il faudrait 400 lignes de code pour que tout mes champs soit prise en compte. Pour quoi pas ! si ça fonction c'est déjà super.

Je reste quand même toujours curieux de savoir pour quoi je ne peux pas ajouter des champs supplementaire dans le Userform du fichier Copie de DEP v.03.xls‎ avec le système des TAGs ! ça me semble plus facile vu le nombre assez élevé de mes champs !

Bonne journée à tous,
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA afficher et modifier userform

Bonjour le fil, bonjour le forum,

heu non... Les Tag c'est Papou-net. C'est d'ailleurs peut-être plus simple comme solution mais j'ai pas l'habitude.

Pour 400 champs voilà comment je procèdrerais :
• je nommerais les contrôles : ctrl1 (la combobox) à ctrl400
• j'utiliserais une boucle :
Code:
Dim i As Integer
For i = 1 To 400
     Sheets("sheet1").Cells(li, i).Value = Me.Controls("Ctrl" & i).Value
Next i
Ton fichier modifié dans ce sens :
 

Pièces jointes

  • Imallinman_v02.xls
    49 KB · Affichages: 303

imallinman

XLDnaute Nouveau
Re : VBA afficher et modifier userform

Ah oui, c'est mieux comme ça. Merci beaucoup. C'est très sympat.

En fait la différence avec les TAGS, C'est que je devrais juste ajouter une entete pour chaque colonne indiquant son numéro, de 1 à 400. A part cette action supplémentaire, je pense qu'au niveau du confort visuel dans la reconnaissance des champs, un chiffre n'est pas meilleur ou pire qu'une combinaison de lettres !

En revanche il y a un inconveignant assez important, C'est que je suis obligé d'avoir absolument, dans mon UserForm, un Control pour chaque colonne. Je n'ai pas le droit d'avoir un vide dans mes controls. par exemple si dans ma colonne 8 de ma feuille excel j'ai une information que je ne souhaite pas entrer dans ce jeu de control (donc pas de ctrl8), la boucle se casse et ne comprend pas qu'il n y ait pas de ctrl8 !! ça ne peut pas sauter de ctrl7 à ctrl9 quoi ! Tandis qu'avec les TAGS ca saute tout seul !! :eek:)

La solution serait de vérifier au début de chaque tour de ma boucle, l'existance de mon control par une condition genre IF EXISTE ! C'est bien ça ? Je suis tout débutant en vba !

Bonne soirée à tous
 

Papou-net

XLDnaute Barbatruc
Re : VBA afficher et modifier userform

Bonjour imallinman, Robert, le Forum,

Pas forcément très élégant comme solution, mais ça devrait fonctionner :

Code:
Dim i As Integer
On Error ResumeNext
For i = 1 To 400
          Sheets("sheet1").Cells(li, i).Value = Me.Controls("Ctrl" & i).Value
Next i

Bonne journée.

Cordialement.
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA afficher et modifier userform

Bonjour le fil, bonjour le forum,

Ou alors,tu utilises comme tag pour chaque contrôle la colonne qui lui est associée (en lettre en en chiffre) et ça donnerait :
• En lettre (Tag du Ctrl1 par exemple = A) :
Code:
Dim i As Integer
For i = 1 To 400
Sheets("sheet1").Range(me.Controls("Ctrl" & i).Tag & li).Value = Me.Controls("Ctrl" & i).Value
Next i

• En chiffre (Tag du Ctrl1 par exemple = 1) :
Code:
Dim i As Integer
For i = 1 To 400
Sheets("sheet1").Cells(li, Cint(me.Controls("Ctrl" & i).Tag)).Value = Me.Controls("Ctrl" & i).Value
Next i
Ainsi tu peux sauter des colonnes tout en bouclant sur tes contrôles...
 

Papou-net

XLDnaute Barbatruc
Re : VBA afficher et modifier userform

RE :

Autres formes de boucles qui n'exigent pas de modifier le code selon le nombre de TextBox créés :

En utilisant l'indice du TextBox

Code:
For Each tb In Me.Controls
  If TypeOf tb Is MSForms.TextBox Then
    tb.Value = Sheets("Sheet1").Cells(Lg, CInt(Replace(tb.Name, "ctrl", "")))
  End If
Next

En utilisant le Tag :

Code:
For Each tb In Me.Controls
  If TypeOf tb Is MSForms.TextBox Then
    tb.Value = Sheets("Sheet1").Range(tb.Tag & Lg)
  End If
Next

Dans les deux cas, la ligne de définition de la variable (Dim i as...) peut être supprimée puisque les boucles ne sont plus indicées.

Il reste bien entendu que, dans ces exemples, il ne doit pas y avoir de TextBox dont le nom diffère de "ctrl" + indice. Sinon, il faut modifier la condition de test, par ex :

Code:
  If tb.Name Like "ctrl*" Then

Cordialement.
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 201
Messages
2 086 170
Membres
103 151
dernier inscrit
nassim