Aide en VBA

Résolu
Bonjour à tous,

Absolument débutant en VBA, je viens de monter un petit fichier excel avec pas mal de macros qui ont pour principal but de cacher et / ou afficher des colonnes.

Tout se passe relativement bien, sauf pour une action bien particulière.

N'ayant que très peu de notions en VBA, et préférant être 'propre' pour que vous me compreniez bien, je vais tenter d'exposer le problème en français 'avant' de passer au code :

J'ai 1 checkbox sur une feuille de calcul nommée 'Base', ce checkbox est lié à une cellule, de manière à récupérer la valeur true ou false.

Ici, lorsque je clique dessus, il faut :

-> Définir des colones 'clés' qui se trouvent sur une feuille de calcul nommée 'Calculs'.
-> Vérifier si ces colones ne sont pas masquées dans la feuille de calcul 'Calculs'.
-> Dans l'hypothèse ou elles ne le sont pas j'affiche les 3 colones qui suivent.

Si je prends un exemple concret :

Je clique sur le checkbox :

-> Mes colones clés sont H:I,T:U,AD:AE,BB:BC,BN:BO,BZ:CA,CL:CM,CX:CY,DJ:DK,DV:DW,EH:EI dans ma feuille 'Calculs'
-> Si les Colones AD:AE ne sont pas masquées dans ma feuille 'Calculs'
-> J'affiche les 3 colones suivantes (qui suivent AD:AE, soit AF:AH)

J'arrive à peine à poser le problème en Français, si quelqu'un peut m'aider svp.
--

J'aime pas les signatures :p

10 réponses

  1. Contributeur
    Bonjour,
    Un début d'explication ?
       'Test si les 2 colonnes sont visibles
        Afficher = Not (Columns("AD").Hidden And Columns("AE").Hidden )
        'Si Afficher = True c'est que les 2 colonnes sont visibles.
        If Afficher Then 'Affiche ces 3 colonnes.
            Columns("AF:AH").Hidden = False
        End If


    A+
    1. Bonjour et merci pour cette réponse.

      Concernant ta proposition, est ce qu'il n'y a pas moyen de définir les colonnes 'H:I,T:U,AD:AE,BB:BC,BN:BO,BZ:CA,CL:CM,CX:CY,DJ:DK,DV:DW,EH:EI' en tant que 'array' ?

      Exemple (je ne sais pas comment ça se traduit en VBA mais je vais tenter d'être clair) :

      ' On définie les colonnes clés

      colonnes_cles = array(H:I,T:U,AD:AE,BB:BC,BN:BO,BZ:CA,CL:CM,CX:CY,DJ:DK,DV:DW,EH:EI)

      'Test si des colonnes_cles sont visibles

      Afficher = Not (Columns(colonnes_cles).Hidden)

      'Pour chaque colonne clé ouverte

      For each colonnes_cles As Afficher

      'Si Afficher = True c'est que des colonnes sont visibles.

      If Afficher = True Then

      'Affiche les 3 colonnes suivantes de chacune des colonnes clés.

      Columns(colonnes_cles+3).Hidden = False

      End If

      Alors là de suite, vous allez certainement me dire que ça ressemble à rien, mais je tente de m'appuyer sur les notions de php que j'ai pour être le plus explicite.

      Si tu peux tenter de 'continuer' de m'aider :/

      Merci d'avance.
      1. Contributeur
        deja ça,ca ne va pas
        Afficher = Not (Columns(colonnes_cles).Hidden)
        le test ne peut être fait que sur une seule colonne à la fois
        Ce que je ne sais pas...
        Comment les colonnes sont cachée ? et pour quel raison ?
        Faut-il rechercher les 1ère colonne cachées dans la liste et les afficher ?

        Tu dit
        Si tu pouvais mettre un exemple de ton classeur sur Cjoint.com ce serrais plus façile.
        Et pas oublier de mettre le lien dans un poste suivant.
        1. En fait j'ai deux feuilles excel dans le même classeur.

          Une page nommée "Base", sur laquelle figure plusieurs input à cocher :

          - Tout d'abord 12 inputs à cocher qui représentent les marques de produits, il en existe 12, l'utilisateur coche les marques qui l'intéressent.
          - Ensuite un input à cocher 'Prix d'achat', pour en fonction de la marque afficher le prix d'achat.
          - Puis un input à cocher 'marge', pour en fonction de la marque afficher la marge.
          - Puis un petit bouton 'Valider' qui envoie vers la page nommée :

          Calculs :

          Sur cette page, figure les résultats, et tout est par défaut masqué. Exemple, on a sélectionné la marque 1, puis cliqué sur 'Prix d'achat', sur la page calculs nous aurons donc les deux colonnes de la marque 1 (une avec 'prix', l'autre avec produit), plus à leurs droites la colonne prix d'achat.

          Pourquoi suis-je dans la panade ? Tout simplement car pour l'affichage des marques c'est ok, par défaut, elles sont toutes masquées, lorsqu'une est cliquée, j'ai cette fonction :

          Sub go_marque()
          '
          ' go_marque Macro
          ' Action des colonnes 'marque'.
          '

          '

          Application.ScreenUpdating = False

          If Sheets("Base").Range("F7").Select Then
          valeur = Sheets("Base").Range("F7").Value
          If valeur = True Then
          Application.Run "affiche_marque1"
          Else
          Application.Run "cache_marque1"
          End If
          End If

          If Sheets("Base").Range("F8").Select Then
          valeur = Sheets("Base").Range("F8").Value
          If valeur = True Then
          Application.Run "affiche_marque2"
          Else
          Application.Run "cache_marque2"
          End If
          End If

          ....

          Puis les macros qui affichent ou cachent sont de ce type :

          Sub affiche_marque1()
          '
          ' affiche_marque1 Macro
          ' Affiche les colonnes 'Marque1'.
          '

          '
          Sheets("Calculs").Visible = True
          Sheets("Calculs").Select
          Range("AF:AG").Select
          Selection.EntireColumn.Hidden = True
          Sheets("Calculs").Visible = True
          Sheets("Base").Select
          End Sub

          J'ai donc, 12 fonctions (12 marques) comme celle-ci *2 (une qui affiche, ou l'autre qui cache) + la fonction go_marque(). Ici tout est parfait, ça fonctionne (même si je reste persuadé qu'il existe un moyen BEAUCOUP plus simple, genre utiliser 2 fonctions et non pas 24, mais bref).

          Là ou le bas blesse, c'est lorsque je clique sur 'prix d'achat', ici, j'affiche en fait les 12 colonnes prix d'achat. Or, si une marque n'a pas été sélectionnée, je ne veux pas voir son prix d'achat apparaître (normal).

          Mon algo n'est peut-être pas bon, enfin, toujours est il que je suis paumé :/

          Merci encore pour vos réponses.
          1. Contributeur
            J'ai à peu près compris ce que tu veux faire, si tu peu mettre un exemple de ton classeur sur Cjoint.com et mettre le lien dans un poste suivant ce serai plus façile pour finaliser.
            1. Bonjour et merci lermite 22,

              Tu trouveras ci-joint le lien pour télécharger le document 'vierge' http://www.geekzone-clan.org/files/tmp/test.xls.

              Merci beaucoup pour ton aide.

              Thomas
            2. Contributeur
              @MaToJe ne m'y retrouve pas dans ton geekzone, met le classeur sur Cjoint.Com j'y suis plus habitué.
              Et ce n'est pas un classeur "Vierge" que je doit avoir, il doit y avoir une partie de donnée (même qui ne veulent rien dir) et une partie résultat pour expliquer ce que tu souhaite avoir.
          2. Salut,

            http://www.geekzone-clan.org/files/tmp/test.xls sans le point à la fin :/

            www.geekzone-clan.org/files/tmp/test.xls

            Pour ce qui est du classeur, il est 'sans données' mais tu comprendras très vite, j'ai bien laissé les colonnes pour que tu comprennes.

            Qu'en fait à droite de la marque 1 s'affiche le prix d'achat, le prix de vente 1, la marge, le prix de vente 2, puis rebelotte pour la marque 2 etc ...

            Tiens moi au courant, je ne sais toujours pas comment m'y prendre.

            Merci encore,

            Thomas
            1. Contributeur
              Bon, cette fois ci je l'ai eu -:) sans le point ça va mieux, j'y suis pourtant habitué mais...
              Concernant ton classeur, tu me passe la feuille de saisie que j'avais bien compris avec tes explications dans ton 1er poste.
              Ce qu'il faut c'est la base de donnée pour savoir où aller chercher les données. et il devrait y avoir une ou deux lignes de données dedans.
              Je n'ai pas encore de boule de cristal (je le regrette d'ailleur, ça pourrait bien me servir)

              1. Re et encore merci pour ton aide,

                Concernant les données, on s'en fiche compte tenu du fait que les actions ne se font que sur les colonnes, j'aurai pu ne rien mettre. J'ai fait exprès en fait de le vider pour justement que tu n'en ai pas mal au crâne :)

                Quand on clique sur marque 1, ça affiche les deux colonnes de la marque 1 dans la page calculs, si on revient et qu'on reclique dessus, ça l'enlève.

                Maintenant si tu cliques sur marque 1, puis sur prix d'achat, sur l'autre feuille tu vas avoir deux colonnes H:I qui représentent les deux colonnes de la marque1, à droite la colonne K qui représente la colonne 'prix d'achat' de la marque 1.

                Cependant, dans cet exemple, tu as bien tes deux colonnes H:I de la marque 1, la colonne K qui représente les 'futurs' prix d'achat de la marque 1 en fonction des produits, puis tu as les onze autres colonnes achats des onze autres marques qui n'ont rien à y faire.

                Idem pour la marque 2 si tu le fais pour la marque 2, idem pour les marges etc ...

                C'est là, mon problème :/
                1. Contributeur
                  Je n'avais pas vu qu'il y avait une feuille cachée (dans IE je n'ai pas les menus)
                  Je pense que c'est ce que tu voulais, t'étonne pas, tes 40 modules ont disparus, j'ai "un tout petit peu" simplifié.
                  https://www.cjoint.com/?bjiEAi8HFw
                  Tu dit.
                  1. Re Lermite,

                    Ici, sincèrement merci. C'est magnifique, le code est on ne peut plus optimisé, et pire, je le comprends.

                    Sincèrement merci, super, tout fonctionne :)

                    Thomas