Masquage d'option avec une référence

Bonjour à vous,

Je suis novice sur VBA et j'ai du mal pour un programme qui commence à me prendre la tête...

J'ai demandé de l'aide déjà il y a une semaine mais le programme ne fonctionne toujours pas bien. Je suis donc revenu sur mon programme que j'ai écris et je voudrais savoir si c'est possible de l'optimiser ?

Je suis entrain de faire un configurateur de voiture et je vous ai créer un exemple qui ressemble presque à l'original pour que vous compreniez mes problèmes.

Le fichier fonction de cette façon :

il y a une interface où l'on vient mettre les choix que l'on veut ( Quantité, masquer ou cacher le prix) des options et lorsque l'on appuie sur le bouton "GO" l'offre s'adapte directement aux choix que nous avons fait.

Il y a des options et des sous-options.

Quand un client ne sélectionne pas une option dans l'offre finale nous allons la masquer ou cacher le prix.

Mon programme de cacher les prix fonctionne bien, mais j'ai cependant un problème avec celui du masquage.

Pour masquer il faut mettre un "H" dans la colonne choice de l'interface.

- Dans la capture 1 et dans la 2 vous pouvez voir que je voulais masquer seulement la sous-option 1, mais je ne comprend pas pourquoi la sous-option 2 se masque aussi. Il faut savoir que dans le configurateur il y a par moment des descriptions sous les sous-options ou des lignes vides ou même rien ( une autre sous-option viens directement se mettre à la liste)

- Dans la capture 4, vous pouvez voir que l'option 2.10 ne se masque pas. J'ai tout défini mes variables et tableaux en variant et quand j'essaye de mettre en string plus rien ne fonctionne.. comment faire pour qu'il garde le .10 et pas le reconnaitre en .1?

Si vous arrivez juste à même m'aider pour quelques points cela serait très aimable et j'en serais très reconnaissant.

Meilleures salutations,

Maurer

capture 1 masquage bug capture 2 masquage bug capture 3 masquage bandeau capture 4 bug ref numeric

Si vous avez des questions supplémentaires sur le fonctionnement du fichier n'hésitez surtout pas à m'écrire!

Rebonjour quelqu’un a pu regarder ?

Bonjour,

Il faut éviter de te répondre toi même car lors qu'un sujet semble déjà entamé avec plusieurs réponses, les "chasseurs de fils oubliés" (avec zéro réponses) ne regardent plus, ils estiment que le sujet à déjà été traité...

Heu... J'ai élagué !

Option Explicit
Option Base 1
Sub Main()
Dim i%, sHiding$, sOffer$, sErase$, ref$, dec%, Arr()

    Application.ScreenUpdating = False
    sHiding = UCase(Interface.Range("xlHiding").Value)
    sErase = UCase(Interface.Range("xlErase").Value)

    Arr = Interface.Range("B34").CurrentRegion
    For i = LBound(Arr) To UBound(Arr)
       'Ici on réévalue la référence comme du Texte
       Arr(i, 1) = Interface.Cells(34 + dec, 2).Text
       dec = dec + 1  'décalage de ligne

      Arr(i, 1) = Replace(Arr(i, 1), ",", ".")
      Arr(i, 9) = UCase(CStr(Arr(i, 9)))
      If Arr(i, 9) Like sHiding Then
          ref = Arr(i, 1)
          Call Masquage(ref)
      End If
    Next i
End Sub

Sub Masquage(ByVal ref As String)
Dim ws As Worksheet, TArr()
Dim der_col%, der_lig%, lig_dep%, lig_fin%, h%, i%, dec%

For Each ws In ActiveWorkbook.Worksheets
   If Not ws.Name Like "*Interface*" Then
      der_lig = ws.Range("C" & Rows.Count).End(xlUp).Row
      der_col = ws.Cells(5, Columns.Count).End(xlToLeft).Column
      TArr = ws.Range("A1", Cells(der_lig, der_col).Address)

      For i = LBound(TArr) To UBound(TArr)
       'Ici on évalue la référence comme du Texte
          TArr(i, 1) = ws.Cells(1 + dec, 1).Text
          dec = dec + 1  'décalage de ligne
          TArr(i, 1) = Replace(TArr(i, 1), ",", ".")
      Next i

        For h = LBound(TArr) To UBound(TArr)
            If TArr(h, 1) Like ref Then
                lig_dep = h
            ElseIf Len(TArr(h, 1)) <= Len(ref) And TArr(h, 1) <> "" Then
                lig_fin = h - 1
            ElseIf Not TArr(h, 1) Like ref & "*" And TArr(h, 1) <> "" Then
                lig_fin = h - 1
            ElseIf h = UBound(TArr) Then
                lig_fin = h
            End If
            If lig_dep > 0 And lig_fin > 0 And lig_fin > lig_dep Then
                ws.Range("A" & lig_dep, "A" & lig_fin).EntireRow.Hidden = True
                Exit For
            End If
        Next h
    End If
Next ws
End Sub

A+

Merci beaucoup

Rechercher des sujets similaires à "masquage option reference"