IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Activer une feuille en arrière plan [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Employé
    Inscrit en
    Décembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 4
    Par défaut Activer une feuille en arrière plan
    Bonjour,

    J'aurais besoin d'un petit coup de main.
    Depuis une feuille d'accueil, j'ouvre un formulaire de saisie (via macro) et qui va écrire sur une autre feuille, donc c'est bien.
    Mais quand je lance un autre formulaire (modif et supression), la feuille s'affiche ce que je ne veux pas. Je veux rester sur la feuille d'accueil.
    Bon, cela est dû à Sheets().Activate.
    J'ai donc Googlé mon problème et testé des "contournements" sans résultat, ou plutôt c'est concrêtement le fait que je ne maitrise pas grand chose, du coup je modifie à taton en essayant de comprendre.

    Chou blanc pour l'instant.

    Dans mon Userform3 j'ai ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
    Sheets("Liste").Activate
    Ligne = Range("A" & Rows.Count).End(xlUp).Row
    ComboBox1.RowSource = "B2:B" & Ligne
    End Sub
    Liste est la feuille où se trouve mon tableau.
    La ComboBox1 lit la colonne B, et en fonction du choix affiche les colonnes A et C dans 2 textbox. Ensuite via cet userform soit je modifie une donnée ou j'efface la ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Private Sub ComboBox1_Change()
    ligne1 = [A2].Offset(ComboBox1.ListIndex, 0).Row
    Me.TextBox1.Text = Cells(ligne1, 1)
    Me.TextBox2.Text = Cells(ligne1, 3)
    Label3.Caption = ComboBox1.ListIndex + 1
    Label4.Caption = ComboBox1.ListCount
    Range("A2").Offset(ComboBox1.ListIndex, 0).Select
    End Sub
    J'ai bien sûr essayé de mettre des Liste!A2 et autre pour préciser la feuille où prendre les infos, mais soit ça marche pas soit cela affiche la feuille Liste.
    Seule la feuille Accueil doit rester affichée.

    Des idées ?

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ta feuille est affichée, parce que c'est ce que tu as demandé à Excel de faire en premier lieu lors de l'initialisation de ton Userform

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Liste").Activate
    tu l'affiches pour ensuite travailler sur ses objets (Range etc...) sans avoir besoin de nommer la feuille
    alors c'est très simple à mettre en place

    1) supprime cette vilaine ligne
    2) chaque fois dans ton code que tu fais référence à une zone (1 ou plusieurs cellules) de ta feuille, il faut préfixer le range avec le nom de la feuille
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Thisworkbook.Worksheets("MaFeuille").Range("A1")
    ainsi, ta feuille n'est pas affichée, et tu travailles dedans en indiquant à VBA le chemin complet de ta plage de cellules.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Employé
    Inscrit en
    Décembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 4
    Par défaut
    Merci !

    Je ne suis plus très loin de mon but.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub UserForm_Initialize()
    Sheets("Liste").Activate
    Ligne = Range("A" & Rows.Count).End(xlUp).Row
    ComboBox1.RowSource = "B2:B" & Ligne
    End Sub
    Devient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub UserForm_Initialize()
    Ligne = ThisWorkbook.Worksheets("Liste").Range("A" & Rows.Count).End(xlUp).Row
    ComboBox1.RowSource = "Liste!B2:B" & Ligne
    End Sub
    J'ai bien le contenu colonne B dans mon userform depuis la feuille accueil.
    Ca roule.

    Mais comment placer cette ligne référente ci dessous pour avoir l'affichage dans les 2 TextBox ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub ComboBox1_Change()
    ligne1 = [A2].Offset(ComboBox1.ListIndex, 0).Row
    devient :
    ligne1 = ThisWorkbook.Worksheets("Liste").Range("A2").Offset(ComboBox1.ListIndex, 0).Row
    Me.TextBox1.Text = Cells(ligne1, 1)
    Me.TextBox2.Text = Cells(ligne1, 3)
    Label3.Caption = ComboBox1.ListIndex + 1
    Label4.Caption = ComboBox1.ListCount
    
    Range("A2").Offset(ComboBox1.ListIndex, 0).Select
    devient :
    ThisWorkbook.Worksheets("Liste").Range("A2").Offset(ComboBox1.ListIndex, 0).Select
    End Sub
    Si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ThisWorkbook.Worksheets("Liste").Range("A2").Offset(ComboBox1.ListIndex, 0).Select
    Dès que je selectionne un produit dans la combo j'ai un message d'erreur sur cette ligne : la méthode select de la classe Range à échoué
    Je n'ai pas bien sûr d'informations dans les textbox.
    J'ai loupé un truc?

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Alors deux choses :

    1) les Cells(x,y) doivent être traités comme les Range : on préfixe avec la feuille et (idéalement) le classeur
    2) tu ne peux pas Selectionner une cellule d'une feuille qui n'est pas affichée. Là je ne te suis pas, tu ne voulais pas que la feuille soit affichée, mais tu veux quand même changer la position du curseur, pourquoi ?

    Avant de .Select un Range, il faut .Activate la feuille qui le contient.
    tu ne peux pas avoir le beurre et l'argent du beurre

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Employé
    Inscrit en
    Décembre 2016
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Employé

    Informations forums :
    Inscription : Décembre 2016
    Messages : 4
    Par défaut
    Mince, effectivement.
    Je dois selectionner pour en modifier le contenu si besoin. Et effacer la ligne aussi si besoin.

    Merci pour les explications !

  6. #6
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Encore là, nul besoin d'activer des choses pour agir avec

    Voici comme tu conçois la chose, un bête exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub testPasBon()
    ThisWorkbook.Worksheets("Feuil1").Activate
    ThisWorkbook.Worksheets("Feuil1").Range("A1").Select
    Selection.Value = "MaValeur en A1"
    End Sub
    tu actives la feuille, tu sélectionnes la cellule, tu modifies la valeur de la cellule active.
    non seulement, ça ralentit l'exécution et la longueur du code, mais en plus tu es obligé de prévoir des mécanismes pour que ça soit transparent pour l'utilisateur

    dans ce second exemple, on active rien, on dit juste à Excel ce qu'il doit faire "là où on veut"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub testBon()
    ThisWorkbook.Worksheets("Feuil1").Range("A1").Value = "MaValeur en A1"
    End Sub

    les deux codes auront strictement le même résultat, mais y'en a un qui fait le tour de la France pour joindre Paris et Orléans, l'autre il prend direct l'autoroute et suit le chemin "à vol d'oiseaux"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Win32][D7] TMemo : afficher une image en arrière plan
    Par Benjamin GAGNEUX dans le forum Delphi
    Réponses: 34
    Dernier message: 12/02/2007, 17h47
  2. [VB6] Affichage d'une PictureBox en arrière plan d'une appli
    Par jerzy59 dans le forum VB 6 et antérieur
    Réponses: 33
    Dernier message: 01/06/2006, 16h32
  3. [VBA-E]Exécution d'une macro en arrière-plan
    Par Mirx1 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/04/2006, 23h13
  4. Dessiner une image en arrière plan d'1 MDI Main Frame
    Par Yacine95000 dans le forum MFC
    Réponses: 3
    Dernier message: 14/06/2004, 10h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo