Problème de ligne dans l'encodage

Bonjour à tous,

je reviens vers vous aujourd'hui car j'ai réussi à créer un formulaire (userform) avec toutes les données et liste intuituive voulue ainsi que la copie dans la feuille souhaitée.

Mon problème est que je voudrais qu'il n'y ai pas de ligne vide dans mon tableau.

Je m'explique:

Dans ma feuille "Base de données", toutes les cases de mon formulaire se copie => jusque la OK

Si dans une des combobox_injection1 ou 2 ou 3 ou 4 ou 5 apparait le mot "Sédator", il faut que les textbox et combobox se copie dans la feuille "Sédator" => jusque la OK

Mais le problème est que si il n'y a pas ce mot "Sédator" dans la sélection des combobox_injection 1 ou 2 ou 3 ou 4 ou 5, il me laisse une ligne vide dans la feuille "Sédator".

Comment puis-je faire pour ne plus avoir de ligne vide mais que tout s'inscrive l'un à la suite de l'autre?

Merci d'avance

PS: je vous joint le fichier

7test-2.xlsm (45.19 Ko)

Bonjour,

Déjà un souci c'est dans toutes vos feuilles vous avez mis vos tableaux au format structuré.
Dans ce cas vous ne pouvez pas avoir de lignes sans données
Peut-être avez vous supprimé toutes les données pour poster un fichier sans données confidentielles ?

Vous avez une feuille par médicament ?

Bonjour Dan,

Effectivement, j'ai supprimé les données encodée pour ne pas divulguer des données confidentielles. Néanmoins, vous pouvez faire le test de le remplir sans pour autant remplir toute les cases.

Pour l'instant j'essaye de résoudre le problème pour la feuille "Sédator" mais par la suite, il y aura bien une feuille par médicament. L'utilité étant d'imprimer que le tableau du médicament souhaité.

Pouvez-vous m'expliquer pourquoi le fait d'avoir un tableau au format structuré me bloque?

Je débute avec le VBA et j'essaye de parvenir a mes fin pour mon projet

Merci d'avance

Pouvez-vous m'expliquer pourquoi le fait d'avoir un tableau au format structuré me bloque?

Cela ne vous bloque pas c'est juste que vous pouvez procéder autrement.
Il aurait fallu que je vois votre tableau avec des données pour bien vous répondre.
Mais de base, en voyant votre macro vous définissez la variable Ligne dans la feuille Base de données et vous l'utilisez aussi pour la feuille Sédator. Du coup, si ligne vaut 3 dans la base de données et que la dernière ligne est la 1 dans la feuille Sédator, le code va vous placer les données en ligne 3 dans la feuille Sédator

Par contre comme vous êtes en tableaux structurés vous pourriez d'abord faire ceci :

Dans la feuille Liste de médicaments, vous avez défini deux tableaux structurés (nommés Tableau1 et Tableau3) qui descendent jusque la dernière ligne de chaque feuille. Faites cette correction en sélectionnant pour les lignes vides du tableau1 (colonne A) puis click droite --> Supprimer --> Lignes de tableau (vous devez voir cette mention dans le menu)
Refaites la même chose pour le tableau3 (colonne B, C, D)
Au final vous devez avoir :
- Pour le tableau1 : votre dernière ligne doit être la ligne 27.
- Pour le tableau3 (composé de trois colonnes) :

Du coup par exemple votre code INITIALIZE se résume à ceci

Private Sub UserForm_Initialize()
Dim i As Byte

With Sheets("Liste de médicament")
    For i = 1 To 5
        Controls("ComboBox_injection" & i).List = .ListObjects("Tableau1").DataBodyRange.Value
        Controls("ComboBox_Vaccin" & i).List = .ListObjects("Tableau3").ListColumns(2).DataBodyRange.Value
        Controls("ComboBox_Vente" & i).List = .ListObjects("Tableau3").ListColumns(3).DataBodyRange.Value
    Next i
    ComboBox_espèces.List = .ListObjects("Tableau3").ListColumns(1).DataBodyRange.Value
End With
End Sub

NB : Pour être plus parlant vous pourriez aussi modifier les noms Tableau1 et tableau3 en "TabMedicaments" et Tabxxxx (xxx à définir puisque 3 colonnes)c

Edit : j'ai ajouté deux lignes pour les combo Vaccin et vente

Mon problème se situe surtout au niveau de la feuille "Sédator".

Pour les tableau et données dans les combobox, j'ai défini la sélection. Par exemple 2 à 5 pour l'espèces, 2 à 30 pour la liste de médicament et ainsi de suite.

Pour ce qui est de définir la dernière ligne, j'ai essayé de faire le code avec ligne_i=..... et ligne_j=..... et indiquer ligne_i pour la feuille base de donnée et ligne_j pour la feuille "Sédator" mais ca ne fonctionne pas, aucun changement.

Je vais essayer de vous envoyer le fichier avec des données.

Mon problème se situe surtout au niveau de la feuille "Sédator

Ok mais vous n'aurez que cette feuille ou vous allez faire une feuille par médicament ?

Je vais essayer de vous envoyer le fichier avec des données.

Ok il faut juste que j'ai des données (non confidentielle) jusqu'à votre dernière ligne actuelle.

Jaurais une feuille par médicament qui se composera comme celle de Sedator.

Jusqu'à ma derniere ligne actuelle? C'est-à-dire? Il faut qu'il y ai la possibilité d ajouter des médicament, espèces, vaccins, ventes. Et l'encodage doit être illimité.

Je suis peut-être un peu exigeante mais je sait que Excel regorge de possibilités.

Jaurais une feuille par médicament qui se composera comme celle de Sedator.

Ok c'est juste que je dois comprendre.
Mais si vous utilisez une feuille par médicament cela va être un fichier très compliqué. Imaginez 27 feuilles et donc 27 tableaux à définir en structuré....
C'est juste une suggestion mais pourquoi ne pas utiliser une feuille Médicaments dans laquelle vous prévoyez une colonne pour le médicaments. Après avec les filtres vous savez retrouver facilement l'info

Autre question : Dans l'usf vous pouvez utiliser les 5 ComboBox_injection à la fois ?

J'attends votre fichier pour l'actualiser avec les codes que je vous ai préparés

Edit : J'ai trouvé une solution si vous voulez vraiment avoir une feuille par médicament. Les 2 seules conditions seraient que vous mettiez le tableau au format structuré (donc comme la feuille Sédator) et que vous n'ayez qu'un seul tableau par feuille.

Bonjour Dan, désolé de ne pas avoir répondu plus tôt mais je n'ai pas eu trop le temps.

Pour répondre à vos questions:

Oui le fichier sera très long et énormément de feuille. Le problème est que ce ne sera pas que pour MON utilisation. L'autre personne qui s'en servira n'est pas aussi compétente que moi en Excel. Et je pense que du coup, filtrer pour pouvoir imprimer la feuille du médicament souhaité sera compliqué pour lui

Je vous confirme aussi que les 5 combobox_injections peuvent être utilisée ensemble et aussi avec les 5 combobox_vaccin et les 5 combobox_vente. Car lors d'injection, il se peux que se soit un mélange de produit et qu'on vente aussi des médicaments au même client.

Pour ce qui est de vous envoyer le fichier, j'essaye tant bien que mal de compléter mon formulaire mais je tombe désormais sur une erreur de débogage 6: dépassement de capacité concernant la ligne: ligne=Cells(Rows.COunt,1).End(xlup).row+1

J'ai essayé de changer le "Dim ligne As Integer" en "Dim ligne As long" mais rien n'y fait. Je n'ai donc plus d'intégration sur mon tableau.

Merci beaucoup à vous pour votre aide si précieuse

Bonjour,

1. Oui le fichier sera très long et énormément de feuille. Le problème est que ce ne sera pas que pour MON utilisation.

Ok pas de soucis. Le principal est que chacun se retrouve à l'utilisation.

2. Je vous confirme aussi que les 5 combobox_injections peuvent être utilisée ensemble et aussi avec les 5 combobox_vaccin et les 5 combobox_vente. Car lors d'injection, il se peux que se soit un mélange de produit et qu'on vente aussi des médicaments au même client.

Donc on pourrait imagine avoir 15 combobox remplies en cliquant sur le bouton Ajouter.
Tout comme pour les médicaments, aurez-vous aussi une feuille par vaccin et une feuille par vente ?

3. Pour ce qui est de vous envoyer le fichier, j'essaye tant bien que mal de compléter mon formulaire mais je tombe désormais sur une erreur de débogage 6: dépassement de capacité concernant la ligne: ligne=Cells(Rows.COunt,1).End(xlup).row+1

Si je me base sur le fichier posté, la réponse se trouve dans mon post https://forum.excel-pratique.com/s/goto/1058106. Vous avez défini votre tableau structuré jusque la fin de votre feuille. Il vous suffit d'enlever quelques lignes au bas de la feuille puis de modifier la déclaration de variable Dim --> LONG. Et vous n'aurez plus le message.

Mais mieux, ne complétez plus rien, mettez votre fichier en ligne tel quel avec les données actuelles que vous avez (c'est cela qui est important. Ce sera plus facile et de toute façon j'ai modifié les codes.

Cordialement

Bonjour,

1. Oui c'est le principal

2. Oui, il se peut que les 15 combobox soit remplies même si ca serait très rare.

Et non, pour Vaccin et vente ce sera uniquement 1 feuille pour chaque et non par médicament.

3. J'ai changé et introduit la code que vous m'avez fourni pour les listes de combobox. Par contre mnt il m'insérer les ligne encodée en ligne 28.

Je vous ai introduit manuellement quelques données pour vous montrer à quoi cela doit ressembler. J'espère que ca sera suffisant pour vous, si pas je reste à votre disposition. (Le fichier est trop lourd même en étant compressé. Comment puis-je vous le faire parvenir?)

Encore un énorme merci

Je vous ai introduit manuellement quelques données pour vous montrer à quoi cela doit ressembler. J'espère que ca sera suffisant pour vous, si pas je reste à votre disposition. (Le fichier est trop lourd même en étant compressé. Comment puis-je vous le faire parvenir?)

Essayez en compressant le fichier.
Si cela ne fonctionne pas sur le forum, voyez mon message en MP

Crdlt

Rechercher des sujets similaires à "probleme ligne encodage"