Nouveau en VBA plusieurs points

Bonjour à tous !

Je viens de me lancer depuis peu dans l'aventure du VBA, j'ai donc essayé avec principalement votre forum et vos cours sur le VBA,(j'ai surement fait de nombreuses erreurs avec une façon de coder certainement bizarre mais cela marche pour une grosse partie) de créer un formulaire afin d'apporter de la simplicité aux personnes de mon entreprise. Mais il y a plusieurs points bloquant dont je n'arrive pas à me défaire.

Je ne pourrais malheureusement pas vous fournir tel quel mon fichier ouvert à tous (pour des raisons de confidentialité) mais je pourrais vous le passer en MP.

+ J'aimerai lorsque ma feuille se remplie grâce au formulaire que les cellules de H13:H20 (quantités de différents types) se remplissent grâce aux cellules B24:B48(les types) pour calculer la quantité demandée, j'y arrive en formule normal mais pas en VBA. Pareil pour les cellules L16:L19(quantités de différents d'équipements) grâce à D24:D48(les équipements).

+ Là où pour moi ça se complique énormément, les cellules L13:L15 (quantité de différents équipements), qui se remplissent avec la plage D24:D48(les équipements) jusque là ça va , mais dans cette plage on y trouve plusieurs équipements qui ont le même nom mais qui en fonction du type (dans H13:H20) ne se remplissent pas dans les mêmes cellules (L13:L15). De plus ces équipements (notés par Ch) ont des quantités différents (1Ch ou 6ch) dont il faut bien-sur additionner ces quantité et non seulement le "Ch"

+J'ai créer un bouton sur mon formulaire qui vient vérifier qu'il n'y a pas de doublon dans la plage C24:C48 (qui correspond à un numéro de série en fonction du type) mais je préférerais faire cette vérification avant de l'ajouter à ma feuille (via le bouton ajouter de mon formulaire) et proposer alors de le remplacer par un autre numéro non attribué (via par exemple une msgbox yes/no).

+J'ai également dans mon formulaire fait une checkbox pour ajouter ou non chaque type différent associé à son numéro de série et que si le numéro est absent (ce qui signifie que le personnel n'a pas de numéro de série attribué de base pour ce type) une msgbox apparaisse qui lorsque c'est oui, cela vient cocher une autre checkbox dans le formulaire qui permet de prendre un numéro de série non attribué mais si c'est non cela vient décocher la checkbox d'ajout de ce type (car sans numéro de série on ne peut l'ajouter à la feuille). Cependant, je dois avoir une erreur dans mon code car une fois que l'on répond non , il devient impossible de cocher une autre checkbox d'ajout de type.

Je suis conscient que sans mon fichier excel c'est clairement incompréhensible mais je reste à votre disposition pour toute question et/ou précision.

Comme c'est la première fois que j'utilise le VBA j'ai essayé d’être le plus précis dans mon code en mettant des commentaires partout pour ne pas me perdre en espérant que cela vous aide.

Merci d'avoir pris le temps de me lire.

Merci d'avance pour votre aide.

Je vous souhaite une excellente journée.

Même pas peur, No-Fear14 mais... envoie quand même ton fichier!

Au besoin, réduis-le et change les infos "sensibles" avec des "ABC", "DEF", le principal étant de comprendre la logique de ton système.

Vérifie que tes explications soient bien ciblées quant à tes attentes!

Souvent, deux tableaux AVANT-APRES sont plus parlants que de longs discours!

A+

Bonjour,

Il faut absolument que tu anonymises ton fichier :

Le forum est le moyen d'aide par excellence, la messagerie n'est pas faite pour cela. (Pas du tout aussi pratique que le forum)

De toute façon tu ne peux pas envisager de bricoler en permanence sur ton vrai fichier et on n'a pas besoin non plus de tous les détails sur ton personnel ni ton N° de carte bleue...

Donc avoir un fichier de travail qui est le cousin germain de ton fichier privé ne peut être qu'un atout.

Attention ton fichier "forum" doit respecter en tous points la structure de ton fichier original. Seul le nombre d'enregistrements et les détails sont sans intérêt.

A+

Bonsoir,

Merci de m'avoir lu, je vous transmets le fichier ,j'ai "anonymisé" le fichier même si en le lisant vous allez surement comprendre de quoi ça parle et dans quoi je travaille mais il n'y a pas d'informations confidentielles donc c'est tout bon.

Je pense que pour les différents points, on peut prendre ça 1 par 1 ça sera plus facile je pense.

Merci encore pour votre future aide car cela fait 3 semaines que je crée ce formulaire et en apprends de plus en plus sur le VBA qui me passionne et là je bloque sur ces points là donc merci.

PS : je ne sais pas si ça change quelque chose mais je travaille sur 2013 chez moi et 2016 au travail pour info.

A+

Salut No-Fear,

Salut Galopin,

d'abord, un peu de réécriture à ma sauce (y'a encore à faire...)... avant d'essayer de comprendre plus loin.

  • 1 fois suffit : Excel n'oubliera pas si vite ;
  • écrire les propriétés à chaque fois :
* TextBox.Text

* ComboBox.Text

* CheckBox.Value

* Range().Value (quand c'est VALUE qui est demandé, bien sûr)

A chacun son truc, évidemment, mais, :

  • évite les lignes vides tant que possible pour concentrer ton code et avoir ainsi une vue d'ensemble (fonction de l'écran, bien sûr) la plus large sur tes procédures. Perso, pour "éclairer" un code, j'insère une ligne vide, certes, mais avec une apostrophe : l'air de rien, ça "habille" et fait le lien avec la suite ;
  • même ordre d'idée, quand tu peux éviter un ENDIF et coder en une ligne, c'est plus facile à lire ;
  • adopter un style d'écriture systématique.
* indentations progressives avec TAB pour visualiser aisément les niveaux. Certains vanteront la "norme" de tabulation de 3 espaces, soit...

Trouve ce qui te convient le mieux et te facilite la vie!

Pour la suite, si tu pouvais nous faire un tableau 'Bon d'arme' bien complet avec les résultats attendus en [H13:H20] et [L13:L20] qu'on saisisse bien le mécanisme, ce serait chouette et on gagnerait du temps.

A+

Salut Curulis,

Salut Galopin

Super pour la réécriture, c'est vrai que c'est déjà plus claire et lisible (compacte).

Je prends note de tes petits conseil pour écrire de manière plus harmonieuse en enlevant le "superflus"

Je te renvoi un bon d'arme comme il pourrait être rempli, j'y ai rajouté un peu de couleur pour que ce soit plus parlant (ou pas )

A+

Salut No-Fear, Galopin,

avant, si j'ai le courage, d'aller plus loin dans la ré-écriture, une solution à ta demande initiale.

Le code est situé en fin de Sub CommandButton_ValiderAjoutBdsa_Click()

        DLig = .Range("B23").End(xlDown).Row
        For x = 13 To 20
            iFlag = WorksheetFunction.CountIf(.Range("B24:B" & DLig), Split(.Range("E" & x).Value, " ")(0))
            If iFlag > 0 Then .Range("H" & x).Value = iFlag
        Next
        For x = 24 To DLig
            tSplit = Split(.Range("D" & x).Value, " ")
            For y = 0 To UBound(tSplit)
                For z = 13 To 19
                    iFlag = InStr(tSplit(y), .Cells(z, 13))
                    If iFlag > 0 Then
                        .Range("L" & z).Value = .Range("L" & z).Value + Val(Left(tSplit(y), iFlag - 1))
                        Exit For
                    End If
                Next
            Next
        Next

Pour le calcul des équipements, j'ai légèrement changé les libellés de tes chargeurs dont une copie est "cachée" en blanc en [M13:M19].

  • cPA : chargeur PA ;
  • cPM : chargeur PAMAS ;
  • cFM : chargeur FAMAS
A voir si cela te convient...

A+

Salut Curulis,

Super !

Écoute c'est nickel la dénomination change mais cela n'est pas dérangeant car ça reste compréhensible .

Du coup mes 2 premiers points sont validés .

Je suis en train de comprendre ce que "dit" ton code afin de comprendre comment ça marche et de découvrir de nouvelles fonctions.

A+

Salut No-Fear,

la suite, un peu tardive, déso...

A tester : le comportement des CheckBox "AJOU" et "NNAttribué" de la UserForm.

Tu ré-expliques l'histoire des doublons, stp?

A+

Salut Curulis,

Yes ça marche nickel

Alors concernant les doublons c’était que dans le userform avant de valider l'ajout ou non au bon d'arme, que les numéros des armes qui vont être ajoutées au bon d'armes soient vérifiées avec les numéros d'armes déjà renseignées sur le bon d'armes afin qu'ils n'y ai pas de doublon (par exemple qu'une arme soit affectée à deux personnes, ce qui peut être le cas lorsque l'ont choisi plusieurs fois un numéro non attribué) et que SI une arme a déjà été attribué, que l'on en prenne une autre, par exemple la suivante non attribuée (avec une MsgBox oui/non qui lorsque c'est oui on prends l'arme suivante et que si c'est non et bien on ajoute quand même l'arme même si elle est en doublon).

Pour cela, peut-être est-t-il plus simple de modifier la feuille DONNEES, je te renvoie le fichier avec une feuille DONNEES 2 qui te fera mieux comprendre ce que je veux dire car dans le premier cas j'avais triché en affectant des armes "non attribués" a des plusieurs personnes et des fois on se retrouvait avec 3 personnes ayant le même numéro. Mais en faisant la méthode de la feuille DONNEES 2, il suffit (je pense ) qu'à chaque clique d'affectation d'une arme non attribué, on prend la suivante.

Je ne sais pas si j'ai été bien clair, mais je suis à ton écoute pour te réexpliquer

Merci encore pour ton aide.

Bonne soirée

Bonjour,

je te conseille d'aller dans Outils / Options de VBE (l'éditeur VBA) pour cocher Déclaration obligatoire des variables.

Ca t'ajoute Option Explicit au début de chaque nouveau module.

Une variable non déclarée te sera signalée immédiatement.

Tu écris piece au lieu pieces par exemple, tu peux passer un moment avant de voir quel est le pb qui te fait ierch.

Tu peux installer aussi SmartIndenter qui indente le code tout seul, très pratique voire indispensable.

Le lien d'origine est cassé

mais tu peux le trouver en copie sur d'autres sites.

Tu as aussi http://rubberduckvba.com/ qui indente, plus d'autres outils avec. Il a l'air pas mal, je vais tester ce soir

eric

PS :

Rechercher des sujets similaires à "nouveau vba points"