userform et autoincrementation

cedricc13

XLDnaute Nouveau
Bonjour,
je me permet de sollicité votre aide car je suis en train de réalisé un classeur et je ne comprend pas pourquopi mon code VB ne fonctionne pas, le debugger bloque sur la variable Lg.
l'idée de base est que chaque valeurs rentrées dans les textbox du UserForm incrémente une feuille nommé "prev"
dans les cellules de AF2 a AQ2
voici le code de mon UserForm
d avance merci de votre aide
cedric
Code:
Private Sub annuler_Click()
'Annuler
Unload Me
End Sub
Private Sub valider_Click()
'validation des objectifs
Dim Lg As Long
Dim I As Byte
Dim Tot As Double

'on travailler sur la caisse prev
With Sheets("prev")
Lg = .Range("AF2:AQ2   ").Find("*", , , , xlByRows, xlPrevious).Row
If Lg = 3 Then
MsgBox " erreur de code "
Exit Sub

End If


Lg = Lg + 1
Cells(Lg, 2).Value = Val(Replace(TextBox1, ",", "."))        ' janvier
    .Cells(Lg, 3).Value = Val(Replace(TextBox2, ",", "."))        ' fevrier
    .Cells(Lg, 4).Value = Val(Replace(TextBox3, ",", "."))        ' Mars
    .Cells(Lg, 5).Value = Val(Replace(TextBox4, ",", "."))        ' Avril
    .Cells(Lg, 6).Value = Val(Replace(TextBox5, ",", "."))        ' Mai
    .Cells(Lg, 7).Value = Val(Replace(TextBox6, ",", "."))        ' Juin
    .Cells(Lg, 8).Value = Val(Replace(TextBox7, ",", "."))        ' Juillet
    .Cells(Lg, 9).Value = Val(Replace(TextBox8, ",", "."))        ' Aout
    .Cells(Lg, 10).Value = Val(Replace(TextBox9, ",", "."))        ' Septembre
    .Cells(Lg, 11).Value = Val(Replace(TextBox10, ",", "."))        ' octobre
    .Cells(Lg, 12).Value = Val(Replace(TextBox11, ",", "."))        ' Novembre
    .Cells(Lg, 13).Value = Val(Replace(TextBox12, ",", "."))        ' décembre
    
  
  End With
  
  For I = 1 To 12
  Tot = Tot + Val(Replace(Me.Controls("TextBox" & I), ",", "."))
  Next I
  Unload Me
  End Sub
 
Dernière édition:

Robert

XLDnaute Barbatruc
Repose en paix
Re : userform et autoincrementation

Bonjour Cédric et bienvenu, bonjour le forum,

Tout d'abord il y a trois espaces dans le code après AQ2 :
Code:
Lg = .Range("AF2:AQ2   ").Find("*", , , , xlByRows, xlPrevious).Row
mais même en les supprimant ça buggue...
J'ai réécrit comme ça :
Code:
Lg = .Range("AF2:AQ2").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
Ça passe mais soit la plage AF2:AQ2 est vide et ça plante soit ça renvoie toujours la même valeur : 2.
Il faudrait que tu nous expliques cette ligne en nous disant ce que tu recherches.
Pour finir, il semberait qu'il manque un point devant le Cells de janvier...

[Édition]
Bonjour Bruno on s'est croisé... Je plussoie ! Sans fichier c'est difficile...
 

cedricc13

XLDnaute Nouveau
Re : userform et autoincrementation

BonjOur
Tout d abord merci à tout les 2 de bien vouloir m aider
En fait l idée est que la test box1 du userform incrémente la cellule af2 de la feuille prev et ainsi de suite jusqu à la text box 12 pour la cellule aq2
Je vous envoie le fichier demain
Le temps pour Moi de l anonymiser comme les règles de ce forum le demande
Encore mille merci
Cedricc13
 

cedricc13

XLDnaute Nouveau
Re : userform et autoincrementation

bonjour à tous et excuser moi d avoir été aussi long mais j ai pas mal de boulot en ce moment entre le perso et le pro !!!
bref voila le fichier anonymiser comme promis
donc vous pourrez voir le userform s' active dès qu une cellule F de la feuille accueille
il dispose de 12 textbox qui doivent alimenté la feuille prev en cellules de af2 à aq2
merci de votre aide
cedricc13
 

Pièces jointes

  • RDP ANONYM.xls
    361.5 KB · Affichages: 52

Robert

XLDnaute Barbatruc
Repose en paix
Re : userform et autoincrementation

Bonjour le fil, bonjour le forum,

Le problème est de comprendre ce que tu voudrais que la macro fasse... Je me suis bien pris la tête et je te propose quelque chose sans même être sûr que ça convienne...
Code:
Private Sub valider_Click()
'validation des objectifs
Dim Lg As Range
Dim li As Integer
Dim I As Byte
Dim Tot As Double'on travailler sur la caisse prev
With Sheets("prev")
    Set Lg = .Range("AF2:AQ11").Find("*", .Range("AQ11"), , , , xlByColumns, xlPrevious)
    If Not Lg Is Nothing Then
        li = Lg.Row + 1
    Else
        li = 2
    End If
    For I = 1 To 12
        On Error Resume Next
        Me.Controls("TextBox" & I).Value = Replace(Me.Controls("TextBox" & I).Value, ".", ",")
        .Cells(li, 31 + I).Value = CDbl(Me.Controls("TextBox" & I).Value)
        Tot = Tot + CDbl(Me.Controls("TextBox" & I).Value) 'à quoi sert tot ???
    Next I
End With
Unload Me
End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : userform et autoincrementation

Bonsoir le fil, bonsoir le forum,

Comme je te l'avais indiqué déjà dans le post #3 ta recherche ne se faisait que dans la ligne
2 :
Code:
Lg = .Range("AF2:AQ2").Find("*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Roww
et elle plantait si aucune valeur n'était trouvée. J'ai donc étendu à la ligne 111 et utilisé une condition avec l'utilisation d'une variable li. Lg uniquement pour la recherche et li en fonction de la cellue trouvée.
Code:
Set Lg = .Range("AF2:AQ11").Find("*", .Range("AQ11"), , , , xlByColumns, xlPrevious)
    If Not Lg Is Nothing Then
        li = Lg.Row + 1
    Else
        li = 2
    End If
Ensuite pour ce qui est de la virgule, du point et de Val, je n'utilise pas Val qui renvoie la partie entière d'une textbox contenant un décimal avec le point comme séparateur. Je préfère faire le remplacement directement à l'édition de la Textbox avec ce type de code :
Code:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If KeyAscii = 46 Then KeyAscii = 44
End Sub
C'est invisible pour l'utilisateur le point est automatiquement remplacé par la virgule. Évidement il te faut répeter ça pour tes 12 textboxes ou utiliser un module de classe...
 

Statistiques des forums

Discussions
312 492
Messages
2 088 925
Membres
103 984
dernier inscrit
maliko67