[VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à valeurs

Staple1600

XLDnaute Barbatruc
Bonjour le forum



Voici mon souci du jour:


Dans l'userform nommé modifs

quand je modifie les données dans les TextBox et que je valide
avec la commandButton [Validation des modifications]

Cela plante Excel (ici Excel 97)

Pourriez-vous,svp, me dire comment procéder pour:

-Afficher les valeurs d'une base de données dans des textbox

afin pouvoir modifier la valeur des textbox

puis réinjecter le tout dans la feuille


Merci de votre aide et de vos conseils

(je suis preneur de toute autre idée quand à l'ergonomie et la façon de faire
ce que j'essaye de faire dans le classeur joint. merci)

Staple
 

Épaf

XLDnaute Occasionnel
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

J'ai testé ton code, j'ai modifié une donnée... j'ai planté Excel... Ok.
Apparemment tu as un pb ici
Code:
Private Sub cmbMVALID_Click()
Dim RNg As Range
Set RNg = ActiveCell
Dim i As Long
    For i = 1 To 8
        RNg.Offset(0, i - 1).Value = Me.Controls("TextBox" & i).Value
    Next i
    Set RNg = Nothing
    Unload Me
End Sub
si la cellule active est A, A - 1 = 0 et la colonne 0 n'existe pas.
Evite d'utiliser Activecell. Tu connais le N° de la 1ère colonne, la ligne est celle que tu as lue... Tu as tout pour utiliser le No de ligne et le No de colonne dans cells(NoLigne, NoColonne).value
En outre je ne comprends pas le -1 mais je ne suis pas allé plus loin dans ma lecture.
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Bonjour Epaf (merci pour ton aide)

Avec ces modifs meme plantage
Code:
Private Sub cmbMVALID_Click()
Dim Ligne As Long
Dim RNg As Range
Set RNg = ActiveCell
Ligne = RNg.Row
MsgBox Ligne
Dim i As Long
For i = 1 To 8
Cells(Ligne, i).Value = Me.Controls("TextBox" & i).Value
Next i
Set RNg = Nothing
Unload Me
End Sub
 

Spitnolan08

XLDnaute Barbatruc
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Bonjour Stapple, Epaf,

Je pense que ton problème vient de la méthode employée pour charger ton combobox1. Rappelles toi Stapple : l'utilisation de la propriété RowSource est à bannir en VBA...

En effet, dès que tu modifies la saisie dans la feuille, tu déclenche le changement du Combo...................................

Va faire un tour du côté du lien qui est en bas de mon post;)

Cordialement
 

Spitnolan08

XLDnaute Barbatruc
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Re,

Donc en clair :
Code:
Private Sub UserForm_Initialize()
Me.Width = Application.Width: Me.Height = Application.Height: Me.Zoom = 125
With Sheets("BASE")
    Set Plg = .Range("A2:A" & .Range("A65536").End(xlUp).Row)
End With
ComboBox1.List = Plg.Value
End Sub
Va résoudre ton problème.

Cordialement
 

Excel_lent

XLDnaute Impliqué
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Salut à tous,

Hé oui, ce problème de source !

Avec la déclaration de « Ligne » en début de procédure (transport sur chaque macro) on peut simplifier ainsi :
Code:
Private Sub ComboBox1_Change()
   Ligne = ComboBox1.ListIndex + 2
   For i = 1 To 8
     Me.Controls("TextBox" & i).Text = Cells(Ligne, i)
   Next i
End Sub

Private Sub cmbMVALID_Click()
   For i = 1 To 8
     Cells(Ligne, i) = Me.Controls("TextBox" & i).Value
   Next i
   Unload Me
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Bonjour Spitnolan08, Excel_Lent


Merci à Monsieur Spitnolan pour avoir identifié le Row Source Pas Glop

Merci à Excel_lent pour la Déclaration en début de Procédure

(D'ailleurs à ce sujet : est-il préférable de déclarer en Public tout dans un module ex:
Public Ligne as Long

ou vaut-il mieux faire les déclarations dans le code de l'userform?)

Par ailleurs quel votre avis sur l'agencement logique du classeur

Avez-vous d'autre façon de faire?

Tous vos commentaires et aides seront les bienvenus.

Merci


A+


Staple



PS: l'utilisation du Row Source, code trouvé sur le forum
j'ai donc pensé code vba XLD= code VBA with no problemo

edit: j'ai rajouté la version modifiée pour ceux que cela pourrait intéresser
 
Dernière édition:

Spitnolan08

XLDnaute Barbatruc
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Re,
(D'ailleurs à ce sujet : est-il préférable de déclarer en Public tout dans un module ex:
Public Ligne as Long

ou vaut-il mieux faire les déclarations dans le code de l'userform?)
En fait, cela dépend de l'usage de ta variable. Si c'est une variable dont tu veux conserver la valeur quand tu passes d'une procédure à une autre, il faut la déclarer en tête de module en Public ou en Private. (A ce propos, tu peux toujours suivre le lien en bas de mes posts...;)). Si c'est une variable qui doit être initialisée dans chaque procédure il vaut mieux la déclarer dans ta procédure, sinon, il faut penser à l'initialiser.

Ah j'oubliais :
monsieur Spitnolan
Ca pourrait presque être acceptable à condition qu'il y ait une majuscule à Monsieur:p. Sinon je préfère Sire, Altesse, Majesté....:p

Cordialement
 

Épaf

XLDnaute Occasionnel
Re : [VBA] Plantage Combobox/TextBox - comment modifier valeurs txtbox relatives à va

Pour te répondre, je ne peux que te passer un exemple. Un userform lié à une base de données, un textbox par colonne. Permet la modification, l'ajout, la suppression de lignes et la recherche de données. A toi d'organiser tout ça pour ce qui est de la présentation, ce n'est pas un modèle du genre et cet exemple se limite au principe.
Pour info, l'affichage à l'ouverture se fait sur la dernière ligne renseignée... pas sur la première (!) Regarde la pièce jointe USF - Read-Write-Find.zip

PS - l'ascenseur permet de passer sur la première ligne vide pour la saisie d'une nouvelle ligne
 
Dernière édition:
Haut Bas