Masquer des lignes et colonnes en fonction d'une valeur d'un menu déroulant

Par contre vous affichez les colonnes avec un décalage dans votre code.

Heu c'est à dire ?

Sur le mien j'affiche C et E quand vous affichez D et F.

Sur le mien j'affiche C et E quand vous affichez D et F.

ok je reviens
image

L'erreur dans ce que je vous ai envoyé c'est que j'ai oublié de masquer les lignes 2 à 15.

En réalité je voudrais voir affiché les colonnes ci dessus et masquer les lignes 2 à 15 lorsque A17 est vide.

L'erreur dans ce que je vous ai envoyé c'est que j'ai oublié de masquer les lignes 2 à 15.
En réalité je voudrais voir affiché les colonnes ci dessus et masquer les lignes 2 à 15 lorsque A17 est vide.

ok comme ceci donc

presse papier03

Oui, c'est parfait.

Ok. Donc faites ceci en premier

1. Allez dans le gestionnaire de noms (Important !) :
- cliquez sur le noms "villes"
- Dans référence à, modifiez la formule comme ceci --> ='Synoptique des moyens'!$A$2:$A$15 puis OK

2. Allez dans l'éditeur VBA, :
- Dans le menu cliquez sur Insertion --> module
- Dans la fenêtre ajoutez ce code

Option Explicit
Sub Affiche()
With Cells
    .EntireRow.Hidden = False
    .EntireColumn.Hidden = False
End With
End Sub

3; Allez dans la feuille Synoptique des moyens et remplacez tout le code par celui ci-dessous

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Not Intersect(Target, Range("Choix_ville")) Is Nothing Then
    Dim dcol As Integer, lig As Integer, i As Integer
    Dim cel As Range, plage As Range

    Call Affiche

    dcol = ActiveSheet.UsedRange.Columns.Count

    If Target = vbNullString Then
        lig = Target.Offset(-1, 0).Row

        For i = 2 To dcol Step 5
            Columns(i).Hidden = True
            Columns(i + 2).Hidden = True
            Columns(i + 4).Hidden = True
        Next i
        Rows("2:" & lig).EntireRow.Hidden = True
        Exit Sub
    End If

    lig = WorksheetFunction.Match(Target.Value, Range("Villes")) + 1
    Set plage = Range(Cells(lig, 2), Cells(lig, dcol))

    'masquer affiche colonne
    For Each cel In plage
        If cel.Value > 0 Then
            cel.EntireColumn.Hidden = False
        Else: cel.EntireColumn.Hidden = True
        End If
    Next cel

    'masquer afficher villes
    For Each cel In Range("Villes")
        If cel.Row = Target.Row Then Exit Sub
        If cel <> Target.Value Then
            Rows(cel.Row).Hidden = True
        Else: Rows(cel.Row).Hidden = False
        End If
    Next cel
End If
End Sub

En cas d'ajout de villes, veiller bien à insérer entre A2 et A15 surtout !!

Il restera l'aspect de l'option Toutes à régler

Je viens de tout remplacer comme expliqué ci dessus :

- la case A17 vide fonctionne parfaitement.

- Les différents tests avec le choix d'une ville n'ont montré aucune erreur.

Je me suis surement mal exprimé sur le "Toutes" car en réalité j'aurais du vous dire "Tous" car mon objectif est de voir la situation des véhicules dans les 61 garages grâce au code couleur.

L'affinage par choix de ville permet de voir quel véhicule est disponible pour se déplacer entre les 8 garages les plus proches.

Tout ça pour vous dire que je n'ai donc pas besoin de cette case "TOUTES", votre fichier est parfait, j'espère un jour être en capacité de comprendre une partie du code utilisé.

Encore merci pour votre aide, je reviens vers vous si j'ai un soucis techniques mais pour le moment tout semble se passer pour le mieux et j'ai bien compris que je dois rajouter mes villes avant la ligne 15, de toute façon je garderai une sauvegarde de base au cas où.

Milles merci pour votre patience et votre gentillesse, vous me rendez un immense service.

Romain

Content que cela fonctionne bien.

Tout ça pour vous dire que je n'ai donc pas besoin de cette case "TOUTES", votre fichier est parfait, j'espère un jour être en capacité de comprendre une partie du code utilisé.

Si besoin je vous donnerai l'explication de chaque ligne

Pour l'option Toutes, l'idée était de simplement pouvoir réafficher la feuille avec aucunes lignes et colonnes masquée en cliquant sur une cellule remplie de la mention Toutes.
Toutefois dans l'état actuel, si besoin il vous suffit d'exécuter le code Afficher placé dans le module. Raison pour laquelle je l'ai séparé de l'autre code

Encore merci pour votre aide,

Pas de soucis. Avec plaisir !

Si terminé pensez à

Cordialement

Bonsoir Dan,

Je ne sais pas si je fais bien de reprendre ce post ou si vous préférez que j'en ouvre un nouveau mais j'ai une question concernant l'écriture intuitive qui ne fonctionne pas dans ma cellule A517.

Celle ci contient bien un menu déroulant de l'ensemble de mes communes des lignes 2 à 515 mais l'écriture intuitive prend en compte les cellules du dessous, est ce normal ?

Est il possible en cliquant après avoir déroulé le menu en A517 de taper la première lettre pour que cela se rapproche de notre recherche ?

Merci pour votre retour.

Romain

Bonjour

Je ne sais pas si je fais bien de reprendre ce post ou si vous préférez que j'en ouvre un nouveau

Non, on peut continuer ici

j'ai une question concernant l'écriture intuitive qui ne fonctionne pas dans ma cellule A517.

En premier je dirais qu'il faut savoir si vous avez bien suivi les indications que je vous avais données ici --> https://forum.excel-pratique.com/s/goto/1188166
Ensuite quand vous dites "les cellules du dessous ..." de quelles cellules parlez-vous ?

Est il possible en cliquant après avoir déroulé le menu en A517 de taper la première lettre pour que cela se rapproche de notre recherche ?

A analyser car cela risque de compromettre tout le code

Bonjour,

En premier je dirais qu'il faut savoir si vous avez bien suivi les indications que je vous avais données ici

J'ai bien vérifié le code, tout me semble correct.

Ensuite quand vous dites "les cellules du dessous ..." de quelles cellules parlez-vous ?

Je parle des cellules A518 à A535, l'écriture intuitive se base sur ces cellules ci.

Est il possible en cliquant après avoir déroulé le menu en A517 de taper la première lettre pour que cela se rapproche de notre recherche ?

A analyser car cela risque de compromettre tout le code

Dans ce cas est il possible d'avoir simplement l'écriture intuitive qui prend sa source dans les cellules A2 à A515 ?

C'est simplement pour accélérer la recherche et une aide car une erreur d'orthographe peut vite arriver.

Merci d'avance,

Romain

Je parle des cellules A518 à A535, l'écriture intuitive se base sur ces cellules ci.

Que voulez-vous dire par "ecriture intuitive" ?
vous avez quoi entre 515 et 535, les villes ou autre chose

Votre liste de validation est positionnée en A537. Juste ?

C'est simplement pour accélérer la recherche et une aide car une erreur d'orthographe peut vite arriver.

On peut faire en sorte de simplement taper la première lettre de la ville et cela vous donnerait toutes les villes commençant par cette lettre ?

Ma validation de commune est bien en A537 et si je tape la ville en entier en "majuscule" c'est parfait.

Ce que j'entends par "écriture intuitive" c'est le fait qu'à chaque fois que je vais taper une lettre ça va resserrer le champ des réponses possibles jusqu'à me proposer une seule ville lorsqu'il n'y a qu'une seule possibilité. Dans le cas de la capture d'écran en tapant "D" ça me propose de suite "DIVERS" car c'est le seul mot qui commence par "D". Si j'avais mis "S" j'aurais eu 4 possibilités, "SO" ça me propose plus que "SOUTIEN / APPUI".

Entre dessous ce sont mes catégories de véhicule.

On peut faire en sorte de simplement taper la première lettre de la ville et cela vous donnerait toutes les villes commençant par cette lettre ?

Oui ce serait amplement suffisant, l'idée est que ça me réduise les possibilités chaque fois que je rajoute une lettre.

image

Merci de vos précisions

Ce que l'on peut faire c'est que vous entrez les lettres que vous désirez en A517 et une fois que vous appuyez sur la touche Entrée de votre clavier, la liste de validation reprendra toutes les villes que le code a trouvé.
Il vous suffira ensuite d'aller sélectionner la ville désirée dans la liste.
Si vous videz la cellule A517, la liste de validation reprendra toutes les villes reprises.

Cela conviendrait-il ?

Ce serait parfait, c'est exactement ce que je cherche à faire.

J'avais pensé mettre toutes mes lignes 2 à 515 à partir de 518 pour que cela prenne en compte l'écriture intuitive mais comme je n'ai pas eu le temps de déchiffrer tout le code de la que vous maviez envoyé j'ai bien peur que cela ne fonctionne plus après.

re,

Faites les changements suivants:

1. Allez dans la feuille Synoptique des moyens et remplacez tout le code par celui ci-dessous

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Count > 1 Then Exit Sub

If Not Intersect(Target, Range("Choix_ville")) Is Nothing Then
    Dim dcol As Integer, lig As Integer, i As Integer
    Dim cel As Range, plage As Range

    Call Affiche

    dcol = ActiveSheet.UsedRange.Columns.Count

    If Target = vbNullString Then
        lig = Target.Offset(-1, 0).Row

        For i = 2 To dcol Step 5
            Columns(i).Hidden = True
            Columns(i + 2).Hidden = True
            Columns(i + 4).Hidden = True
        Next i
        Rows("2:" & lig).EntireRow.Hidden = True
        Liste_validation Target
        Exit Sub
    End If

    On Error Resume Next
    lig = WorksheetFunction.Match(Target.Value, Range("Villes")) + 1
    Liste_validation Target
    Set plage = Range(Cells(lig, 2), Cells(lig, dcol))

    'masquer affiche colonne
    For Each cel In plage
        If cel.Value > 0 Then
            cel.EntireColumn.Hidden = False
        Else: cel.EntireColumn.Hidden = True
        End If
    Next cel

    'masquer afficher villes
    For Each cel In Range("Villes")
        If cel.Row = Target.Row Then Exit Sub
        If cel <> Target.Value Then
            Rows(cel.Row).Hidden = True
        Else: Rows(cel.Row).Hidden = False
        End If
    Next cel
End If
Range("Choix_ville").Select 'selectionne la cellule contenant le liste deroulante
End Sub

2. Allez dans le module 1 et en dessous du code Affiche, ajoutez ce code-ci

Sub Liste_validation(Target As Range)
Dim tablo
Dim cel As Range

For Each cel In Range("Villes")
    If cel Like "*" & Target & "*" Then
        tablo = tablo & cel.Value & ","
    End If
Next cel
With Range("Choix_ville").Validation
    .Delete
    .Add Type:=xlValidateList, Formula1:=tablo
    .ShowInput = True
    .ShowError = False
End With
End Sub

Pour le test :
- Tapez une lettre ou 2 là où se trouve la liste de validation puis Entree
- Ensuite choisir dans la liste la ville que vous voulez

Si vous videz la cellule contenant la liste de validation, cela ré-affichera toutes les villes


Si vous voulez un petit plus :
Allez dans la feuille "Synoptique des moyens" ajoutez ce code en dessous du code Private Sub Worksheet_Change(ByVal Target As Range).
Cela déroulera automatiquement la liste de validation pour faire votre choix

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Count > 1 Then Exit Sub
If Not Intersect(Target, Range("Choix_ville")) Is Nothing Then SendKeys "%{down}"
End Sub

Voici ce que j'ai compris mais j'ai du rater quelque chose car ça ne fonctionne pas.

image image image

Bonjour,

Voici ce que j'ai compris mais j'ai du rater quelque chose car ça ne fonctionne pas.

Qu'est ce qui ne fonctionne pas ?

En reprenant votre dernier fichier posté ici --> https://forum.excel-pratique.com/s/goto/1188006, cela fonctionne bien

exemple dans le fichier que j'ai : je tape B en A19 (A517 pour vous). Cela me donne cette vue avec la liste des villes qui ont un B

image

Bonjour,

Si je tape la première lettre d'une ville dans la case A517 cela ne m'affiche pas les résultats correspondants.

D'après mes screenshots est ce que j'ai correctement rentré les codes ?

Rechercher des sujets similaires à "masquer lignes colonnes fonction valeur menu deroulant"