Microsoft 365 Transférer valeurs de Textbox et ComboBox dans classeur

Emli15

XLDnaute Nouveau
Bonjour, bonjour,

Après avoir inspecté tous les forums possibles sur le sujet, je désespéré légèrement, voilà mon problème, je rentre des valeurs dans un formulaire classique et je veux ensuite les transférer dans la dernière ligne de mon tableau de ma feuille "Tab" mais voilà j'ai essayé tout ce que j'ai trouvé mais avec toujours une erreur : Ce lien n'existe plus

Voici le code :
VB:
Private Sub ValButtonAdd_Click()
Dim NumBL, Flag
Dim T1, T2, T3, C1, C2, C3
Dim Ligne As Long

Set Ws1 = Sheets("Tab")
Ligne = Ws1.Range("a65536").End(xlUp).Row + 1
NumBL = Range("G" & Rows.Count).End(xlUp).Value


If Not TextBox1.Text = "" Then
    Flag = Flag + 1
End If
If Not TextBox2.Text = "" Then
    Flag = Flag + 1
End If
If Not TextBox3.Text = "" Then
    Flag = Flag + 1
End If
If Not ComboBox1.Text = "" Then
    Flag = Flag + 1
End If
If Not ComboBox2.Text = "" Then
    Flag = Flag + 1
End If
If Not ComboBox3.Text = "" Then
    Flag = Flag + 1
End If

If Not Flag = 0 Then
 If MsgBox("Confirmez-vous l'insertion de cette nouvelle armoire ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
 
  Ws1.Range("A" & Ligne).Value = Me.TextBox1.Value
  Ws1.Range("B" & Ligne).Value = Me.ComboBox1.Value
  Ws1.Range("C" & Ligne).Value = Me.ComboBox2.Value
  Ws1.Range("D" & Ligne).Value = Me.TextBox2.Value
  Ws1.Range("E" & Ligne).Value = Me.TextBox3.Value
  Ws1.Range("F" & Ligne).Value = Me.ComboBox3.Value
  Ws1.Range("G" & Ligne).Value = NumBL + 1
 
  MsgBox ("Actualisation")
  Unload Me
  UserForm4.Show
 
 Else
    MsgBox ("Veuillez renseigner au moins un critère")
 End If
  
End If

End Sub

Et ce qui m'étonne c'est que quand je teste "Ligne" elle renvoie bien la bonne valeur et mon bouton modifier ci-dessous, lui marche parfaitement.
Code:
Private Sub ValButtonModif_Click()

Set Ws1 = Sheets("Tab")
Dim Ligne As Long
If Me.ComboBox4.ListIndex = -1 Then Exit Sub
  Ligne = Me.ComboBox4.ListIndex + 2
  
  Ws1.Range("A" & Ligne) = Me.TextBox1.Value
  Ws1.Range("B" & Ligne) = Me.ComboBox1.Value
  Ws1.Range("C" & Ligne) = Me.ComboBox2.Value
  Ws1.Range("D" & Ligne) = Me.TextBox2.Value
  Ws1.Range("E" & Ligne) = Me.TextBox3.Value
  Ws1.Range("F" & Ligne) = Me.ComboBox3.Value
  Ws1.Range("G" & Ligne) = Me.TextBox5.Value
 
  MsgBox ("Actualisation")
  Unload Me
  UserForm4.Show
 
 
End Sub

Merci d'avance !
 
Solution
Non, si tu as a vraiment besoin, c'est possible de le faire.
Attention toutefois
Dim Ws1 As Worksheet
En Top de Private Module d'un UserForm aura la même portée que
Private Ws1 As Worksheet
(C'est à dire que dans le UserForm)

Pour que cette Ws1 soit accessible "de partout", il faut la déclarer en Top d'un Module Standard (eg Module1) comme ceci :
Public Ws1 As WorkSheet

Mais tu dois faire attention surtout au Set d'Objet :
Set Ws1 = ThisWorkbook.Worksheets("Tab")
Là VBA n'ira pas te faire une erreur 1004, si tu as un Book1.xlsx ouvert et actif entretemps...

@+Thierry

fanfan38

XLDnaute Barbatruc
Bonjour
En l'absence de fichier...
J'essaierai ça:
VB:
If Not TextBox1.Text = "" Then Flag = Flag + 1
If Not TextBox2.Text = "" Then Flag = Flag + 1
If Not TextBox3.Text = "" Then Flag = Flag + 1
If Not ComboBox1.value = "" Then Flag = Flag + 1
If Not ComboBox2.value = "" Then Flag = Flag + 1
If Not ComboBox3.value = "" Then Flag = Flag + 1
If Flag = 0 Then
    MsgBox ("Veuillez renseigner au moins un critère")
    exit sub
endif   

If MsgBox("Confirmez-vous l'insertion de cette nouvelle armoire ?", vbYesNo, "Demande de confirmation d'ajout") = vbYes Then
  Ws1.Range("A" & Ligne).Value = Me.TextBox1.Value
  Ws1.Range("B" & Ligne).Value = Me.ComboBox1.Value
  Ws1.Range("C" & Ligne).Value = Me.ComboBox2.Value
  Ws1.Range("D" & Ligne).Value = Me.TextBox2.Value
  Ws1.Range("E" & Ligne).Value = Me.TextBox3.Value
  Ws1.Range("F" & Ligne).Value = Me.ComboBox3.Value
  Ws1.Range("G" & Ligne).Value = NumBL + 1
 
  MsgBox ("Actualisation")
  Unload Me
  UserForm4.Show
End If

A+ François
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour @Emli15 , le Forum

Normalement le fait de cacher la Feuille ne devrait pas poser de problème, si elle se nomme toujours Sheets("Tab") évidemment.

Tu ne montres pas la ligne de code surlignée en Jaune en debug, ca aidrait pour trouver...

Bon courage
@+Thierry
 

Emli15

XLDnaute Nouveau
Merci de vos réponses !
La ligne surligné en jaune était celle-ci : Ws1.Range("A" & Ligne).Value = Me.TextBox1.Value
Je ne comprends vraiment pas ce qu'il s'est passé, j'ai fermé le fichier puis je l'ai ouvert et les boutons marchaient à nouveau. Il y a vraiment des choses que je ne saisis pas encore, peut être qu'a force de trop de manip les pages s'étaient reprotégées ou quelque chose de ce style.

Mais merci !
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Re bonjour

Ok , à mon avis tu avais un autre classeur ouvert et actif...

La "parade" c'est de toujours bien tout déclarer et complètement...

Sub MySub ()
Dim Ws1 As Worksheet

Set Ws1 = ThisWorkbook.Worksheets("Tab")

@+Thierry
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Non, si tu as a vraiment besoin, c'est possible de le faire.
Attention toutefois
Dim Ws1 As Worksheet
En Top de Private Module d'un UserForm aura la même portée que
Private Ws1 As Worksheet
(C'est à dire que dans le UserForm)

Pour que cette Ws1 soit accessible "de partout", il faut la déclarer en Top d'un Module Standard (eg Module1) comme ceci :
Public Ws1 As WorkSheet

Mais tu dois faire attention surtout au Set d'Objet :
Set Ws1 = ThisWorkbook.Worksheets("Tab")
Là VBA n'ira pas te faire une erreur 1004, si tu as un Book1.xlsx ouvert et actif entretemps...

@+Thierry
 

Discussions similaires

Réponses
17
Affichages
251
Réponses
4
Affichages
165
Réponses
5
Affichages
365
Réponses
6
Affichages
202

Statistiques des forums

Discussions
311 724
Messages
2 081 936
Membres
101 844
dernier inscrit
pktla