L'oeil des experts

JONEY76

XLDnaute Occasionnel
Bonjour,

J'ai un problème de code, c'est surtout que je souhaiterai comprendre

Code:
'#################################################
'MODIFIER LE TABLEAU A PARTIR DES TEXTBOX  bouton valider les modifications
'#################################################
'
Private Sub CommandButton2_Click()

'Déclarer les variables
Dim ligne As Long
Dim i As Long
Dim idx As Long

On Error Resume Next

With Sheets("BD1") 'feuille contenant les données

    For i = 1 To 44 'besoin d'infos sur le 44, nombre de textbox??
        .Cells(ligne, i) = Controls("Textbox" & i + 2) '
    Next
    
End With


With LSVB 'avec la listview

    .ListItems.Item(idx) = TB2 'l'index = la valeur dans la textbox TB2
    
    For i = 1 To 41
        .ListItems(idx).SubItems(i) = Controls("TextBox" & i + 2)
    Next
      
End With

End Sub


Dans un userform, j'ai une listview de plus de 40 colonnes et quand je clique une ligne, les données apparaissent dans les textbox, jusqu'ici tout fonctionne

Là où ça bloque, c'est quand j'appuie sur le bouton modifier les données, ca beugg, mais je ne comprends pas ...

Fichier non disponible mais reste du code dispo au cas ou

Merci d'avance !!
 

Pièces jointes

  • Sans titre.jpg
    Sans titre.jpg
    46.6 KB · Affichages: 113
  • Sans titre.jpg
    Sans titre.jpg
    46.6 KB · Affichages: 120
  • Sans titre.jpg
    Sans titre.jpg
    46.6 KB · Affichages: 123
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : L'oeil des experts

bonsoir

plusieurs questions !
Dim ligne As Long
Dim idx As Long
on ne voit pas ligne est idx initialisé !?

tu as 46 Textbox ?
For i = 1 To 44
. . . Controls("Textbox" & i + 2) !?

puis 43
For i = 1 To 41
.ListItems(idx).SubItems(i) = Controls("TextBox" & i + 2)
 
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : L'oeil des experts

Bonsoir joney76,

Heureusement que tu as changé ta signature, sinon j'y croirais pas...

Arretons le tarot de Marseille dans ses expressions démesurées...
Arretons le tarot chinois auquel personne ne comprend rien...
Arretons le tarot celtique trop ancien pour parler de VBA...
Peut-être le tarot des Anges qui permet de survoler tout cela...

Que veux-tu que l'on fasse avec ton bout de code ?????

C'est le fichier qu'il faut....

Bonne soirée.

Jean-Pierre
 

JONEY76

XLDnaute Occasionnel
Re : L'oeil des experts

En fait, j'ai un autre fichier avec le meme code et qui fonctionne à merveille

Dans mon cas j'ai juste fais un copier coller et boom ca plante

Mon fichier fait 7 méga, et il travaille en réseau etc etc donc "confidentiel"

Savez vous ce que je dois mettre pour valider mes 44 textbox dans la feuille BD1 ??
 

Roland_M

XLDnaute Barbatruc
Re : L'oeil des experts

je te répète que tu dois commencer par initialiser Ligne qui est = 0
car à Cells(ligne, i) tu as un plantage !?

ensuite, et seulement, tu pourras voir ailleurs !


EDIT quand ça plante, tu ballades le curseur souris sur les variables,
et tu verras s'afficher les valeurs en cours !
 
Dernière édition:

JONEY76

XLDnaute Occasionnel
Re : L'oeil des experts

Je balade le curseur

ligne=0

Ce qu'il me manque en fait, c'est le détail, vu que je suis en mode apprentissage je prends beaucoup de note

Connais tu une façon de faire, plus simple ??


Voici le code qui affiche les données dans les textbox

Code:
'#################################################
'REMPLIR LES TEXTBOX APRES AVOIR SELECTIONNER UNE LIGNE
'#################################################

Private Sub LSVB_Click()
Dim J
Dim idx As Long
Dim ligne As Long


With LSVB
If .ListItems.Count = 0 Then Exit Sub
idx = .SelectedItem.index
ligne = CInt(.ListItems(.SelectedItem.index).ListSubItems(42).Text)
TB2 = .SelectedItem
    For J = 1 To .ColumnHeaders.Count - 2
        Controls("TextBox" & J) = .ListItems(.SelectedItem.index).ListSubItems(J).Text
    Next
End With
End Sub
 
Dernière édition:

Roland_M

XLDnaute Barbatruc
Re : L'oeil des experts

eh bien voilà déjà une erreur !
mais il y a aussi idx à voir !

pour t'aider impossible !
comme te l'as dis jeanpierre(et il sait de quoi il parle) sans fichier on ne sais pas d'où tu viens ni où tu vas !
 
Dernière édition:

jeanpierre

Nous a quitté
Repose en paix
Re : L'oeil des experts

Re,

"etc etc donc "confidentiel",

Qui a-t'il de confidentiel ? Des noms, des adresses et téléphone, suffit de modifier par :

momo1, momo2 pour les noms, les adresse pareil... les numéros de téléphone peuvent être rapidement modifiés aussi. Pour le reste, les valeurs, il n'y a rien de confidentiel, ce ne sont que quelques chiffres....

Quand on veut, on peut. Donc, le fichier tel que décrit et le code, ensuite cela risque d'être simplement simple.
 

Roland_M

XLDnaute Barbatruc
Re : L'oeil des experts

tu peux raccourcir ceci ...
.ListItems(.ListItems.Count).ListSubItems.Add , , Cel.Offset(0, 1)
.ListItems(.ListItems.Count).ListSubItems.Add , , Cel.Offset(0, 2)
... jusqu'à 42 !

avec cette boucle
For I = 1 To 42
.ListItems(.ListItems.Count).ListSubItems.Add , , Cel.Offset(0, I)
Next

à savoir que tu as deux fois la même chose !
à Initialise et à CommandButton3 identique !

dans Inititialise tu supprimes et tu mets > InitLSVB
dans CommandButton3 idem tu mets uniquement > InitLSVB

et tu fais un copier/coller de ce Sub

Code:
Private Sub InitLSVB() 'init Me=cet userform et LSVB =nom de la listview
On Error Resume Next
With Me.LSVB
     With .ColumnHeaders
          .Clear
          .Add , , "ARTICLE", 60 '60=dimension de la colonne de la listview '1
          .Add , , "DESIGNATION", 140 '2
          .Add , , "1", 25 'devis/LOG
          .Add , , "2", 25 'methodes
          .Add , , "3", 25 'modelage
          .Add , , "4", 25 ' fonderie
          .Add , , "5", 25 ' para
          .Add , , "6", 25 'controle
          .Add , , "CHANTIER TGAO", 35 '6
          .Add , , "CHANTIER", 40 '7
          .Add , , "NUANCE TGAO", 35 '8
          .Add , , "NUANCE", 40 '9
          .Add , , "COULEE SPECIALE", 40 '10
          .Add , , "CLIENT", 80 '11
          .Add , , "QUANTITE", 60 '12
          .Add , , "RECEPT COMMANDE", 60 '13
          .Add , , "TEMPS MODELAGE", 60 '14
          .Add , , "REMISE DOSSIER", 60 '15
          .Add , , "DELAI PT", 60 '16
          .Add , , "MOULAGE", 60 '17
          .Add , , "CONTROLE PT", 60 '18
          .Add , , "TEMPS D'ETUDE", 35 '19
          .Add , , "DATE LIMITE LANCEMENT", 35 '20
          .Add , , "DATE THEORIQUE DE FIN", 35 '21
          .Add , , "DEBUT ETUDE", 60 '22
          .Add , , "PREPARATEUR", 60 '23
          .Add , , "FIN ETUDE", 60 '24
          .Add , , "CREA/ADAPT", 60 '25
          .Add , , "LIMITE LANCE MODEL", 60 '26
          .Add , , "DEBUT MODELAGE", 60 '27
          .Add , , "MISE A DISPO FONDERIE", 60 '28
          .Add , , "MODELEUR", 60 '29
          .Add , , "OSERVATIONS", 60 '30
          .Add , , "COULEE PT", 60 '31
          .Add , , "NOMBRE DE PIECES", 60 '32
          .Add , , "DECOCHAGE", 60 '33
          .Add , , "FIN PARA", 60 '34
          .Add , , "RESULTAT PT", 60 '35
          .Add , , "BON A COULER", 60 '36
          .Add , , "DEFAUT", 60 '37
          .Add , , "DESCRIPTION", 60 '38
          .Add , , "INFO", 60 '39
          .Add , , "INDEX", 60 '40
     End With
     .View = 3                  ' type Report
     .Gridlines = True          ' affichage de lignes
     .FullRowSelect = True      ' sélection complète de la ligne
     .HideColumnHeaders = False ' afficher les en-têtes de colonnes
     .LabelEdit = 1             ' ne pas autoriser la saisie
End With

'Remplir la listview avec les données de la base de la feuille BD1
'Afficher les données jusqu'à la dernière ligne trouvée
Dim TxtTotal2, Plage As Range, Cel As Range, I
LSVB.ListItems.Clear
With Sheets("bd1")
 Set Plage = .Range("A4:A" & .Range("A65000").End(xlUp).Row)
 For Each Cel In Plage
     With LSVB
      .ListItems.Add , , Cel
       For I = 1 To 42
        .ListItems(.ListItems.Count).ListSubItems.Add , , Cel.Offset(0, I)
       Next
     End With
 Next
End With

'inscrire le nombre de lignes trouvées dans le label12
TxtTotal2 = LSVB.ListItems.Count
Label12 = TxtTotal2
End Sub
 

Discussions similaires