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
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
10 réponses
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
7 janv. 2009 à 11:02
7 janv. 2009 à 11:02
Bonjour,
Un début d'explication ?
A+
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+
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
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.
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.
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
7 janv. 2009 à 11:29
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.
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.
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
7 janv. 2009 à 17:45
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.
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
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
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
lermite222
Messages postés
8724
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
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.
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.
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
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
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
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
8 janv. 2009 à 16:27
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)
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)
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
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 :/
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 :/
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
9 janv. 2009 à 07:45
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.
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.
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
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
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