Option à l'ouverture d'un fichier et autre
Re,
Clique sur une cellule ayant la formule RECHERCHEV() et normalement, tu devrait avoir $B$5 dans l'index de colonne (troisième argument de la fonction) et bien change en $A$4 car rappelle toi, c'est dans cette cellule qu'est inscrit, à l'ouverture, l'index de la colonne correspondant au grade choisi !
Pour ça je suis d'accord avec vous, j'ai compris ce principe de renvoie. Mais du coup ce que je n'arrive pas à faire, c'est envoyer ses donnés dans la colonne B et les supprimer de la colonne A
Bonjour,
Désolé, je n'avais pas compris que c'était l'inverse que tu voulais !
Dans ce cas, c'est dans le code que tu dois faire la modif et dans la procédure "QueryClose()" et dans cette partie là :
For Each Fe In Worksheets
If Fe.Name <> "Tableau des Taux" Then
Fe.Range("A3").Value = Grade
Fe.Range("A4").Value = IDCol
Fe.Range("A4").NumberFormat = ";;;" 'rend la valeur invisible dans la cellule (visible dans la barre de formule)
End If
Next Fe
donc, le code devient :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim Fe As Worksheet
Dim Ctrl As Control
Dim Cocher As Boolean
Dim Grade As String
Dim IDCol As Integer
'si c'est le bouton Annuler, fin de procédure
If Annuler = True Then Exit Sub
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "OptionButton" Then
If Ctrl.Value = True Then Cocher = True: Exit For
End If
Next Ctrl
'empêche la fermeture si le choix n'est pas fait
If Cocher = False Then
MsgBox "Vous devez sélectionner votre grade !"
Cancel = True
Exit Sub
End If
'mémorise le choix dans la variable
Grade = Switch(OptSapeur.Value = True, "Sapeur", _
OptCaporal.Value = True, "Caporal", _
OptSousOfficier.Value = True, "Sous-Officier", _
OptOfficier.Value = True, "Officier")
'défini la position de la colonne correspondante au grade dans le tableau
'"G12:C17" de la feuille "Tableau des Taux"
Select Case Grade
Case "Sapeur": IDCol = 2
Case "Caporal": IDCol = 3
Case "Sous-Officier": IDCol = 4
Case "Officier": IDCol = 5
End Select
For Each Fe In Worksheets
If Fe.Name <> "Tableau des Taux" Then
Fe.Range("B4").Value = Grade
Fe.Range("B5").Value = IDCol
Fe.Range("B5").NumberFormat = ";;;" 'rend la valeur invisible dans la cellule (visible dans la barre de formule)
End If
Next Fe
End Sub
Bonjour.
Super merci j'ai réussi.
J'ai enfin compris pourquoi je n'arrivai pas à rentrer dans les lignes de code: en fait pour faire alt F11 il me faut faire alt Fn F11.
Encore un grand merci pour votre aide.
Re,
Content que tu ai réussi à faire ce que tu voulais !
J'ai enfin compris pourquoi je n'arrivai pas à rentrer dans les lignes de code: en fait pour faire alt F11 il me faut faire alt Fn F11.
si tu as un HP tu peux désactiver la touche fn, regardes cette page (c'est ce que j'ai fais sur le mien !)
Merci pour l'info j'ai un packard bell mais je vais essayer quant même on ne sais jamais.
RE
Du coup nouvelle question qui sera la dernière:
Je viens de créer une nouvelle feuille qui s’appelle "Récapitulatif" et qui ce situe en 1er, hors quant j'ouvre le classeur et sélectionne mon grade celui ci apparait sur cette feuille et je ne voudrai pas.
J'ai fouillé un peu dans luserform mais je n'es pas trouvé de ligne qui pourrai faire que ça ne s'affiche pas sur cette feuille comme sur la feuille du tableau des taux.
Comment faire? Si besoin je joindrai le fichier.
Merci
Toujours dans QueryClose(), à la ligne ci-dessous, il te faut rajouter la feuille à éviter :
If Fe.Name <> "Tableau des Taux" And Fe.Name <> "Récapitulatif" Then
le code modifié :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim Fe As Worksheet
Dim Ctrl As Control
Dim Cocher As Boolean
Dim Grade As String
Dim IDCol As Integer
'si c'est le bouton Annuler, fin de procédure
If Annuler = True Then Exit Sub
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "OptionButton" Then
If Ctrl.Value = True Then Cocher = True: Exit For
End If
Next Ctrl
'empêche la fermeture si le choix n'est pas fait
If Cocher = False Then
MsgBox "Vous devez sélectionner votre grade !"
Cancel = True
Exit Sub
End If
'mémorise le choix dans la variable
Grade = Switch(OptSapeur.Value = True, "Sapeur", _
OptCaporal.Value = True, "Caporal", _
OptSousOfficier.Value = True, "Sous-Officier", _
OptOfficier.Value = True, "Officier")
'défini la position de la colonne correspondante au grade dans le tableau
'"G12:C17" de la feuille "Tableau des Taux"
Select Case Grade
Case "Sapeur": IDCol = 2
Case "Caporal": IDCol = 3
Case "Sous-Officier": IDCol = 4
Case "Officier": IDCol = 5
End Select
For Each Fe In Worksheets
If Fe.Name <> "Tableau des Taux" And Fe.Name <> "Récapitulatif" Then
Fe.Range("B4").Value = Grade
Fe.Range("B5").Value = IDCol
Fe.Range("B5").NumberFormat = ";;;" 'rend la valeur invisible dans la cellule (visible dans la barre de formule)
End If
Next Fe
End Sub
Ok d'accord javais essayé avec un point virgule ou en compiant la ligne en remplacant juste le nom de la feuille
Je joins mon fichier final ou persiste une erreur a l'ouverture après avoir sélectionné le grade
Ce message d'erreur apparait que si toutes les feuilles sont verrouillés s'il y'a na juste une de verrouillée aucun message.
Re,
Les feuilles sont protégées donc il n'est pas possible d'effectuer une modif, il faut déprotéger avant !
If Fe.Name <> "Tableau des Taux" And Fe.Name <> "Récapitulatif" Then
Fe.Unprotect "230716" 'il faut ôter la protection avec de modifier la valeur de la cellule !
Fe.Range("B4").Value = Grade
Fe.Range("B5").Value = IDCol
Fe.Range("B5").NumberFormat = ";;;" 'rend la valeur invisible dans la cellule (visible dans la barre de formule)
Fe.Protect "230716" 'et ensuite, reprotéger la feuille
End If
Voici à nouveau le code :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim Fe As Worksheet
Dim Ctrl As Control
Dim Cocher As Boolean
Dim Grade As String
Dim IDCol As Integer
'si c'est le bouton Annuler, fin de procédure
If Annuler = True Then Exit Sub
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "OptionButton" Then
If Ctrl.Value = True Then Cocher = True: Exit For
End If
Next Ctrl
'empêche la fermeture si le choix n'est pas fait
If Cocher = False Then
MsgBox "Vous devez sélectionner votre grade !"
Cancel = True
Exit Sub
End If
'mémorise le choix dans la variable
Grade = Switch(OptSapeur.Value = True, "Sapeur", _
OptCaporal.Value = True, "Caporal", _
OptSousOfficier.Value = True, "Sous-Officier", _
OptOfficier.Value = True, "Officier")
'défini la position de la colonne correspondante au grade dans le tableau
'"G12:C17" de la feuille "Tableau des Taux"
Select Case Grade
Case "Sapeur": IDCol = 2
Case "Caporal": IDCol = 3
Case "Sous-Officier": IDCol = 4
Case "Officier": IDCol = 5
End Select
For Each Fe In Worksheets
If Fe.Name <> "Tableau des Taux" And Fe.Name <> "Récapitulatif" Then
Fe.Unprotect "230716" 'il faut ôter la protection avec de modifier la valeur de la cellule !
Fe.Range("B4").Value = Grade
Fe.Range("B5").Value = IDCol
Fe.Range("B5").NumberFormat = ";;;" 'rend la valeur invisible dans la cellule (visible dans la barre de formule)
Fe.Protect "230716" 'et ensuite, reprotéger la feuille
End If
Next Fe
End Sub
Le but recherché et que seule les cellules blanches soient modifiables. Je vais essayer le nouveaux code.
Super ça fonctionne . Par contre ça scintille à l’ouverture c'est normal?
Bonjour,
Dans ce cas, il te faut geler le rafraîchissement avec "Application.ScreenUpdating = False" :
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Dim Fe As Worksheet
Dim Ctrl As Control
Dim Cocher As Boolean
Dim Grade As String
Dim IDCol As Integer
'si c'est le bouton Annuler, fin de procédure
If Annuler = True Then Exit Sub
For Each Ctrl In Me.Controls
If TypeName(Ctrl) = "OptionButton" Then
If Ctrl.Value = True Then Cocher = True: Exit For
End If
Next Ctrl
'empêche la fermeture si le choix n'est pas fait
If Cocher = False Then
MsgBox "Vous devez sélectionner votre grade !"
Cancel = True
Exit Sub
End If
'mémorise le choix dans la variable
Grade = Switch(OptSapeur.Value = True, "Sapeur", _
OptCaporal.Value = True, "Caporal", _
OptSousOfficier.Value = True, "Sous-Officier", _
OptOfficier.Value = True, "Officier")
'défini la position de la colonne correspondante au grade dans le tableau
'"G12:C17" de la feuille "Tableau des Taux"
Select Case Grade
Case "Sapeur": IDCol = 2
Case "Caporal": IDCol = 3
Case "Sous-Officier": IDCol = 4
Case "Officier": IDCol = 5
End Select
Application.ScreenUpdating = False
For Each Fe In Worksheets
If Fe.Name <> "Tableau des Taux" And Fe.Name <> "Récapitulatif" Then
Fe.Unprotect "230716" 'il faut ôter la protection avec de modifier la valeur de la cellule !
Fe.Range("B4").Value = Grade
Fe.Range("B5").Value = IDCol
Fe.Range("B5").NumberFormat = ";;;" 'rend la valeur invisible dans la cellule (visible dans la barre de formule)
Fe.Protect "230716" 'et ensuite, reprotéger la feuille
End If
Next Fe
Application.ScreenUpdating = True
End Sub
Salut.
Impect merci pour le code mon tableau est 100% fonctionnel.
Encore un grand merci.
Y'a t'il une option pour remercier un membre sur le forum?
Re,
Tu viens de le faire et par deux fois dans le même message donc c'est très bien et je suis content d'avoir pus t'aider !