Problème ligne de Code pour création fiche de LOTS

Bonsoir a vous,

je suis en train de réaliser un tableau "simple" pour mon travail cependant j'ai vraiment du mal sur une ligne de code (je début depuis 17h00) et la je tourne en rond

Voici la commande en question qui est censé me mettre les éléments de la fiche "Ajouter" à la fin du tableau

l'équivalent de (ctrl flèche bas), j'ai un message d'erreur quand je valide et me met Range("Al").Select en jaune

Private Sub CommandButton1_Click()

  Sheets("TRS2215").Activate
  Range("Al").Select 
  Selection.End(xlDown).Select
  Selection.Offset(1, 0).Select
  ActiveCell = txtDésignation.Value
  ActiveCell.Offset(0, 1).Value = txtNNO
  ActiveCell.Offset(0, 1).Value = txtRéférence
  ActiveCell.Offset(0, 1).Value = txtN°Série
  ActiveCell.Offset(0, 1).Value = txtCRV
  ActiveCell.Offset(0, 1).Value = txtObservations

End Sub

J'ai besoin de vos conseilles pour pouvoir continuer mon fichier.

Je vous remercie

22lots-esica-xls.xlsm (189.47 Ko)

Bonsoir,

Avant de continuer, il va falloir redresser la barre !

Rapidement sur les points essentiels (mais dans le désordre) :

Ta procédure : Activate, Select, Selection, ActiveCell... à proscrire de tout code VBA qui se respecte un minimum, aucune ligne n'y échappe. Je considère donc que tout est à réécrire...

En outre, comme tu utilises dans ta procédure d'autres noms que ceux que tu as donné aux contrôles, elle n'a aucune chance d'écrire quoi que ce soit.

Tu as renommé tes contrôles, point positif, mais un peu de réflexion aurait pu te conduire à les nommer de façon à pouvoir les utiliser en boucle...

Ton tableau : il en est 1026 lignes vides ! Très mauvaise utilisation des tableaux Excel.

Il a besoin d'une ligne pour exister (la première on ne l'évite pas). Il devrait donc à ce stade de réalisation avoir une ligne !

Ensuite, toute ligne ajoutée au tableau y est incorporée automatiquement ! Autant en bénéficier.

De plus le tableau donne lieu à insertion automatique d'un nom par Excel. Et ce nom correspond aux lignes de données du tableau (en-tête exclue). Et il est utilisable en VBA à l'instar d'un nom de plage !

On sait donc en permanence le nombre de lignes de données du tableau avec [NomTableau].Rows.Count, et on peut référencer la ligne d'insertion en ajoutant 1 pour insérer à partir du tableau en ignorant la feuille.

Tes modules : 2 procédures d'appel de Userform, soit quasiment rien comme code et déjà 2 modules Standard ! Tu vas arriver à combien à ce régime quand tu en auras plusieurs dizaines ? Il te faut dès le départ ancrer l'idée que l'on n'ajoute un module Standard que si cela est justifié par la nature du code que l'on y place par rapport à celui destiné à accueillir tout le code ordinaire qui sera produit pour faire fonctionner ton fichier, et qu'un seul module peut naturellement contenir, ou bien pour une partie du code constituant un ensemble exportable indépendamment du reste...

Dans ton module de Userform, tu traînes déjà un bon nombre de déclaration de procédure sans aucun code. Il est bon de se discipliner et élimner tout ce qui ne sert à rien au stade de réalisation d'un projet. Cela ne fait qu'encombrer inutilement...

Pour ta procédure d'affectation, outre les vérifications de validité de saisie qui devraient normalement être utiles mais manquent. Comme il n'y a pas encore de code, je te suggèrerais de modifier tes noms de contrôles, de façon à nommer ceux fournissant les données de la lignes à insérer avec un terme générique, suivi d'un numéro d'ordre (dans l'ordre des colonnes de la lignes).

Ce qui permet d'utiliser une boucle pour récupérer les données...

Et j'aurais bien sûr tendance à préconiser la constitution préalable de la ligne à insérer sous forme de tableau, de façon à réaliser l'insertion de la ligne entière de données en une fois au lieu de piétiner cellule par cellule...

Cordialement.

Bonsoir MFerrand,

Bon comme ça c'est dit, j'ai encore beaucoup de travail à faire,

Merci pour les conseilles je vais tous revoir demain et réétudier le fonctionnement de VBA

Je suis novice dans excel mais c'est une épreuve que je vais essayer de réussir

Merci.

Bonjour,

Je m'apprêtais à te fournir une petite illustration de mes propos, cependant impossible en l'état de ton fichier ! Trop d'éléments font encore défaut.

Tes contrôles sont (hormis Observations) des ComboBox, ce qui indique que tu as prévu de les alimenter par des listes dans lesquelles tu pourras sélectionner les données à insérer...

Mais aucune liste en place et rien n'indique leur origine. Il y a 2 façons de les alimenter, de façon fixe à partir de listes prédéfinies, mais que l'on devrait trouver dans ton fichier, ou au moment de l'ouverture du Userform (proc. Initialize, mais ce n'est pas la seule possibilité) si ces données seront variables dans le temps, mais il faut que l'on puisse les trouver quelque part.

Il manque d'autre part un contrôle (CRV ?) dont on ne sait si cela doit être également une ComboBox ou bien une TextBox.

Ceci étant, s'agissant des Combo, Désignation me paraît pouvoir recouvrir un libellé type susceptible d'être choisi dans une liste, pour les autres cela me paraît moins sûr, bien que NNO ne m'évoque rien et que l'on peut mettre beaucoup de choses sous Référence...

Il conviendrait donc de définir les éléments d'entrée, je pourrais alors t'illustrer les principales procédures...

Autre point, l'examen de ton Userform de recherche montre qu'il est quasi semblable au premier. Dans ces conditions, il n'y a pas lieu de multiplier les composants, le même peut servir avec de minimes adaptations à l'ouverture, qui peuvent être opérées par les procédures appelantes liées aux boutons. Ce qu'il faut par contre savoir c'est à partir de quel élément s'opère la recherche, et aussi quelle en est la finalité (simple consultation, ou bien possibilité de modification, auquel cas d'ailleurs ajout et modif étant des opérations qui ne se distinguent que par l'emplacement de l'insertion, nouvelle ligne ou ligne existante, il n'y a aucun avantage à les dissocier).

Cordialement.

Rechercher des sujets similaires à "probleme ligne code creation fiche lots"