Adaptation d'un Userform et de sa base de donnée

Bonjour ric,

Je n'y avait pas du tout pensé mais oui, ce serais une excellente chose.

Léo ;)

Bonjour SOTIN,

Je dois modifier passablement le code pour utiliser pleinement les références aux tableaux structurés ...

Lire et écrire dans une feuille en adressant directement les cellules peut poser problème si l’on ajoute ou supprime des colonnes à gauche du tableau concerné...

Cela peut tout bêtement être d’ajouter ou supprimer une colonne à un tableau structuré situé à gauche d’un autre tableau ... le code vba ne peut s’adapter à cette situation ...

Contrairement à l’adressage direct des cellules ... l’adressage via la référence au tableau structuré n’est pas touché si le tableau est déplacé dans la feuille ...

C’est un gros boulot qui va ... du même élan ... me conforter dans cette nomenclature qui ne m’est pas très familière ...

Ça va prendre un peu de temps ... mais il y aura gain en qualité du code ...

En espérant que ce délai ne sera pas un inconvénient majeur pour toi ...

ric

Re ric,

C'est toi l'expert en VBA, je m'en remet pleinement à ton jugement.

Concernant le délai, ce n'est absolument pas un problème surtout si cela permet d'obtenir de la qualité.

Encore merci à toi pour ton travail

Léo ;)

Bonjour SOTIN,

Les changements sont été effectués afin d’utiliser le plus possible les références aux tableaux structurés ...

Il n’y aura plus d’erreur si "tb_pieces" ne contient qu’une ligne ...

J’ai tenté de renseigner un peu le code ... mais c’est ma bête noire ... je perds patience ...

Je te laisse regarder si je n’ai pas laissé trop de coquilles ...

S’il y a des bouts de codes qui t’intriguent ... je pourrai aider ...

J’ai renommé plusieurs contrôles dans le userform ... leurs noms sont maintenant plus loquaces ...

Exemple : Check1 ... est devenu ... CheckBox_HC_Chant_Face

En passant "Chant" ... est-ce le bon terme ou mon correcteur a ri de moi ?

Moi qui chante si bien ... je me plais à dire que mon 1er emploi était de chanter dans les entrepôts pour faire fuir la vermine ...

A+

ric

Re ric,

Je vais prendre connaissance de tout cela et te tiens au courant. Je prends également bonne note de toutes tes indications ;)

En passant "Chant" ... est-ce le bon terme ou mon correcteur a ri de moi ?

Oui c'est bien cela, , la description de ton premier emploi est pour le moins intrigante ! soit tu étais gardien soit tu avais juste plaisir à chanter ! 😂😂😂

En tout cas, encore merci pour ton travail.

Je reviens vers toi sous peu, Léo ;)

Re,

Petite question, lorsque je clique sur le bouton "générer le débit" présent dans le formulaire, j'ai ce message d'erreur qui apparait

capture d ecran 28

Lorsque je clique sur "Débogage" voici ce qui s'affiche :

capture d ecran 29

J'ai vérifié le nom des 2 tableaux, le tableau "Matières" n'avait pas la majuscule. Mais le message apparait toujours malgré l'avoir changé ... Qu'elle est donc la source de ce problème ?

Merci à toit, léo ;)

Je dis peut-être une grosse C****, mais dans le premier message d'erreur :

"Propriété ou méthode non gérée par cet objet",

L'objet en question c'est "Range" ?

Bonjour SOTIN,

Est-ce que tb_pieces n’a qu’une seule ligne ... si c’est le cas ... il faudrait que j’ajoute une condition ... si 1 seule ligne ... ne pas trier ...

Je regarde ...

ric

Bonjour SOTIN,

J’ai testé à nouveau le fichier ... le tableau des pièces n’a qu’une seule ligne et le passage par le tri ne pose pas problème ...

Afin de pouvoir tester le reste ... mets en commentaire Call Module1.Tri_Tableau_Pieces au début de Sub Debit() dans le module_Debit ...

Tu peux aussi tester en changeant .Add2 pour .Add dans le code bogueur ...

ric

Re,

J'ai essayé en mettant en commentaire "Call Module1.Tri_Tableau_Pieces", et ça fonctionne ! 🥳🥳🥳

Merci beaucoup pour ton aide, je vais m'arrêter ici pour ce soir, j'espère avoir du temps demain pour poursuivre. Et te tiens au courant bien évidemment.

Bonne soirée, Léo ;)

Bonjour ric,

Et ..... Roulement de tambour ..... 🥁🥁🥁🥁🥁...... Tous les types, familles et configurations possible des caissons sont fonctionnel !!!!

Tu verras dans le fichier ci-joint que j'ai modifié tout un pavé du code, maintenant le transfert des données de la feuille "Listes" vers la feuille "donnees" ce fait au moment ou l'on appui sur le bouton "générer le débit" le code ce trouve donc dans le module "Module_Debit". Je trouve cela mieux que toutes les valeurs soient transférées au dernier moment et toutes en même temps.

Par ailleurs, j'ai enregistré une copie du fichier dans laquelle j'ai supprimé toutes les lignes de code qui ont été mis en commentaire au fur et à mesure, histoire d'alléger et de rendre le tout plus compréhensible.

J'ai aussi rajouté un bout de code qui permet de supprimer une ligne dans la feuille "Débit" si le nombre est égal à 0 tout en gardant la mise en page. et un autre qui remplace les dimensions des caissons dans "tb_export" par la valeur des différentes Textbox, ce qui permet de rendre ces valeurs modifiables.

Mais, comme une bonne nouvelle n'arrive jamais seule, ..... J'ai tout de même un petit souci. Toujours dans le fichier que je te joins, tu peux voir dans la feuille "Débit" que la ligne 32 est plus fine, la ligne 36 plus large et ainsi de suite à intervalle régulier .... Malgré mes recherches, je ne parviens pas à déterminer le problème , si tu pouvais y jeter un coup d'oeil ?

Merci et à +,

Léo ;)

Bonjour SOTIN,

La fin de la procédure "Debit" ...

J’ai remonté "Call Effacer_ligne.effacer_ligne_nbr_egal_0" sous le dernier "End With"

Puis modifier le balayage de la boucle ... au lieu du saute-mouton au pas de 30 lignes ... des changements ont altéré ce pas de 30 lignes ... il n'y a pas beaucoup de lignes à traiter ... or donc balayons plus minutieusement ...

La boucle parcourt toutes les lignes ... si elle trouve "ref" en colonne "A" ... la hauteur est ajustée à 45 ...

Sinon, les lignes seront à 18 ...

    Call Effacer_lignes.effacer_ligne_nbr_egal_0

    Application.CutCopyMode = False                 ' désactiver la sélection copier/coller
    Sheets("Débit").Activate                        ' activer la feuille

    Application.ScreenUpdating = False
    dl = Range("A" & Rows.Count).End(xlUp).Row      ' déterminer la dernière ligne

    For Lig = 6 To dl ''Step 30                     ' boucler pour modifier la hauteur de certaines lignes
      If Cells(Lig, "A").Value = "ref" Then         ' si la cellule colonne A contient "ref"
         Rows(Lig).RowHeight = 45
      Else
         Rows(Lig).RowHeight = 18                   ' sinon
      End If
    Next Lig

    ActiveWindow.View = xlPageLayoutView            ' changer l’affichage de la feuille

End Sub

Le projet semble donc abouti ...

Cela est une excellente nouvelle ...

Je m’en réjouis ... dansons pour fêter cela ... < avec modération ...

À+

ric

Salut ric,

J'ai recopié ton code, ça fonctionne ;)

Il me reste encore beaucoup de travail pour terminer ce fichier, mais pour le moment ça devrais le faire. Je vais fermer ce fil de discussion car plus ça va et plus le sujet ne correspond plus aux solutions. Au besoin j'ouvrirai un nouveau sujet.

En tout cas merci infiniment pour ton aide et tout le temps que tu as passé à m'aider, car sans toi je ne serais pas parvenu à réaliser ce fichier qui me permettra à l'avenir de gagner un temps considérable et limiter des erreurs.

Bonne continuation et au plaisir de se reparler 👌👌👌

Léo.

Bonjour SOTIN,

Bienvenue ...

ric

Rechercher des sujets similaires à "adaptation userform base donnee"