VBA
Bonjour,
Je suis nouveau sur le site et je vous remercie d'avance pour votre bienveillance.
Je suis actuellement entrain de construire un fichier Excel utilisant plusieurs macros.
Cependant, je bloque sur l'une d'entre elles.
En fonction des réponses situées sur une fiche de besoin, le fichier créer un devis automatiquement.
Il existe actuellement 6 possibilités de devis. Chaque devis contient beaucoup d'infromations, j'ai réparti les 6 devis sur 6 feuilles.
Je souhaiterais connaitre la solution VBA pour afficher une des feuilles en fonction d'une condition.
Exemple : Si la somme A1;A15 est supérieur à B1, alors afficher Feuille 2
Merci d'avance pour vos réponses
Cordialement
Quentin
Bonjour,
et soyez bienvenu ici !
Pour commencer, vous pouvez lire le "tiret 6" du lien qui se trouve dans ma signature "quelques règles",
ensuite on verra ce que l'on peut faire
@ bientôt
LouReeD
Bonjour et bienvenu,
Avant toute chose : avec un fichier, c'est mieux...
Sinon, essai avec ce code :
Private Sub Worksheet_Change(ByVal Target As Range)
If WorksheetFunction.Sum(Sheets("feuil1").Range("A1:A15")) > Sheets("feuil1").Range("B1") Then
Sheets("Feuil2").Select
End If
End SubCordialement
Bonjour à tous.
Dans un premier temps je vous remercie de votre réactivité.
Merci également pour ce début de réponse, cependant je n'arrive pas à combiner plusieurs conditions.
Ci-joint, un fichier qui me sert de test et qui illustre ma demande
Cordialement
(Je ne sais pas si je suis très clair dans mes propos, ne surtout pas hesiter à me le dire, j'ai vraiment envie de comprendre la construction de cette macro)
Bonjour, Salut à tous !
Je souhaiterais connaitre la solution VBA pour afficher une des feuilles en fonction d'une condition.
Alors je me permettrai une remarque qui doit s'appliquer de façon la plus générale, quel que soit ton objectif ou la matière traitée (hormis le cas où l'objectif se limite à afficher une feuille !
La solution toujours la meilleure en VBA est d'opérer le moins possible directement sur Excel, on prend les données, on les travaille, on restitue le résultat, et de ne ne rien voir lorsqu'on opère sur une feuille, elle n'a jamais besoin d'être affichée pour que VBA l'utilise, et on peut même fort bien se servir d'une feuille masquée, sans jamais la démasquer...
C'est ainsi qu'on obtiendra les meilleurs résultats en efficacité et rapidité.
Cordialement.
Merci LORIS01
Une réponse simple mais efficace qui correspond à ce que je recherche
MFerrand,
Je comprends l'esprit que vous essayé de véhiculer, cependant pour un débutant VBA, c'est légèrement abstrait …
Avez-vous des tutos, cours ou autres à me conseiller ?
Re,
Salut à tous,
Voilà une autre proposition
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Range("G17")) Is Nothing Then
Dim nom As String
nom = Range("G17").Value
If nom = "" Then
Sheets("Normal").Select
Else
Sheets(nom).Select
If WorksheetFunction.Sum(Range("AJ13:AJ16")) < WorksheetFunction.Sum(Range("E5:AF9")) And Range("G17").Value = "PCH" Then
Sheets("PCH dep").Select
End If
If WorksheetFunction.Sum(Range("AJ13:AJ16")) < WorksheetFunction.Sum(Range("E5:AF9")) And Range("G17").Value = "APA" Then
Sheets("APA dep").Select
End If
End If
End If
End SubCordialement
Bonsoir,
MFerrand,
Je comprends l'esprit que vous essayé de véhiculer, cependant pour un débutant VBA, c'est légèrement abstrait …
Avez-vous des tutos, cours ou autres à me conseiller ?
Si tu comprends l'esprit, tu dois bien comprendre aussi qu'il ne s'agit pas simplement de connaissance à acquérir.
C'est une attitude globale, qu'il est certainement préférable d'adopter au départ pour progresser plus rapidement.
En premier, je dirais : ignorer l'enregistreur pour produire des macros !
Bannir toute commande Select ou équivalente, et écrire le plus simplement ce que l'on a à faire, passer les arguments des méthodes ou propriétés préférentiellement par position et n'utiliser que ceux dont on a besoin lorsqu'ils sont optionnels... Bref, en fait des choses que l'on est amené naturellement à faire si l'on n'a jamais pris d'habitude dictée par l'enregistreur !
Dans ce cadre, en matière de cours ou tuto, il est certain qu'il convient de privilégier la connaissance d'instructions que l'enregistreur ne pourra jamais écrire (il ne fait qu'enregistrer) et des éléments fournis par VBA qui demeurent hors de sa portée, sans doute particulièrement les tableaux dont l'utilisation accroît notablement les possibilités de réalisation.
Ce qui ne doit pas conduire à négliger la maîtrise d'Excel, c'est l'application sur laquelle (ou à partir de laquelle) on programme et VBA n'est en rien conçu pour pallier des carences dans l'utilisation d'Excel...
La question que tu poses est comment afficher une feuille selon des conditions !
Ce qui est clair c'est que si tu ne veux rien faire avec ta feuille, pourquoi l'afficher ! Si tu l'affiches pour faire quelque chose, l'important c'est ce qu'il y a faire !
Je t'accorde qu'il faut déterminer la feuille sur laquelle intervenir !
Encore que tu n'as pas fourni suffisamment d'éléments de ton projet pour qu'on puisse apprécier la nécessité de 6 feuilles distinctes comme modèles de devis... Il est peut-être tout à fait possible que l'on puisse opérer avec un seul en y prévoyant des éléments optionnels...
Mais supposons que la nécessité en soit établie,
Par exemple :
Function WsDvis() As Worksheet
Dim nF$, dep As Boolean
With Worksheets("Besoin")
nF = .Range("G17")
If nF = "" Then
nF = "Normal"
Else
dep = WorksheetFunction.Sum(.Range("E5:AF9")) > (.Range("AJ13") _
+ .Range("AJ15"))
nF = StrConv(nF, vbProperCase) & IIf(dep, " dep", "")
End If
End With
Set WsDvis = Worksheets(nF)
End FunctionIl y a une réserve car tu n'as fourni de conditions que pour déterminer une feuille parmi 5, laissant la 6e de côté...
Petite coquetterie, j'établis le nom de la feuille en respectant la casse...
Cette fonction te fournira donc la feuille à la demande. Exemple :
Sub Demo()
Dim FeuilDevis As Worksheet
Set FeuilDevis = WsDvis()
FeuilDevis.Activate
End SubCette proc. de démonstration utilise la fonction pour affecter la feuille à une variable et donc pouvoir l'utiliser ensuite. L'activation n'est là que pour la démonstration, à titre de vérification.
A la place, ta procédure d'établissement de devis poursuivra par l'utilisation de cette feuille pour y porter les mentions nécessaires (et sans l'activer, bien sûr, le code n'en sera que plus rapide !)
Je parlais de la procédure parce que je n'imagine pas qu'il faille une débauche de macros pour servir les devis !
En espérant que cela te fasse méditer.
Cordialement.
bonjour à tous
MFerrand, tu es la sagesse incarnée
VBA n'est en rien conçu pour pallier des carences dans l'utilisation d'Excel...
pour aller sur un onglet, on met des LIEN_HYPERTEXTE()
si tu as une condition pour aller sur un onglet ou un autre, c'est avec des SI(), tu peux tester le contenu d'une cellule et renvoyer vers un onglet donné.
pas besoin de VBA. Excel contient 99,99% de tes besoins.
note : virer absolument toutes ces cellules fusionnées !
mon avis : tu veux faire comme avec un papier et un crayon, y compris en utilisant 4 ou 5 colonnes comme sur un papier quadrillé.