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 :

Sélection de page via variable TextBox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut Sélection de page via variable TextBox
    Bonjour à tous,

    Premier Post, je vous prie de m'excuser par avance si la forme ou le fond de ma demande sortait des clous de la charte de ce forum!

    Mon projet:

    Je souhaite réaliser un document d'évaluation des risques sur excel, alimenté par formulaires VBA.
    Actuellement je dispose d'une trentaine de pages à mon fichier excel (1 par unité de travail).
    Mon formulaire permet de créer de nouvelles situations dangereuses qui "s'ajoutent" aux existantes pour chaque unité de travail. Chaque situation bénéficie d'un code unique d'identification (type "Unité de Travail - Risque - N°" )

    Ce document devant évoluer fréquemment (réévaluation des risques annuelle, mise en place de mesures correctives,...) Je cherche à "appeler" la situation dangereuse concernée (ListBox fonctionnelle OK), "remplir" les champs déjà saisis et issus de la feuille concernée à la ligne concernée (textbox remplies correctement OK), modifier les paramètres souhaités (pas de soucis) et "renvoyer" ces informations à la bonne page, à la bonne ligne sans créer de doublons (pas OK)!

    Mon problème:

    voilà ou je sèche: mes modifications ne sont pas incrémentées à mes situations dangereuses modifiées! selon mes tests, parfois la situation modifiée n'apparaît pas à la bonne page!

    Ma Question:

    Quelle fonction me permettrai d'incrémenter des modifications à une ligne variable dans une page variable compte tenu que:
    - le nom de la page figure dans mon formulaire en TextBox1
    - le nom de la situation à modifier figure dans mon formulaire en ListBox1

    Merci par avance pour vos pistes de réflexion!

    PS; je travaille sur un extrait pour servir de bac à sable si besoin! mais n'hésitez pas à me soumettre des suggestions dans l'intervalle!

  2. #2
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Bonjour et bienvenue au forum !

    Si tu as le nom de la page, il ne faut pas oublier de dire à Excel sur quelle feuille tu travailles. Par exemple, si tu veux changer la valeur de la cellule A1 de la feuille ma feuille en toto, tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("ma feuille").Range("A1").Value = "toto"
    Pour retrouver la ligne de ton risque à appelation unique, tu peux utiliser Application.Match. En supposant que les noms de risques (sans doublons) sont en colonne A :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim i As Long
    i = Application.Match(nom_du_risque, Sheets("ma feuille").Range("A:A"), 0)
    i renverra la ligne où se situe le nom de risque.
    Cela te permet-il d'avancer ?

    PS : tu es sur le forum Excel, ici, et non pas VBA. La prochaine fois, pose ta question sur le bon forum, ce sera plus efficace

  3. #3
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Avant tout, merci de ta réponse rapide et détaillée!

    Je vais tester la combinaison de tes 2 propositions.

    Comment dois-je libeller "ma feuille"?

    le nom de la feuille de destination est incrémentée en textbox1, comment le traduire pour l'inclure dans tes requêtes?

    merci encore!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
     
    Private Sub UserForm_Initialize()
    For i = 1 To Sheets.Count
        Me.ComboBox1.AddItem Sheets(i).Name
    Next
    End Sub
     
     
    Private Sub Valider_Click()
    With Range(ComboBox1.Text & "!a1").CurrentRegion
        L = .Rows.Count + 1
        .Cells(L, "A") = 10
    End With
    End Sub
    il faut utiliser une ComboBox1!
    Dernière modification par Invité ; 16/06/2017 à 14h41.

  5. #5
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    @ dysorthographie

    ta formule me permet bien d'alimenter automatiquement une ComboBox par les noms de chaque pages du fichier Excel?

    j'ai contourné cette problématique par RowSource ... mais pas vraiment stable!

    je teste ton option,!

    Pour la seconde partie de ton code, à quoi font référence "a1" et "A"?

  6. #6
    Membre Expert
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Par défaut
    Je suis pas sûre qu'on ait compris la question de la même manière

    Ici, tu trouveras comment récupérer le texte d'une TextBox. Il suffit donc de récupérer le texte inscrit dans ta TextBox (qui est le no mde la feuille), puis de remplacer "ma feuille" par ce texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(TextBox1.Text).Range("A1").Value = "toto"
    Ici, tu trouveras comment récupérer le texte sélectionné par la ListBox. De la même manière, tu pourras ainsi récupérer le risque sélectionné et chercher la ligne associée dans la bonne feuille.

  7. #7
    Invité
    Invité(e)
    Par défaut
    Nom : TesRd2.gif
Affichages : 203
Taille : 117,5 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    Private Sub ComboBox1_Change()
    Me.ComboBox2.Clear
    Sheets(ComboBox1.Text).Select
    l = Range(ComboBox1.Text & "!a1").CurrentRegion.Rows.Count
    Me.ComboBox2.List = Range(Range(ComboBox1.Text & "!a2"), Range(ComboBox1.Text & "!a" & l)).Value
    Me.ComboBox2.ListIndex = 0
    End Sub
     
     
    Private Sub ComboBox2_Change()
    If Me.ComboBox2.ListIndex > -1 Then Me.TextBox1 = Range(ComboBox1.Text & "!b2").Offset(Me.ComboBox2.ListIndex)
    End Sub
     
     
    Private Sub UserForm_Initialize()
    For i = 1 To Sheets.Count
        Me.ComboBox1.AddItem Sheets(i).Name
    Next
    Me.ComboBox1.ListIndex = 0
    End Sub
     
     
    Private Sub Valider_Click()
    With Range(ComboBox1.Text & "!a1").CurrentRegion
        l = .Rows.Count + 1
        .Cells(l, "A") = 10
    End With
    End Sub
    Fichiers attachés Fichiers attachés

  8. #8
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Je suis un peu perdu!

    Pour alimenter mon formulaire depuis une page existante:
    Ce que me propose Riaolle ne me pose pas de soucis, j'y parviens d'une autre manière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    Private Sub ComboBox1_Click()
       Set f = Sheets(Me.TextBox1.Value)
       ligne = Me.ComboBox1.ListIndex + 9
        Me.TextBox4 = f.Cells(ligne, 4)
        Me.TextBox5 = f.Cells(ligne, 5)
        Me.TextBox6 = f.Cells(ligne, 6)
        Me.TextBox7 = f.Cells(ligne, 7)
        Me.TextBox8 = f.Cells(ligne, 8)
        Me.TextBox9 = f.Cells(ligne, 9)
        Me.TextBox10 = f.Cells(ligne, 10)
        Me.TextBox11 = f.Cells(ligne, 11)
        Me.TextBox12 = f.Cells(ligne, 12)
        Me.TextBox14 = f.Cells(ligne, 14)
        Me.TextBox15 = f.Cells(ligne, 15)
        Me.TextBox16 = f.Cells(ligne, 16)
        Me.TextBox17 = f.Cells(ligne, 17)
     End Sub
    En revanche, ça ne fonctionne pas à l'export des données! Ci dessous ma tentative:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Private Sub CModifier_Click()
    With Worksheets(Me.TextBox1.Value)
       ligne = Me.ComboBox1.ListIndex + 9
                .Cells(ligne, 3).Value = Mid(TextBox6, 1, 3)
                .Cells(ligne, 4).Value = TextBox4
                .Cells(ligne, 5).Value = TextBox5
                .Cells(ligne, 6).Value = TextBox6
                .Cells(ligne, 7).Value = TextBox7
                .Cells(ligne, 8).Value = TextBox8
                .Cells(ligne, 9).Value = TextBox9
                .Cells(ligne, 10).Value = TextBox10
                .Cells(ligne, 11).Value = TextBox11
                .Cells(ligne, 12).Value = TextBox12
                .Cells(ligne, 14).Value = TextBox14
                .Cells(ligne, 15).Value = TextBox15
                .Cells(ligne, 16).Value = TextBox16
                .Cells(ligne, 17).Value = TextBox17
    End With
    je pense que mon écriture est fausse, mais je ne parviens pas à adapter ma trame avec ta proposition!

    Quand à la solution de Dysorthographie, je vois l'intérêt de tes macros (beaucoup plus fluide en écriture!), mais il me manque la possibilité de modifier et enregistrer les modification des cellules liées à l'identité de ma Combobox1!

    Quelle serait la "chute" ?

  9. #9
    Invité
    Invité(e)
    Par défaut
    Tu rajoute un bouton valider sur le formulaire!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Valider_Click()
    Range(ComboBox1.Text & "!b2").Offset(Me.ComboBox2.ListIndex)=Me.TextBox1
     
    End Sub

  10. #10
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Oui, je venais de m'apercevoir qu'il était absent!

    J'ai également remplacé la ligne de commande et ça fonctionne parfaitement.

    A adapter!

    1 ère différence, je n'ai pas 2 Combobox mais 18 boutons (1 par Unité de Travail) + 1 Combobox (qui filtre les numéros de situations PAR lieu de travail)

    Nom : secteurs.jpg
Affichages : 184
Taille : 1,13 Mo


    cette solution pour donner une interface plus conviviale que des List, Combo et TExt boxes à la pelle d'entrée de jeu!

    En choisissant un secteur, le nom de ce secteur s'affiche en Textbox 1 et conditionne l'alimentation de la liste ma Combobox.

    Nom : risques.jpg
Affichages : 212
Taille : 752,7 Ko

    lesTextboxes s'alimentent convenablement, il ne me reste plus quà exporter (après ajouts ou modifs) les données sur le fichier de base AUX BONNES PAGE et LIGNE (induits par le titre de la combobox)

    Nom : page.jpg
Affichages : 210
Taille : 812,8 Ko

    je dois admettre que (totalement néophyte et autodidacte) je ne suis pas à l'aise avec cette formulation:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Me.ComboBox2.ListIndex > -1 Then Me.TextBox1 = Range(ComboBox1.Text & "!b2").Offset(Me.ComboBox2.ListIndex)
    Bref, je teste, si vous avez des conseils je prends toujours!

    en cas de panne je reviens!

    en cas de succès je reviens vous en informer!

  11. #11
    Membre éclairé
    Homme Profil pro
    autre
    Inscrit en
    Juin 2017
    Messages
    261
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : autre

    Informations forums :
    Inscription : Juin 2017
    Messages : 261
    Par défaut
    Re bonjour,

    je suis revenu sur ma problématique à plusieurs reprises, j'ai enfin trouvé où le bas blessait!

    ma solution initiale, et celles proposées par vous 2 étaient bien fonctionnelles, mais se référaient à une cellule contenant une formule de concaténation! Donc la recherche de numéro d'identification ne pouvait aboutir!

    Erreur de débutant qui aurait été détectée à temps si j'avais posté mon fichier original ...

    Merci de votre aide!

Discussions similaires

  1. [Outils] [PHPeclipse] : Affichage des pages via le browser
    Par matsri2003 dans le forum Eclipse PHP
    Réponses: 5
    Dernier message: 01/12/2005, 14h40
  2. Redirection vers un page avec variable en parametre
    Par gwendy dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 17/10/2005, 18h49
  3. Recuperer Variable Textbox
    Par Didier57 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 30/08/2005, 14h51
  4. [iText] page events & variables globales
    Par fafe69 dans le forum Documents
    Réponses: 2
    Dernier message: 11/08/2005, 11h54
  5. [struts] passer un paramètre de page via un findForward
    Par Boosters dans le forum Struts 1
    Réponses: 4
    Dernier message: 08/03/2004, 17h35

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