robleme avec la fonction range et offset

Stefan_matlos

XLDnaute Nouveau
Bonjour au forum, a tous et a toutes

Voila mon petit souci

J'ai une feuille nommé base client, renseignée par un formulaire client, le probleme est lorsque qu'un champs du formulaire n'est pas rempli les données se décalent.
Par ex : le nom du client est LAGARDERE et n'a pas d'adresse, lors de la prochaine saisie l'adresse du nouveu client ira se placer a l 'adresses de agardere.
Voici mon code:
Private Sub CommandButton3_Click()
If ComboBox1.Value = "" Then
MsgBox "Tous les champs doivent être complétés", vbCritical + vbOKOnly, "ATTENTION"
Me.ComboBox1.SetFocus
Exit Sub
End If
sheets("Base Client").Range("A65536").End(xlUp).Offset(1, 0) = ComboBox1.Value
sheets("Base Client").Range("C65536").End(xlUp).Offset(1, 0) = ComboBox2.Value
sheets("Base Client").Range("B65536").End(xlUp).Offset(1, 0) = TextBox1.Value
sheets("Base Client").Range("D65536").End(xlUp).Offset(1, 0) = TextBox2.Value
sheets("Base Client").Range("E65536").End(xlUp).Offset(1, 0) = TextBox3.Value
sheets("Base Client").Range("F65536").End(xlUp).Offset(1, 0) = TextBox4.Value
sheets("Base Client").Range("G65536").End(xlUp).Offset(1, 0) = TextBox5.Value
sheets("Base Client").Range("J65536").End(xlUp).Offset(1, 0) = TextBox6.Value
sheets("Base Client").Range("H65536").End(xlUp).Offset(1, 0) = TextBox7.Value
sheets("Base Client").Range("K65536").End(xlUp).Offset(1, 0) = TextBox8.Value
sheets("Base Client").Range("I65536").End(xlUp).Offset(1, 0) = TextBox9.Value
If TextBox4.Value = "" Then
MsgBox "Renseignements obligatoire", vbCritical + vbOKOnly, "ATTENTION"
Me.ComboBox1.SetFocus
Exit Sub
End If
Unload Me
End Sub

Merci bcoups pour votre aide.
 

smotty

XLDnaute Occasionnel
Re : robleme avec la fonction range et offset

Salut Stefan,

Je pense que c'est dû à la méthode End(xlup).

Pour ce genre d'opération je détermine la ligne du prochain client par rapport à une colone obligatoirement remplie et en suite j'utilise Cells(ligne, colone).value= valeur.

De cette manière tu seras sûr qu'il n'y aura pas de confusion.

A+
 

Cousinhub

XLDnaute Barbatruc
Re : robleme avec la fonction range et offset

Bonjour, comme tu testes toujours la dernière ligne de la colonne où tu as à écrire, forcément, en cas de cellules non renseignées, tu auras un décalage.
Essaie en testant à partir de la colonne A (comme le CB1 doit être rempli, tu auras donc toujours le bon numéro de ligne où inscrire tes données).

sheets("Base Client").Range("A65536").End(xlUp).Offset(1, 0) = ComboBox1.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 2) = ComboBox2.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 1) = TextBox1.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 3) = TextBox2.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 4) = TextBox3.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 5) = TextBox4.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 6) = TextBox5.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 9) = TextBox6.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 7) = TextBox7.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 10) = TextBox8.Value
sheets("Base Client").Range("A65536").End(xlUp).Offset(0, 8) = TextBox9.Value

Maintenant, si tu avais pu nommer tes TextBox de 1 à 10 en fonction du décalage, on aurait pu faire une boucle (pour alléger un peu le code)
 

porcinet82

XLDnaute Barbatruc
Re : robleme avec la fonction range et offset

Salut,

Une solution en passant par une variable afin d'éviter de répéter toujours le Sheets...
Code:
Private Sub CommandButton3_Click()
Dim der_ligne As Integer
If ComboBox1.Value = "" Then
    MsgBox "Tous les champs doivent être complétés", vbCritical + vbOKOnly, "ATTENTION"
    Me.ComboBox1.SetFocus
    Exit Sub
End If
With Sheets("Base Client")
    der_ligne = .Range("A65536").End(xlUp)(2).Row
    .Range("A" & der_ligne) = ComboBox1.Value
    .Range("C" & der_ligne) = ComboBox2.Value
    .Range("B" & der_ligne) = TextBox1.Value
    .Range("D" & der_ligne) = TextBox2.Value
    .Range("E" & der_ligne) = TextBox3.Value
    .Range("f" & der_ligne) = TextBox4.Value
    .Range("G" & der_ligne) = TextBox5.Value
    .Range("J" & der_ligne) = TextBox6.Value
    .Range("H" & der_ligne) = TextBox7.Value
    .Range("K" & der_ligne) = TextBox8.Value
    .Range("I" & der_ligne) = TextBox9.Value
    If TextBox4.Value = "" Then
        MsgBox "Renseignements obligatoire", vbCritical + vbOKOnly, "ATTENTION"
        Me.ComboBox1.SetFocus
        Exit Sub
    End If
End With
Unload Me
End Sub

@+

PS : J'etais parti sur la boucle moi aussi, mais comme tu dis, dommage que les colonnes ne se suivent pas...
 

Statistiques des forums

Discussions
312 489
Messages
2 088 855
Membres
103 976
dernier inscrit
kaizertv2001@gmailcom