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 :

l 'expression utilisée pour déterminer le nom [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut l 'expression utilisée pour déterminer le nom
    bonjour a tous mon bouton fonctionne tres bien
    mais j aurais une petite modif a lui apporter
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    Private Sub F7_Click()
    nombouton = "F7"
    nomcase = "F8"
    If Controls(nombouton).Caption = "" Then
    Controls(nombouton).Caption = "CJ"
    Controls(nombouton).BackColor = 33023
    Controls(nomcase).Value = "12"
     
    ElseIf Controls(nombouton).Caption = "CJ" Then Controls(nombouton).Caption = "PCJ"
    Controls(nombouton).BackColor = 65535
     
     
    ElseIf Controls(nombouton).Caption = "PCJ" Then Controls(nombouton).Caption = "CN"
    Controls(nombouton).BackColor = 16776960
     
     
    ElseIf Controls(nombouton).Caption = "CN" Then Controls(nombouton).Caption = "PCN"
    Controls(nombouton).BackColor = 49152
     
     
    ElseIf Controls(nombouton).Caption = "PCN" Then Controls(nombouton).Caption = "SAJ"
    Controls(nombouton).BackColor = 8454143
    Controls(nomcase).Value = "11"
     
    ElseIf Controls(nombouton).Caption = "SAJ" Then Controls(nombouton).Caption = "SAN"
    Controls(nombouton).BackColor = 12583104
    Controls(nomcase).Value = "12"
     
    ElseIf Controls(nombouton).Caption = "SAN" Then Controls(nombouton).Caption = "CA"
    Controls(nombouton).BackColor = 16777215
    Controls(nomcase).Value = "5.83"
     
     
    ElseIf Controls(nombouton).Caption = "CA" Then Controls(nombouton).Caption = ""
     Controls(nombouton).BackColor = 16777215
    Controls(nomcase).Value = ""
     
     
    End If
    End Sub

    je voudrais remplacer
    par un truc du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    nombouton=control name
    ou quelque chose comme ca mais je ne trouve pas du tout si quelqu un a la solution pourais t-il me la donner

    merci a ucfoutu,mercatog, pour m avoir aider dans mon post precedent
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut patricktoulon et le forum
    Comprends pas ta question. Que cherches-tu à faire ?
    Sinon, tu peux essayer "Application.called", mais un explication du but à atteinde permettrait de mieux orienter les réponses.

    Je n'aime pas les suite de Else If...
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    nombouton=application.called
    nomcase = "F8"
    select case Controls(nombouton).Caption
         case ""
              Controls(nombouton).Caption = "CJ"
              Controls(nombouton).BackColor = 33023
              Controls(nomcase).Value = "12"
     
         Case "CJ" 
              Controls(nombouton).Caption = "PCJ"
              Controls(nombouton).BackColor = 65535
     
     
         Case "PCJ" 
              Controls(nombouton).Caption = "CN"
              Controls(nombouton).BackColor = 16776960
     
     
         Case "CN" 
              Controls(nombouton).Caption = "PCN"
              Controls(nombouton).BackColor = 49152
     
     
         Case "PCN" 
              Controls(nombouton).Caption = "SAJ"
              Controls(nombouton).BackColor = 8454143
              Controls(nomcase).Value = "11"
     
         Case "SAJ"
              Controls(nombouton).Caption = "SAN"
              Controls(nombouton).BackColor = 12583104
              Controls(nomcase).Value = "12"
     
         Case "SAN"
              Controls(nombouton).Caption = "CA"
              Controls(nombouton).BackColor = 16777215
              Controls(nomcase).Value = "5.83"
     
         Case "CA" 
              Controls(nombouton).Caption = ""
               Controls(nombouton).BackColor = 16777215
              Controls(nomcase).Value = ""
     
    End select
    End Sub
    Attention : le code n'a pas été testé
    Ça me semble plus lisible que la suite de Else If proposée
    A+

  3. #3
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Bonjour, Patricktoulon,

    Il y aurait énormément à dire sur un énorme lot d'aspects de ton code ( tes if... à ne pas remplacer par des select case... etc etc..., mais, avant tout, cette histoire de nom du contrôle...)

    Je devine (ayant lu ton autre discussion) un peu pourquoi, mais attends que tu sois très précis et que ton idée soit parfaitement arrêtée (on ne va pas recommencer à danser une valse hésitation, si tu le veux bien...)

    Point par point, donc :
    Point 1 (le premier et le seul que nous traiterons ici) :

    Il n'est pas astucieux de "promener" le nom pour, de surcroît, le traiter ensuite par la collection Controls pour se référer à un contrôle ! On connaît le contrôle (c'est le contrôle actif puisqu'on est dans son évènement click et cela est amplement suffisant !

    Un exercice (réduit à son extrême) pour toi (qui devrait t'ouvrir un horizon) :
    Un userform, un bouton de commande Command1 et ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit
    Private Sub CommandButton1_Click()
      agir_sur ActiveControl, "coucou"
    End Sub
     
     
    Private Sub agir_sur(ctrl As Control, C As String)
      ctrl.Caption = C
    End Sub
    Lance, clique ===>> tu devrais normalement comprendre et ... t'en servir !

    Ce 1er test étant terminé et compris, passe à ce second test (nouveau projet) :

    Ce test va un tout petit peu plus loin dans l'exploration de ce que sait faire VB

    2 boutons de commandse appelés F7 et F8 et ce code
    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
    Option Explicit
    Private Sub F7_Click()
      'on ne passe pas de chaîne "F7", mais le contrôle F7 (qui n'est autre que le contrôle actif !
      'on ne passe pas la chaîne "F8", mais directement le contrôle F8
      agir_sur ActiveControl, "coucou", F8
    End Sub
    Private Sub F8_Click()
      'on ne passe pas de chaîne "F7", mais le contrôle F7 (qui n'est autre que le contrôle actif !
      'on ne passe pas la chaîne "F8", mais directement le contrôle F8
      agir_sur ActiveControl, "Hello", F7
    End Sub
     
     
    Private Sub agir_sur(ctrl As Control, C As String, autre As Control)
      ctrl.Caption = C
      autre.Caption = "voilà"
      MsgBox "tu constates qu'il sait quels sont les contrôles auxque'ls se réfèrent ctrl et autre" & _
      vbCrLf & "et qu'il sait agir sur les propriétés de ces 2 contrôles" & vbCrLf & _
      "y compris sur leur propriété Name !" & vbCrLf & "La preuve ? " & vbCrLf & _
      "autre  est un contrôle dont le nom est " & autre.Name & vbCrLf & _
      "et ctrl est un contrôle ayant pour nom " & ctrl.Name
     End Sub
    Clique sur F7 ==>> regarde les changements ===>> lis le lsgbox ===>> clique ensuite sur F8 (et regarde, etc...)

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    ok merci gorfael et ucfoutu

    pour repondre a la question" mes intentions"

    j'ai 9 lignes de 31 bouton qui devrais avoir le meme script que celui que jai
    poster
    vous imaginer le travail et le poid rien que pour un changement de couleur

    alors mon but est de fair un seul code qui va servir pour tou les bouton

    jai bien trouver une solution en rajoutant 2texbox qui est celle ci
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
     private sub B7_click()
    textbox .value = "B8"
    call change
     
    Private Sub change_Click()
    nombouton = textbox1.value
    nomcase = textbox2.value
    If Controls(nombouton).Caption = "" Then
    Controls(nombouton).Caption = "CJ"
    Controls(nombouton).BackColor = 33023
    Controls(nomcase).Value = "12"
     
    ElseIf Controls(nombouton).Caption = "CJ" Then Controls(nombouton).Caption = "PCJ"
    Controls(nombouton).BackColor = 65535
     
     
    ElseIf Controls(nombouton).Caption = "PCJ" Then Controls(nombouton).Caption = "CN"
    Controls(nombouton).BackColor = 16776960
     
     
    ElseIf Controls(nombouton).Caption = "CN" Then Controls(nombouton).Caption = "PCN"
    Controls(nombouton).BackColor = 49152
     
     
    ElseIf Controls(nombouton).Caption = "PCN" Then Controls(nombouton).Caption = "SAJ"
    Controls(nombouton).BackColor = 8454143
    Controls(nomcase).Value = "11"
     
    ElseIf Controls(nombouton).Caption = "SAJ" Then Controls(nombouton).Caption = "SAN"
    Controls(nombouton).BackColor = 12583104
    Controls(nomcase).Value = "12"
     
    ElseIf Controls(nombouton).Caption = "SAN" Then Controls(nombouton).Caption = "CA"
    Controls(nombouton).BackColor = 16777215
    Controls(nomcase).Value = "5.83"
     
     
    ElseIf Controls(nombouton).Caption = "CA" Then Controls(nombouton).Caption = ""
     Controls(nombouton).BackColor = 16777215
    Controls(nomcase).Value = ""
     
     
    End If
    End Sub
    mais cette solution m oblige a instruire chaque bouton avec ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    private sub B7_click()...
    textbox1 .value = "B7"  'C7 pour le 2eme BOUTON   d7 pour le 3eme BOUTON  ect..
    textbox2 .value = "B8"   'C8 pour le 2eme CASE HEURE D8 pour le 3eme BOUTON  ect.....
    call change
    vous comprenez maintenant pourquoi je cherche la fonction qui dermine le nom du bouton que je suis en train de cliquer

    si ca existe je n'est plus qu 'une seule fonction a ecrire dans mon script et non pas 31 fonction multiplié par 9 lignes
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Inactif  

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    4 555
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 4 555
    Par défaut
    Cà, ami, figure-toi qu'on l'avait deviné depuis fort longtemps

    D'où les exercices (qui conduisent à ta solution) que je t'ai proposés (et qu'il te faut comprendre).
    Une autre fois : Nul besoin de passer par une chaîne de caractères ,(directement ou par l'intermédiaire d'une tectbox) ! C'est avec la/les variable(s) du/des contôle(s) qu'il faut travailler, pas avec une chaîne de caractères !

    Une question, avant d'aller plus loin : les réactions (modification de la couleur du bouton cliqué et modification du Caption de l'autre bouton (ton nomcase) en fonction du caption du bouton cliqué (quel que soit le bouton cliqué et quel que soit l'autre, défini par ton nomcase) doivent-elles être (OUI ou NON) toujours rigoureusement les mêmes ?
    Si oui : tu connais déjà la réponse, si tu as su analyser et comprendre les deux exercices que je t'ai proposés plus haut.
    Il ne restera plus que deux aspects à traiter :
    - éviter tous ces Ifs
    - penser à utiliser une classe pour ne gérer qu'un seul évènement Click
    Mais ces deux aspects devront faire l'objet de deux autres discussions et ne seront traités qu'après que tu auras su passer cette toute première étape : utiliser les contrôles et non les chaînes de caractères représentant leurs noms !!!!...

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

Discussions similaires

  1. [XL-2007] expression utiliser pour demander la resolution de l'ecran
    Par patricktoulon dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/07/2009, 16h13
  2. Réponses: 1
    Dernier message: 26/01/2009, 16h07
  3. Utiliser une variable pour stocker les noms d'objets.
    Par en_gel_ho dans le forum Access
    Réponses: 4
    Dernier message: 03/01/2007, 16h44
  4. Expression régulière pour récupérer le nom d'un fichier
    Par calimero2611 dans le forum Langage
    Réponses: 5
    Dernier message: 24/02/2006, 19h00
  5. Réponses: 7
    Dernier message: 07/09/2004, 14h16

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