Remplissage de champs avec UserForm

Bonsoir François,

Merci beaucoup pour le temps consacré à ma problématique. J'ai réessayé mais je n'arrive toujours pas a faire fonctionner, j'ai peut-être un souci avec mon excel...

Je prends pour exemple la ligne 5 du tableau EXCEL, vu que la case H5 est vide et que la différence de date entre la case F5 et la date du jour est > 60jours, alors cela devrait être coloré en rouge.

Cela fonctionne de ton côté ? :)

Bonne soirée et encore merci !

JB

Bonjour

en F5 1/10/2021 soit 2 mois hors coloration si + de 30 mois

Je te signale que c'est toi qui a mis datediff m donc mois....

Avec des jours

A+ François

Bonjour François,

Oui j'ai bien compris ta remarque, merci pour ta contribution :)

Ce que je ne comprends pas c'est que si je renseigne une date de réception et bien la ligne reste colorée en rouge ou en orange.

Est-ce qu'il ne faudrait pas plutôt utiliser la condition And dans le genre:

If Range("H" & i) = "" And If d > 30 And d < 60 Then Range(Range("A" & i), Range("F" & i)).Interior.ColorIndex = 45

Un grand merci pour le temps que tu passes sur mon projet :)

JB

Bonjour

Fichier avec une mise en forme conditionnelle.

A+ François

Bonsoir François,

Merci beaucoup c'est exactement ce que je voulais ! Par contre c'est possible de le faire par VBA plutôt que par une mise en forme conditionnelle ? Je te pose cette question car ma feuille sera protégée par un mot de passe et est-ce que cela peut être bloquant ?

Très belle soirée à toi

JB

Tu peux protéger ta feuille les mfc se font quand même... mais pas les macros

sinon ci dessous la macro

Sub coloration()
 Dim i As Long
 For i = 4 To Range("A" & Rows.Count).End(xlUp).Row
   If Range("H" & i).Value = "" Then
     If Now() - Range("F" & i).Value > 30 Then Range(Range("A" & i), Range("F" & i)).Interior.ColorIndex = 45
     If Now() - Range("F" & i).Value > 60 Then Range(Range("A" & i), Range("F" & i)).Interior.ColorIndex = 3
   End If
 Next
End Sub

A+ François

Bonsoir François,

Merci beaucoup pour ton aide, mon projet prend forme et est presque terminé ! (j'ai utilisé les MFC au final).

J'aurais aimé pouvoir comptabiliser le nombre de lignes colorées en orange et rouge et tracer le résultat dans une zone de texte si possible ?

J'ai trouvé sur un forum une formule qui permet de le faire mais il faut avoir installé un patch pour cela donc pas très pratique... (NB_SI_COULEUR)

Existe t-il une autre solution? Je pensais réutiliser des 2 formules qui tu as saisis dans les MFC et les adapter pour compter les lignes? Seulement je ne sais pas par où commencer, aurais-tu une piste ?

Un grand merci pour ton aide précieuse !

JB

Bonjour

J'ai ajouté 2 colonnes qui sont masquées

en G aujourdhui()-f

en I nbcar(j)

Ce qui me permet d'avoir les formules en J1 et en J2

A+ François

Bonsoir François,

Super, ça me convient parfaitement ! Bien plus pratique que d'identifier la couleur de fond de cellule !

Par contre, dans mon projet j'insère (via une macro) une ligne à partir de la ligne 4 mais, par conséquent, les formules ne suivent pas et débutent en ligne 5, aurais-tu une idée s'il te plait? :)

Bonne fin de soirée!

JB

Bonsoir François,

J'ai réussi à renseigner le nombre de lignes colorées dans une zone de texte, seulement avant dans mon projet, il y a une macro qui vient insérer une ligne en 4 et par conséquent les formules ne suivent pas.

Je pensais donc écrire les formules par VBA, seulement je voudrais avoir ton analyse stp car j'ai un message d'erreur. Voici le code:

Sub formule_coloration()
    Application.Worksheets("Index").Range("G4").Formula = "=SI(F4>0;AUJOURDHUI()-F4;"")"
Set SourceRange = Worksheets("Index").Range("G4")
Set fillRange = Worksheets("Index").Range("G4:G1048576")
SourceRange.AutoFill Destination:=fillRange
Application.Worksheets("Index").Range("I4").Formula = "=NBCAR(J4)"
Set SourceRange = Worksheets("Index").Range("I4")
Set fillRange = Worksheets("Index").Range("I4:I1048576")
SourceRange.AutoFill Destination:=fillRange
End Sub

Je me suis inspiré de codes trouvés sur divers forums.

Bonne soirée et merci de ton aide :)

JB

Bonjour et bonne année

En transformant ta page Index en tableau ton problème n'existe plus

Pour insérer une ligne dans un tableau à la première ligne: [tableau1].Rows(1).Insert

J'ai donc transformé ta feuille Index en T_index + macro test (module 1)

A+ François

Bonjour François,

Meilleurs voeux à toi aussi :)

Merci beaucoup pour cette proposition de développement, la mise en forme n'en sera que meilleure !

Par contre, comme je te le disais, j'ai déjà une macro qui permet d'insérer une ligne et de copier certaines données de la feuille "Bordereau" sur la page Index. Elle m'avait été proposée par XCellus de ce forum et me convient à merveille!

Cependant, je ne vois pas comment insérer le code que tu m'as proposé dans celui que XCellus avait développé pour moi.

Je poste ci-dessous la proposition de XCellus à l'époque, à voir si on peut adapter ta proposition François :)

Private Sub Valider_click()
Worksheets("Bordereau").Copy After:=Sheets(Sheets.Count)

With ActiveSheet
.Range("M4") = TextBox_NumBordereau
.Range("D17") = ComboBox1

For k = 17 To 23
If k > 17 Then .Range("D" & k) = Controls("TextBox_" & k - 6)
.Range("L" & k) = Controls("TextBox_" & k - 16)
Next k
.Range("B29") = ComboBox_Type_expédition
.Range("J29") = TextBox_Date
.Range("J35") = TextBox_Remarque
For n = 45 To 53 Step 2
p = p + 1
If Controls("ComboBox_PS" & p) = "" Then Exit For
.Range("B" & n) = Controls("ComboBox_PS" & p)
.Range("D" & n) = Controls("Designation_materiel_" & p)
.Range("L" & n) = Controls("N°serie_" & p)
.Range("O" & n) = Controls("Quantite_" & p)
Next n
.Range("B58") = TextBox_Motif
.Range("E66") = ComboBox_Emballage
.Range("E67") = TextBox_Dimensions
.Range("E68") = TextBox_Poids
.Name = Range("M4")
End With
Sheets("Index").Select
'Report sur Index et sous-traitance d'insertion de lignes
With Sheets("Index")
Range("A4").Select
InsLig (p - 1)
For m = 45 To 53 Step 2
q = q + 1: Lig = 3 + q
If Controls("ComboBox_PS" & q) = "" Then Exit For
.Range("A" & Lig) = TextBox_NumBordereau
.Range("B" & Lig) = ComboBox1
.Range("C" & Lig) = Controls("ComboBox_PS" & q)
.Range("D" & Lig) = Controls("Designation_materiel_" & q)
.Range("E" & Lig) = Controls("N°serie_" & q)
.Range("F" & Lig) = TextBox_Date
Next m
End With
End Sub

'Plus l'ajout de l'insertion de lignes à placer dans un module du classeur

Sub InsLig(p)
For L = 1 To p
Range("A4:F4").Select
Selection.EntireRow.Insert
Range("A4:F4").RowHeight = 15
Range("A4:F4").Font.Size = 11
Range("A3").Select
Next L
End Sub

Tu me serais d'une grande aide :)

Bon après midi

JB

Ce serait tellement plus facile avec le fichier

Sub InsLig(p)
For L = 1 To p
Range("A4:F4").Select
[T_index].rows(1).insert
Range("A4:F4").RowHeight = 15
Range("A4:F4").Font.Size = 11
Range("A3").Select
Next L
End Sub

A+ François

Bonsoir François,

Oui je comprends, du coup je joins le fichier de départ. Il suffit de cliquer sur le bouton jaune "Nouvelle Expédition", de renseigner un matricule "ex: A111AA", de renseigner les champs puis de valider. On vient dupliquer la feuille "Bordereau", en y ajoutant les informations saisies puis dans la feuille Index, on vient afficher quelques éléments de notre saisie.

Merci à toi pour ton aide :)

JB

Re,

J'ai essayé le code suivant et cela semble fonctionner mais peux-tu me dire si cela est correct stp ? :)

Sheets("Index").Select
'Report sur Index et sous-traitance d'insertion de lignes
With Sheets("Index")
[T_index].Rows(1).Insert
For m = 45 To 53 Step 2
q = q + 1: lig = 3 + q
If Controls("ComboBox_PS" & q) = "" Then Exit For
.Range("A" & lig) = TextBox_NumBordereau
.Range("B" & lig) = ComboBox1
.Range("C" & lig) = Controls("ComboBox_PS" & q)
.Range("D" & lig) = Controls("Designation_materiel_" & q)
.Range("E" & lig) = Controls("N°serie_" & q)
.Range("F" & lig) = TextBox_Date
Next m
End With

Bonne fin de soirée

JB

Bonsoir François,

Merci beaucoup pour ton aide, j'ai réussi à faire évoluer mon projet suite à la solution proposée !

Ce dernier est presque terminé mais je bloque sur une macro que j'aimerais développer. Pour que cela soit plus compréhensible j'ai mis en commentaire les instructions à suivre sur la page Index du fichier joint. Si tu avais la possibilité de me mettre sur une piste ce serait super ! Dans le commentaire je demande à écrire "Valeur OK" en A18 mais en réalité je viendrais y ajouter un autre code au bout (que j'ai déjà réalisé).

Merci infiniment pour ton aise si précieuse :)

Bonne fin de soirée.

JB

4jb.xlsm (37.76 Ko)

Bonjour

Du coup j'ai supprimé les mfc

La macro se lance au lancement du fichier

et si tu modifie la feuille index une autre macro rempli A18 et colorie les lignes si nécessaire

5jb.xlsm (64.54 Ko)

A+ François

Bonsoir François,

Merci pour ta contribution je vais regarder ça ! Par contre, est-il indispensable de supprimer les MFC pour faire fonctionner cette macro ?

Bonne soirée

JB

Bonsoir François,

J'ai regardé ce que tu m'as proposé et c'est très bien. J'ai voulu l'adapter à mon projet mais je bloque sur un élément. En fait, plutôt que d'écrire "Valeur OK" en cellule A18, j'aimerais que la feuille concernée soit transformée en PDF pour être envoyée par mail. Jusque là j'ai réussi à me débrouiller. Le seul problème, c'est que cela fonctionne uniquement pour la 1ère feuille trouvée (BE-042) mais la boucle ne semble pas continuer son travail (avec la feuille BE-044).

Le but final étant : Au clic sur le bouton jaune sur la page "index" => toutes les feuilles avec un "nbjour">=30 et cellule "date de réception" vide, on sélectionne la feuille, on la transforme en pdf et on la prépare par mail (sans l'envoyer pour le moment) et ensuite on fait de même avec les autres feuilles si les conditions sont vraies.

Je te joins mon fichier ce sera peut-être plus simple de comprendre avec les macros. Ne t’inquiète pas, la macro n'envoie pas de mail, elle le prépare juste.

Pour cet exemple, j'ai effacé volontairement les MFC et les codes qui tu m'avais proposé pour me concentrer uniquement sur cette problématique.

Un grand merci à toi :)

JB

5jb.xlsm (60.22 Ko)

Bonjour

8jb-1.xlsm (56.57 Ko)

A+ François

Rechercher des sujets similaires à "remplissage champs userform"