Valider sous condition

Bonjour à tous, je suis en train d'avancer sur un formulaire. Quand je valide les données je n'arrive pas à transférer sous condition mes données soit sur la feuille "Traces" quand je selectionne sur la 1ère liste déroulante "eval" Résultats1. Et quand je sélectionne "Résultats2" mes données doivent être transférées sur la feuille "Traces2". Merci à vous tous

19eval-moy.xlsm (97.05 Ko)

Bonjour Wall, bonjour le forum,

En première ligne du module de l'UserForm, au-dessus de Option Explicit, tu écris :

Private O As Worksheet

Puis le code du changement de la Combobox31 :

Private Sub ComboBox31_Change()
If Me.ComboBox31 = "Résultats 1" Then Set O = Sheets("Traces")
If Me.ComboBox31.Value = "Résultats 2" Then Set O = Sheets("Traces2")
End Sub

Dans le bouton de validation Cmd_Enregistrer_Click au lieu de :

With Sheets("Traces")

ou :

With Sheets("Traces")

tu n'as juste qu à faire un seul bloc de code avec :

With O

Pense aussi à rajouter au début du code de ce même bouton :

    If ComboBox31.ListIndex = -1 Then
        MsgBox "Vous devez choisir une feuille.", 16
        Label69.ForeColor = RGB(255, 0, 0)
        Exit Sub
    End If

Sinon, juste une remarque perso : ça pique les yeux ton UserForm !...

Merci pour ta réponse, c'est vrai les couleurs à travailler et le reste aussi. J'en profite pour vous demander comment aussi faire appel à un enregistrement existant pour le modifier par ce formulaire et aussi pour effacer par le bouton "effacer" les données du formulaire avant validation au cas ou on se trompe. Merci encore

Bonsoir Wall, bonsoir le forum,

Je t'avoue que pour une UserForm normale j'aurais pu mettre la main à la pâte, mais la tienne est du type gigantesque et je n'en ai pas le courage... Vraiment désolé Wall.

Voici le principe que j'utilise (chacun a sa méthode et la mienne n'est pas forcément la meilleure) :

• Dans un module standard (Module1 par exemple), je déclare une variable publique (par exemple LI) avec :

Public LI As Integer

écrit en toute première ligne du module.

• Ensuite, si c'est un ajout je définis LI comme étant la première ligne vide dans mon tableau. Si c'est une modification ou une suppression je définis LI avec une recherche dans le tableau ou à l'aide de la propriété ListIndex d'une Combobox ou etc... Comme LI est déclarée publique, elle garde sa valeur dès qu'on lui a attribué et sa portée tout le temps.

• Je renvoie les données de l'UserForm vers le tableau avec LI comme référence de ligne par exemple :

Cells(LI, 1).Value = TextBox1.Value

• Soit ça va écraser les anciennes données de la ligne (modification), soit ça va les écrire à la fin du tableau (ajout) soit je fais :

Rows(LI).Delete

pour une suppression.

Merci bcp Thau Thème, je suis encore loin de comprendre le 10eme de ce que tu m'as expliqué, mais je vais faire l'effort de travailler avec cette méthode, cela fait 15 jours que je me creuse la tête mais c'est vrai que c'est un code complexe et surtout énorme. Merci encore

Bonsoir Wall, bonsoir le forum,

Je ne te promets rien mais si j'ai un peu de temps ce week-end je te proposerai un début...

Cool merci, bonne soirée

Bonjour à tous, en rentrant mes codes :

Private Sub ComboBox31_Change()

If Me.ComboBox31 = "Résultats 1" Then Set O = Sheets("Traces")

If Me.ComboBox31.Value = "Résultats 2" Then Set O = Sheets("Traces2")

End Sub

le résultat ne s'affiche que dans la feuille "traces" quand je selectionne Résultats 1 de la liste déroulante ???J'ai une question si vous voulez bien : est ce normal de ne pas voir le .Value après le "if Me.Combobox31 ? ENSUITE est ce un o ou un zéro après le "with 0" ET "Set O". Vous m'avez dit de mettre le "Private o As Worksheet" au dessus de option explicit du module de l'userform mais je ne trouve pas cette option dans le module. Merci d'avance de m'éclairer

Bonjour Wall, bonjour le forum,

Plusieurs question donc plusieurs réponses :

• J'ai utilisé la variable O (pour Onglet) mais tu peux lui donner le nom que tu veux à partir du moment où il est actualisé dans tout le code pur cette même variable. Beaucoup utilisent Sh (pour Sheet)...

• La propriété [Value] est la propriété par défaut pour certains contrôles (TextBox, ComboBox, ListBox, etc...) elle n'est donc pas obligatoire. TetxBox1 = "Wall" équivaut à TextBox1.Value = "Wall". En pricipe, j'écrits tout le temps .Value mais là j'ai oublié...

• Si Option Explicit n'existe pas dans le module de l'UserForm, tu mets Private O as Worksheet dan la première ligne...

J'ai commencé à travaillé sur ton projet vendredi (j'ai refais toute l'UserForm) mais je ne vais pas avoir beaucoup de temps ce week-end... Dimanche soir j'essaierai d'avancer

Merci beaucoup de ton aide, j'essaye aussi de mon côté de comprendre le code qui n'est pas simple, chapeau en tout cas...

Bonjour Wall, bonjour le forum,

En pièce jointe ton fichier modifié. J'ai utilisé des Modules de Classe pour le calcul des moyennes. Il y a un classe par Frame (sauf pour la Frame3 qui n'a qu'une note). J'ai attribué à chaque ComboBox une valeur à sa propriété [Tag] qui correspond au numéro de colonne dans laquelle la valeur de la ComboBox va être renvoyée. Comme cette propriété est de type String, je la convertie en Byte pour l'utiliser dans une adresse O.Cells(LI, CByte(CTRL.Tag))... Code commenté...

6wall-v01.xlsm (125.78 Ko)

Bonsoir, merci beaucoup pour ce travail accompli, merci le forum pour le partage. Je suis en train de faire des tests et d'essayer de comprendre comment gérer moi même ce code. Cependant, vu l’excellence du travail, j'ai encore du chemin.

Le formulaire est sobre et d'une clarté comme je n'ai pas réussi à l'imaginer. J'ai un souci avec le "résultats2" qui ne s'affiche pas correctement sur la feuille "Traces2". Sur la liste déroulante de la feuille "fiche", le résultats 2 ne s'affiche pas.

Quand je valide le formulaire en test sans rentrer de données, il m'affiche un débogage.

Tous fonctionne correctement pour le résultats 1.

Le formulaire autrement est parfais à part ces quelques désagréments.

Merci encore pour le temps consacré à ce travail. Cordialement à toi Thau thème

3wall-v01.xlsm (109.07 Ko)

Bonsoir Wall, bonsoir le forum,

Je pense avoir corrigé dans la version 2 les petits soucis qui restaient...

8wall-v02.xlsm (115.04 Ko)

Bonsoir, excellent résultat et merci encore pour ta disponibilité. j'ai encore à remplir correctement les intitulés. Merci encore

Salut à tous,

Je viens d'insérer un code pour pouvoir envoyer les résultats sur avec condition sur la feuille "Traces" et "Eval1" si c'est je sélectionne sur la liste déroulante "resultats1" et quand c'est "résultats2" mes résultats sont transférés sur les feuiles "Traces2" et "Eval2". Suite à ce code, j'obtiens des erreurs. Auriez vous une solution? Merci d'avance

Private Sub ComboBox1_Change() 'au changement de la ComboBox1

If Me.ComboBox1.Value = "Résultats 1" Then Set O = Sheets("Traces","Eval1")

If Me.ComboBox1.Value = "Résultats 2" Then Set O = Sheets("Traces2","Eval2")

Me.ComboBox2.Value = ""

End Sub

End If

Set cell = .Range("G4:G" & .Range("G" & Rows.Count).End(xlUp).Row).Find(ComboBox30.Value, lookat:=xlWhole, LookIn:=xlValues)

If Not cell Is Nothing Then

lgn = cell.Row

Else

lgn = .Range("A" & Rows.Count).End(xlUp)(2).Row

End If

'On ne reporte que ces notes sur la feuille ''Eval1''ou "Eval2"

If TextBox1 = "" Then End

.Range("H" & lgn) = TextBox1 * 1

If TextBox2 = "" Then End

.Range("I" & lgn) = TextBox2 * 1

If TextBox3 = "" Then End

.Range("J" & lgn) = TextBox3 * 1

If TextBox4 = "" Then End

.Range("K" & lgn) = TextBox4 * 1

If TextBox5 = "" Then End

.Range("L" & lgn) = TextBox5 * 1

If TextBox6 = "" Then End

.Range("M" & lgn) = TextBox6 * 1

If TextBox7 = "" Then End

.Range("N" & lgn) = TextBox7 * 1

If TextBox8 = "" Then End

.Range("O" & lgn) = TextBox8 * 1

End With

2wall-v03.xlsm (104.28 Ko)

Salut le forum, salut à tous,

je joints un classeur qui me fait suer, je m'explique, j'ai rajouté à mon userform une Texbox10 (observations) pour ajouter des commentaires sur la colonne P. Sauf que je ne comprends pas pourquoi ça debog, si vous voulez bien m'aider. Merci

Bonjour,

Euh, scuse, je n'avais pas vu que tu continuais cette discussion...

Comme ton TextBox10 est du texte, essaie juste d'enlever le "* 1 " qu'il y a en fin de la ligne du code :

   If TextBox10 <> "" Then .Range("P" & Lgn) = TextBox10 * 1

Bon courage

Merci bcp, j'y suit mais comme quoi je suis encore en cours..................A bientôt

Bonjour à tous, je viens de rééditer cette discussion car je me suis rendu compte d'une erreur que je n'arrive pas à solutionner seul.

Quand je valide mes données sur les feuilles "Eval1 et 2", je me rends compte que le code ne supprime pas les doublons en tenant compte des noms de la colonne F. Il ne filtre que la ligne au dessus et pourtant j'ai ajouté le code suivant :

Set R = Range("F3:F" & Lgn - 1).Find(Cells(2, lng), , xlValues, xlWhole)

If Not R Is Nothing Then Rows(R.Row).Delete

Une 2ème question ou plutôt une demande s'il vous plait, comment rapatrier les données de la textbox10 depuis les feuilles "Eval" (observations) qui ne veulent pas s'afficher en même temps que le reste.

Merci à vous et bonne journée

Bonjour,

Je ne sais pas si tu as remarqué que lorsque je déclare des variables, je mets toujours une majuscule en premier...

Ainsi, lorsque j'utilise cette variable, je tape en minuscule, et si c'est bon, la première lettre se met en majuscule....

Donc, dans ton fichier, j'avais déclaré :

Dim Lgn As Long

Et toi, tu mets "lng" (qui donc est resté tel quel, cette variable n'étant pas déclarée..

D'ailleurs pour éviter ce type d'erreur, il est préférable de mettre "Option Explicit" en haut de chaque module....

Ça, c'est pour le début.

Pour le doublon, je n'ai pas continué, car lorsque tu lis ton code, on se demande ce que fait "End" après l'écriture de la TextBox10 (qui d'ailleurs fonctionne très bien...)

Ce End stoppe la macro, et ferme l'usf...

Et comme ta recherche est située "APRES" cette ligne de commande, tu conçois donc aisément que cette recherche ne sera jamais faite...

Et également ce que tu recherches par :

Set R = Range("F3:F" & Lgn - 1).Find(Cells(2, Lgn), , xlValues, xlWhole)

D'après ce code, tu recherches la valeur de la cellule de la ligne 2, et de la colonne "Lgn"

Si Lgn = 5, ça veut dire que tu recherches la valeur de la cellule "E2", soit un titre ("à venir)

Tu comprends donc que tu ne trouveras jamais ce terme dans tes "élèves"

Bon courage

Rechercher des sujets similaires à "valider condition"