robleme avec la fonction range et offset

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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.
 
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+
 
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)
 
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...
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
707
Réponses
10
Affichages
533
Réponses
4
Affichages
581
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
Retour