Aide en VBA

Résolu
MaTo Messages postés 32 Statut Membre -  
MaTo Messages postés 32 Statut Membre -
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. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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+
    0
  2. MaTo Messages postés 32 Statut Membre
     
    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.
    0
  3. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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.
    0
  4. MaTo Messages postés 32 Statut Membre
     
    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.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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.
    0
    1. MaTo Messages postés 32 Statut Membre
       
      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
      0
      1. lermite222 Messages postés 9042 Statut Contributeur 1 199 > MaTo Messages postés 32 Statut Membre
         
        Je 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.
        0
  7. MaTo Messages postés 32 Statut Membre
     
    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
    0
  8. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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)

    0
  9. MaTo Messages postés 32 Statut Membre
     
    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 :/
    0
  10. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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.
    0
  11. MaTo Messages postés 32 Statut Membre
     
    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
    0