XL 2019 Numérotation de cellules avec macro et condition

pat66

XLDnaute Impliqué
Bonjour le forum,
je souhaite pouvoir numéroter un certain nombre de lignes dans la même colonne, voila ce que j'utilise dans un module standard
Sub numero()
For Ctr = 1 To 10
Range("A1:A10")(Ctr) = Ctr
Next
Range("A1:A10").Font.ColorIndex = 1
End Sub

Mais il faudrait que je puisse le faire en inscrivant dans une cellule (ex B5), le nombre de cellules à numéroter, exemple :
B5= 25 , 25 lignes de A1 à A25 se numérotent de 1 à 25
B5= 15 , 15 lignes de A1 à A15 se numérotent de 1 à 15,
Bien sur, les cellules qui étaient remplies par exemple de 16 à 25 se vident ou se remplissent selon la valeur de B5

et enfin si B5 = "", la numérotation disparait c'est à dire que les cellules redeviennent vides

J'espère être clair dans mes propos

un grand merci pour votre aide et votre temps

Pat66
 
Dernière édition:
Solution
Voir PJ. Si B5 > 25 alors on ne fait rien.
VB:
Sub Remplit()
Application.ScreenUpdating = False
Range("A5:A30").ClearContents
If [B5] = "" Or [B5] > 25 Then Exit Sub
For L = 5 To 5 + [B5]
    Cells(L, "A") = L - 4
Next L
End Sub

pat66

XLDnaute Impliqué
Bonjour Sylvanu
Bonjour le fil

Sylvanu, j'ai un problème quand je change la valeur de AE5, AE18 bascule soit sur "afficher" soit sur "masquer", saurais tu pourquoi ?

Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.ScreenUpdating = false
On Error GoTo Fin
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("F18,J18,Q18,W18,Y18,AA18,AC18,AE18,AG18,AM18,AO18")) Is Nothing Then
If Target = "Afficher" Then Target = "Masquer" Else Target = "Afficher"
Cells(3, Target.Column).Select
End If
Fin:
Application.ScreenUpdating = True
End Sub

Merci d'avance
Pat
 

pat66

XLDnaute Impliqué
Bonjour le fil
bonjour Sylvanu,

j'ai identifié le problème, cela vient du fait que je protège la feuille en décochant "sélectionner les cellules verrouillées", alors lorsque je mets un nombre, la macro va cliquer sur "afficher ou masquer " de la même colonne qui est une cellule non protégée, il y t'il un moyen d'éviter cela ? car j'ai besoin de protéger ma feuille

Merci
 
Dernière édition:

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour,
Bonne nouvelle.
Si le problème vient des protections, on peut le contourner en supprimant ces protections avec :
VB:
Sub Test()
  ActiveSheet.Unprotect ("mot de passe") ' supprime le mot de passe'
     Travail à effectuer
  Sheets(1).Protect Password:="mot de passe" ' remise en place du mot de passe'
End Sub
ou si les feuilles sont protégées mais sans mot de passe :
VB:
Sub Test()
  ActiveSheet.Unprotect
     Travail à effectuer
  Sheets(1).Protect
End Sub
 

pat66

XLDnaute Impliqué
Bonjour le fil
Bonjour Sylvanu,

Les cellules suivantes ("F18,J18,Q18,W18,Y18,AA18,AC18,AE18,AG18,AM18,AO18") contiennent "Afficher " ou "Masquer" grace à SelectionChange(ByVal Target As Range) (voir ta macro)

Pour des raisons esthétiques, je souhaite dissimuler chaque cellule derrière une forme pour chaque cellule

Ma question, serait il possible qu'en cliquant sur une forme, cela écrive "Afficher" ou "Masquer"

exemple :
forme 1 écrira en alternance "Afficher " ou "Masquer" dans F18
forme 2 écrira en alternance "Afficher " ou "Masquer" dans J18
etc....

merci d'avance
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Bonjour Pat,
Ca fait cher pour de l'esthétisme. :)
Il va vous falloir mettre une macro sur chaque forme. Par exemple pour F18 :
Créez cette macro :
VB:
Sub ModifF18()
    If [F18] = "Masquer" Then [F18] = "Afficher" Else [F18] = "Masquer"
End Sub
Mettte une forme sur la feuille et sur cette forme faites clic droit Affecter une macro et choisir ModifF18.
..... et ce pour chaque forme en changeant F18 par J18 etc. , etc.

Penser sur les macro actuelles à supprimer ou renommer Worksheet_SelectionChange, sinon le fait de changer la valeur en F18 appellera cette macro. Ce qui fait que ModifF18 changera Masquer en Afficher, ce qui appellera Worksheet_SelectionChange qui changera Afficher en Masquer.
Ce qui fait que vous changerez Masquer en Masquer ! 😅

Les macros complètes :
Code:
Sub ModifF18()
    If [F18] = "Masquer" Then [F18] = "Afficher" Else [F18] = "Masquer"
End Sub
Sub ModifJ18()
    If [J18] = "Masquer" Then [J18] = "Afficher" Else [J18] = "Masquer"
End Sub
Sub ModifQ18()
    If [Q18] = "Masquer" Then [Q18] = "Afficher" Else [Q18] = "Masquer"
End Sub
Sub ModifW18()
    If [W18] = "Masquer" Then [W18] = "Afficher" Else [W18] = "Masquer"
End Sub
Sub ModifY18()
    If [Y18] = "Masquer" Then [Y18] = "Afficher" Else [Y18] = "Masquer"
End Sub
Sub ModifAA18()
    If [AA18] = "Masquer" Then [AA18] = "Afficher" Else [AA18] = "Masquer"
End Sub
Sub ModifAC18()
    If [AC18] = "Masquer" Then [AC18] = "Afficher" Else [AC18] = "Masquer"
End Sub
Sub ModifAE18()
    If [AE18] = "Masquer" Then [AE18] = "Afficher" Else [AE18] = "Masquer"
End Sub
Sub ModifAG18()
    If [AG18] = "Masquer" Then [AG18] = "Afficher" Else [AG18] = "Masquer"
End Sub
Sub ModifAM18()
    If [AM18] = "Masquer" Then [AM18] = "Afficher" Else [AM18] = "Masquer"
End Sub
Sub ModifAO18()
    If [AO18] = "Masquer" Then [AO18] = "Afficher" Else [AO18] = "Masquer"
End Sub
On doit pouvoir faire plus court en nommant intélligemment les formes et en exdtrayant la reference cellule avec Application.Caller, mais ce serait plus complexe pour vous, je pense.
 

sylvanu

XLDnaute Barbatruc
Supporter XLD
Re,
En fait, ce que j'ai suggéré à la fin n'est peut être pas plus compliqué. A vous de voir.
Toutes les cellules à modifier sont le fait d'une seule macro de 2 lignes. Un exemple en PJ avec :
VB:
Sub Test()
' Récupere la fin du nom du bouton appuyé, après "_"
Cellule = Split(Application.Caller, "_")(1)
' Utilise ce nom pour changer la veleur de la cellule correspondante.
If Range(Cellule) = "Afficher" Then Range(Cellule) = "Masquer" Else Range(Cellule) = "Afficher"
End Sub
 

Pièces jointes

  • Pat99.xlsm
    13.6 KB · Affichages: 3

Discussions similaires

Statistiques des forums

Discussions
311 709
Messages
2 081 774
Membres
101 816
dernier inscrit
Jfrcs