Renseigner un tableau à partir de Userform (VBA sous Exl2010)

Yanderuelle Messages postés 4 Statut Membre -  
f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je suis débutant VBA et je furète pas mal sur la toile.
Pour l'instant j'ai un tableau de saisie de factures 'TableauFactures' sur 9 Colonnes avec soit du texte, soit un Menu Déroulant. Cela marche très bien.

Mon projet est d'automatiser la saisie à travers une UserForm. A travers les exemples trouvés sur le net, j'ai correctement dimensionné la Form et placé les différents boutons, ComboBox et TextBox. Leurs numéros ne se suivant pas, mais après vérification, la tabulation est correcte.

Malgré la foultitude d'exemples trouvés, j'ai soit un pb de variable déclarée, soit un souci pour trouver la dernière ligne vide et ensuite décaler les cellules par la droite pour déclarer l'origine de l'information saisie (la variable L).

Pour l'instant j'ai ce code qui se déclenche lorsque on clique sur le bouton 'Nouvelle Facture'
__________________________________________________________________
'Pour le bouton Nouvelle facture

Private Sub CommandButton1_Click()

Dim L As Integer

If MsgBox(" Confirmez-vous l'insertion de cette nouvelle facture ? ", vbYesNo, " Demande de confirmation d'ajout ") = vbYes Then

L = .Range("A" & .Rows.Count).End(x1Up).Row + 1
'Pour placer le nouvel enregistrement à la première ligne de tableau non vide

Range(" A " & L).Value = TextBox7

Range(" B " & L).Value = ComboBox2

Range(" C " & L).Value = TextBox1

Range(" D " & L).Value = ComboBox3

Range(" E " & L).Value = TextBox3

Range(" F " & L).Value = TextBox4

Range(" G " & L).Value = ComboBox4

Range(" H " & L).Value = ComboBox5

Range(" I " & L).Value = TextBox8

End If

End Sub
__________________________________________________________________

Lorsque je teste ce bout, j'ai un message d'erreur de compilation en Variable Non définie sur (x1Up) et je n'arrive pas à en sortir.

Si je trouve une solution qui passe, ensuite j'ai un souci de Range dès la première ligne de déclaration. J'ai essayé avec la fonction Cells, mais pas trouvé la bonne syntaxe.

Merci pour vos conseils.

1 réponse

  1. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717
     
    Bonjour,

    ce n'est pas
    x1Up
    mais
    xlUp
    avec un l minuscule pas le chiffre 1
    0
    1. Yanderuelle Messages postés 4 Statut Membre
       
      Rhooo purée merci. Le pire c'est que je l'avais déjà vu en début d'après midi. Mais à force de chercher des solutions, j'ai refais l'erreur. Faut dire que visuellement, c'est super proche.

      Maintenant il me donne une erreur de Référence Incorrecte ou non qualifiée sur le Rows juste avant sur la même ligne. J'ai enlevé le Point qui est avant le Rows.... Cela semble fonctionner

      Mais comme indiqué dans mon premier message, ensuite je bloque sur le Range avec une erreur d'exécution 1004, la méthode Range de l'Objet '_Global' a échoué
      0
    2. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Yanderuelle Messages postés 4 Statut Membre
       
      Re,

      enlevez le "." devant Range a la ligne L=
      0
    3. Yanderuelle Messages postés 4 Statut Membre
       
      Pour donner cela
      L = Sheets("TableauFactures") Range("A" & Rows.Count).End(xlUp).Row + 1
      ?

      Aussitôt la ligne passe en rouge "Attendu Fin d'instruction" sur le Range

      Si je supprime toute la partie de déclaration de la Sheets("TableauFactures"), puisque de toutes les façons je suis dessus, au test de débogage il souligne en jaune la première Ligne de
      Range ("A " & L ). Value = TextBox7
      Toujours en erreur d'exécution 1004, la méthode Range de l'Objet '_Global' a échoué
      0
    4. f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention   1 717 > Yanderuelle Messages postés 4 Statut Membre
       
      Bonjour,

      la ligne d'origine etait:
      L = .Range("A" & .Rows.Count).End(x1Up).Row + 1 


      la par contre il faut le "." devant range
      L = Sheets("TableauFactures").Range("A" & Rows.Count).End(xlUp).Row + 1


      Et comme ca c'est encore mieux

      Private Sub CommandButton1_Click()
          Dim L As Integer
      
          If MsgBox(" Confirmez-vous l'insertion de cette nouvelle facture ? ", vbYesNo, " Demande de confirmation d'ajout ") = vbYes Then
              With Sheets("TableauFactures")
                  L = .Range("A" & .Rows.Count).End(xlUp).Row + 1
                  'Pour placer le nouvel enregistrement à la première ligne de tableau non vide
                  .Range(" A " & L).Value = TextBox7
                  .Range(" B " & L).Value = ComboBox2
                  .Range(" C " & L).Value = TextBox1
                  .Range(" D " & L).Value = ComboBox3
                  .Range(" E " & L).Value = TextBox3
                  .Range(" F " & L).Value = TextBox4
                  .Range(" G " & L).Value = ComboBox4
                  .Range(" H " & L).Value = ComboBox5
                  .Range(" I " & L).Value = TextBox8
              End If
          End With
      End Sub
      0
    5. Yanderuelle Messages postés 4 Statut Membre > f894009 Messages postés 17417 Date d'inscription   Statut Membre Dernière intervention  
       
      Merci. Mais cela ne semble pas fonctionner. Le premier If est fermé par le Then de la demande de confirmation pour créer une nouvelle facture.

      Du coup j'ai un souci sur le End If de la fin. Il me dit qu'il ne peut fermer sans avoir eu un If ouvert quelque part avant
      0