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 Sub

Cordialement

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)

16vba.xlsx (21.66 Ko)

Bonjour,

Une proposition simple

@+

11vba.xlsm (32.64 Ko)

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 ! ce qui ne présente en soi pas d'intérêt, sauf pour la voir lorsqu'elle est finie... et que donc on a fini de travailler).

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 Sub

Cordialement

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. Apprendre VBA est dans tous les cas indispensable pour pouvoir programmer avec. Cela ne se fait pas en un jour et tu accumuleras des connaissances au fil de la pratique...

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 ! Un programme ça s'écrit à partir d'une analyse préalable à la réalisation...

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 ! Et afficher n'a aucun intérêt, en émettre l'idée n'est qu'un mauvais réflexe acquis, il suffit d'oublier d'afficher et de programmer ce qui est à 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, l'objectif transitoire n'est que de déterminer de quelle feuille il s'agit lorsque l'on a besoin d'intervenir. On peut le faire de diverses manière, mais pourquoi pas une fonction qu'il suffirait d'appeler pour qu'elle renvoie la feuille concernée...

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 Function

Il 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... Les noms de feuille ne sont pas sensibles à la casse mais si tu as à faire des comparaisons sur les noms, VBA y est sensible par défaut, il faut le savoir.

Cette fonction te fournira donc la feuille à la demande. Exemple :

Sub Demo()
    Dim FeuilDevis As Worksheet
    Set FeuilDevis = WsDvis()
    FeuilDevis.Activate
End Sub

Cette 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 ! Un devis étant toujours assez ressemblant à un autre devis, cela ne justifie qu'une procédure principale d'établissement, les variations optionnelles pouvant être selon le cas intégrées ou déférées à procédures secondaires. En tout cas, il ne doit pas y avoir de répétition de code pour servir des éléments semblables...

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é.

Rechercher des sujets similaires à "vba"