Aide en VBA

Résolu/Fermé
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012 - 7 janv. 2009 à 08:17
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012 - 9 janv. 2009 à 08:59
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.

10 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 11:02
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
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
7 janv. 2009 à 11:18
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 11:29
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
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
7 janv. 2009 à 14:20
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
7 janv. 2009 à 17:45
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
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
8 janv. 2009 à 09:26
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190 > MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
8 janv. 2009 à 16:10
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
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
8 janv. 2009 à 16:15
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
8 janv. 2009 à 16:27
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
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
8 janv. 2009 à 16:45
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
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
9 janv. 2009 à 07:45
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
MaTo Messages postés 31 Date d'inscription mardi 20 mai 2003 Statut Membre Dernière intervention 16 octobre 2012
9 janv. 2009 à 08:59
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