Macro bancale et user forme non automatique
Bonjour,
Je débute dans le VBA et j'aurais grandement besoin de votre aide sur un soucis que je rencontre avec l'utilisation d'un userform que je viens de créer (je débute...)
Avant de vous exposer mon problème, je vais vous expliquer en 2 lignes le fonctionnement du fichier :
Depuis l'onglet budget, on va chercher toutes les informations situées dans l'onglet plan de maintenance prev pour un produit et un libellé de tâche que nous souhaitons étudier (choix en A16 et B16 avec cascade déroulante).
Afin que les calculs (un peu plus bas) de l'onglet budget puissent s'adapter dynamiquement à différents plan de maintenance qui peuvent changer (variation de colonne etc...), j'ai créé une recherche INDEX qui nécessite de la part de l'utilisateur 2 minutes de configuration : simplement renseigner les numéros de colonne (du plan de maintenance) correspondant aux items qui nous intéressent dans le tableau de configuration de colonne (onglet budget). Une fois les colonne déterminées par l'utilisateur, les recherches INDEX extraient les données et nous obtenons nos calculs...
J'ai créé un userform afin que la configuration des colonnes se fassent directement depuis l'userform (ce qui me permettra plus tard de virer le tableau de configuration et de n'avoir que l'userform, et ça fait un petit côté professionnel très flatteur...
1) Une première macro est faite pour obtenir la liste déroulante lors du choix du produit à étudier. Je ne sais pas du tout si elle est optimisé car c'est un membre du forum qui me l'avait faite et j'ai fais quelques petits changements et elle est peut etre trop complexe pour une simple cascade déroulante (qui présente d'ailleurs dans la colonne produit, sans grande incidence sur la recherche, des doublons... mais tant pis je fais avec :'(((((((((
2) Afin d'effacer les colonnes de choix produit à l'ouverture du fichier(A16 et B17), j'ai rajouter ces lignes
Private Sub Workbook_Open()
Range("A16:B16").Select
Selection.ClearContents
End Sub
sauf qu'après l'ajout de ses lignes, quand j'ouvrais le fichier, il plantait du coup j'ai rajouter une sorte de système anti bug "On Error GoTo Fin" au début de la macro de la cascade déroulante...ça ne fait plus le bug du coup mais j'ai l'impression de faire un peu trop de bidouillage...
3) Afin de configurer les colonnes pour l'utilisation du fichier, je dois passer par la case développeur pour faire lecture et lancer l'user forme... j'ai essayé de créer un bouton et de rattacher le lancement de l'userform mais sans succès.
De plus, lorsque j'ai fais ma configuration des colonnes, si je ferme et ré-ouvre le fichier, et lance mon userform, je dois à nouveau renseigner toutes les colonnes, celui-ci semble prendre sa forme initiale lors de sa création...
Ah oui et j'ai aussi une erreur quand je lance mon userform, car j'ai rajouté une fonction modale pour pouvoir afficher l'user form et pouvoir naviguer dans mes onglets...
Désolé je sais que c'est un peu long mais toutes informations que vous voudrez bien me donner seront bénéfiques pour moi,
Je vous remercie d'avance
Voici le lien de la bête :
Merci
Oui 2 lignes c'est vrai que j'étais inspiré mais j'ai essayé d'être concis sans être barbant... A voir si j'ai respecté le deal lol
Bonjour,
Après lecture de ton code il me semble qu'il ne peut fonctionner que si le fichier a été enregistré à la fermeture sur l'onglet
"Budget".
Dans le cas contraire ton workbook_open ne va pas modifier les bonnes cellules.
J'ai essayé avec :
Private Sub Workbook_Open()
With Sheets("Budget")
.activate
Range("A16:C16").Select
Selection.ClearContents
End With
End Subje n'ai pas d'erreur de mon coté
Pour le reste je pense que Ric a déjà résolu
Alors pour vous tenir au courant, j'ai remis mes lignes fastidieuses text box pour correctement afficher les colonnes sur les bonnes lignes (oui la solution de ric est top mais vu que certaines text box ont une numérotation qui n'a pas de logique ça faisait un décalage sur la ligne item.
Mon user forme se lance correctement a l'ouverture du fichier ça c'est top !
Dernière petite chose quand j'enregistre ferme et reouvre le fichier, luser form reviens a sa forme sans valeur ... Est il possible de sauvegarder les données rentrées dans luserform ?
Merci a vous
Re,
Pour être précis :
Tu souhaites qu'à l'ouverture du userform ( donc évènement bouton clic)
le userform se charge avec les derniers renseignements validés ?
Oui voilà parce que c'est un fichier que l'on configure qu'une fois pour l'exploiter. Quand je redémarre il y a 2 colonnes où il est inscrit 44 et le reste vide (d'ailleurs je n'arrive pas a voir à quel moment ces données ont été enregistrées et ou sont elles stockés...). L'idée serait qu'il garde tout ses paramétrages
ok je vois ,
Les infos pour le userform sont bien à de H6 à N9 ?
Pour la ligne formation du userform les infos sont ou ?
Nota le 44 à été tapé directement à la création du userform. donc il affiche toujours 44 pour le moment.
H5 car il a la ligne des formations également,
J'en profite pour une autre question après je ne vous embête plus
Lorsque je vérouiller le tableau non modifiable en bas pour protéger la zone, ma liste déroulante en cascade ne fonctionne plus, vous avez une solution ?
Merci bcp
Bonjour à tous,
Lorsque je vérouiller le tableau non modifiable en bas pour protéger la zone, ma liste déroulante en cascade ne fonctionne plus, vous avez une solution ?
Le code modifié ainsi > si la protection est active, elle restera active.
Si la protection est inactive, elle restera inactive.
Et A16 et B16 fonctionneront que la feuille soit protégée zou pas.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim oSheet As Worksheet
Dim oCell As Range, oRange As Range
Dim sAdresses As String
Dim lRowMin As Long, lRowMax As Long
Dim EtatdelaProtection As Boolean
'Dim colpas As Long
'On s'assure que la cellule modifiée est dans la colonne A et la ligne >=16
If Target.Count = 1 And Target.Column = 1 And Target.Row = 16 Then '''''>= 16 Then
If Me.ProtectContents = True Then EtatdelaProtection = True
Me.Unprotect ' désactiver la protection
colpas = Chr(Cells(7, 8).Value + 64)
On Error GoTo Fin
'On s'assure qu'une valeur est bien renseignée dans la colonne A
If Len(Target.Value) > 0 Then
'On initialise le variable sAdresses
Set oSheet = ThisWorkbook.Worksheets("Plan de maintenance prév.")
sAdresses = "='" & oSheet.Name & "'!"
'On selectionne les lignes de la feuille "Plan de maintenance prev." pour la valeur contenu dans A
Set oRange = oSheet.UsedRange
lRowMin = 0
lRowMax = 0
If oRange.Rows.Count > 0 Then
For Each oCell In oRange.Columns(1).Cells
If oCell.Value2 = Target.Value Then
If lRowMin = 0 Then
lRowMin = oCell.Row
lRowMax = oCell.Row
Else
If oCell.Row > lRowMax Then
lRowMax = oCell.Row
End If
End If
End If
Next
sAdresses = sAdresses & colpas & lRowMin & ":" & colpas & lRowMax
' ='Plan de maintenance prév.'!$A$5:$A$460
'On ajoute la validation dans la colonne "E"
Set oCell = Target.Offset(, 1)
With oCell.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:=xlBetween, Formula1:=sAdresses
.IgnoreBlank = True
.InCellDropdown = True
.ShowInput = True
.ShowError = True
End With
'S'il n'y a qu'une valeur dans la liste, on la copie dans la cellule. Sinon on vide la cellule
If lRowMin = lRowMax And lRowMin > 0 Then
oCell.Value = oSheet.Range("$H" & lRowMin).Value
Else
oCell.Value = ""
End If
End If
End If
End If
If EtatdelaProtection = True Then Me.Protect ' réactiver la protection 1re cas
Exit Sub
Fin:
If EtatdelaProtection = True Then Me.Protect ' réactiver la protection 1re cas
End Subric
merci ric, cela fonctionne parfaitement,
merci à tous pour votre aide
Désolé je n'étais pas là hier après midi mais je vois que Ric a résolu le problème