Remplir cellule vide et nom des onglets >31 caractères
Bonjour à tous,
Sur le fichier joint, j'aurais 2 questions:
* j'aimerais si les cellules C4 et/ou D4 ne sont pas renseignées par l'utilisateur quand il ferme le classeur :
- qu'un message lui signale que "certaines cellules sont vides et seront remplies par "Inconnu""
- que s'il clique sur ok, que les cellules C4 et D4 des feuilles concernées soient rempli par "Inconnu"
- que si je clique sur annuler, que seules les feuilles comportant des cellules vides soient affichées (en plus de la feuille Menu) et que les cellules vides soient colorées.
J'ai ce code qui fonctionne très bien mais le reste de ma requête est bien supérieur à mes faibles connaissances...
If Cells(4, 4).Value = "" Then Cells(4, 4).Value = "Inconnu"
End If* les noms des onglets étant limités à 31 caractères, j'aimerais savoir s'il est possible lorsque le nom dépasse cette limite que les 3 derniers caractères soient remplacés par ...
Merci encore de votre aide !!
Bonne soirée
Amicalement
Bonjour à tous, bonjour Walden,
alors pour spécifier que ce code doit être exécuté à la fermeture du classeur, tu vas dans la barre de gauche dans Visual studio :
tu sélectionnes ThisWorkbook, tu l'ouvres. En haut, à la place de Général, tu sélectionnes Workbook et à droite tu auras open normalement sélectionné, tu choisis BeforeClose
et dans la sub qui s'est crée en dessous, tu entres ton code amélioré, du style :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For j = 1 To Sheets.Count
If Sheets(j).Cells(4, 4).Value = "" Then
d = MsgBox("certaines cellules sont vides et seront remplies par " & Chr(13) & "Inconnu" & Chr(13))
If d = 1 Then
Sheets(j).Cells(4, 4) = "Inconnu"
End If
If d = 2 Then
For i = 1 To Sheets.Count
If Sheets(i).Cells(4, 4) = "" Then
With Sheets(i).Cells(4, 4)
.Color = ga
End With
Else
Sheets(i).Visible = False
End If
Next i
End If
End If
Next j
End SubDésolé, ce n'est qu'une piste parce que je suis assez pressé, mais en gros il faudrait faire ton test sur test feuille et définir un booléen que tu changes pour afficher le message et ensuite tu fais la partie après le msgbox en utilisant le cancel du BeforeClose!
Et c'est pas 13 pour les guillemets dans la fonction Chr, google it t'auras plus d'infos!
Voilà, je repasserai pour voir où ça en est!
Bonne continuation!
ReuK
Bonjour Reuk, le forum,
Merci beaucoup pour ce code qui fonctionne parfaitement, mais je me rends compte que ce que j'ai demandé n'est pas la solution idéale pour mon projet... Mea culpa.
Je pense qu'il serait plus judicieux d'obliger la saisie des infos en B4, C4 et D4 avant de passer au remplissage d'autres cellules. avec une msgbox signalalnt à l'utilisatezur cette obligation et la possiblité d'entrer inconnu en cas de doute.. L'ordre de remplissage peut être dans n'importe quel ordre.Qu'en pensez-vous,
Merci
Bonne journée
Amicalement
Re-,
en cherchant.... J'ai résolu cette partie de mon problème en passant par option/Validation !
Reste mon problème de renommage d'onglet... Comme je l'ai expliqué précédemment, je laisse la possibilité à l'utilisateur d'indiquer "Inconnu" en C4 ou D4, mais est-il possible d'incrémenter cet "inconnu" en "inconnu (2)", "inconnu (3)".. pour éviter que ma commande plante :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Name = "Type " & [C4] & " - Lot " & [D4]
End Sub
'Exemple en pj !
Bonne journée,
Amicalement
Bon j'avance petit à petit et je me rends compte de mes erreurs..
La formule validation fonctionne bien mais n'est malheureusement pas suffisante, puisque limitée à quelques cellules...
Ma demande formulée plus haut :
Je pense qu'il serait plus judicieux d'obliger la saisie des infos en B4, C4 et D4 avant de passer au remplissage d'autres cellules. avec une msgbox signalalnt à l'utilisateur cette obligation et la possiblité d'entrer inconnu en cas de doute.. L'ordre de remplissage peut être dans n'importe quel ordre
reste donc d'actualité.
Je pensais à un code approchant:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B4").Value = "" Then
Range("B4").Select
MsgBox "remplir la cellule B4 svp", vbOK
End If
End SubMais je ne sais pas comment l'étendre aux 2 autres cellules (c4 et d4) et permttre le remplissage de ces 3 cellules dans un ordre ou un autre....
Désolé de revenir sur mes questions mais j'essaie de trouver par moi-même, même si bien souvent je me trompe...
Bonne journée,
Amicalement