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 :

Empêcher la disparition de contrôles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut Empêcher la disparition de contrôles
    Bonjour à tous,
    voilà mon petit soucis, j'ai un userform dans un fichier sur réseau, sauf que moi j'ai excel 2003 (avec un controle calendrier dans vba) et les autres un excel 2000 sans ce controle calendrier. Donc dés qu'ils veulent ouvrir le fichier excel, il leur dit que les controles n'existent pas et excel efface les controles qu'il ne connait pas, comment pourrais éviter cela (car c'est pénible de remettre à chaque fois ces trucs...)

    Sinon, comment puis je faire pour sauvegarder un changement de texbox que j'ai fait dans un userform avec une mise à jour par un textbox dans ce meme userform, car quand je le fais, il me l'affiche et dés que je le ferme, il revient comme avant ! Donc un peu pénible quand meme !

    Merci d'avance ...

  2. #2
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Bonjour,

    Concernant le problème Excel 2003/2000 je ne vois pas.
    Pour le contenu de ton textbox, je passerais par une cellule, par exemple la cellule IV1 rarement (pour ne pas dire jamais) utilisée.

    En supposant que tu passes par un bouton pour valider le contenu du TextBox1 vers le TextBox2 ça donnerait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton1_Click()
    Sheets(1).Range("IV1") = Me.TextBox1.Value
    Me.TextBox2.Value = Sheets(1).Range("IV1").Value
    End Sub
    Et à l'ouverture du UserForm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.TextBox2.Value = Sheets(1).Range("IV1").Value
    End Sub

  3. #3
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Ok, mais bon, vu que j'utilise ce qui suit, et bien, ça ne marche pas dans ce que tu me dis...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     Private Sub CommandButton13_click()
        For Each Controle In Me.Controls
            If TypeOf Controle Is Msforms.CheckBox Then
                If InStr(Controle.Name, "CheckBox") <> 0 Then
                    If Controle Then
                        Controle.Caption = Me.Controls("TextBox13").Text
                    End If
                End If
            End If
        Next
    End Sub

  4. #4
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Pour le calendrier, il faudrait ajouter le Contrôle calendrier 10.0 (MSCAL.OCX) qui devrait se trouver dans c:\Program files\Microsoft Office\Office 10\ de la version 2003 d'Office, mais je ne suis pas certain que tu puisses l'utiliser hors d'un install depuis Office. A tester. J'ai eu fait ça sans install pour d'autres .ocx, certains ont fonctionné, d'autres non.
    A tout hasard et à défaut d'une info vérifiée.

  5. #5
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Ca marche ! Merci beaucoup...

    Manque juste le petit probléme de l'userform...

  6. #6
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Citation Envoyé par JPDU92 Voir le message
    Ok, mais bon, vu que j'utilise ce qui suit, et bien, ça ne marche pas dans ce que tu me dis...
    Si ça marche, faut juste un peu adapter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub CommandButton13_Click()
    Sheets(1).Range("IV1") = Me.TextBox13.Value
    Me.Controle.Caption = Sheets(1).Range("IV1").Value
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
    Me.Controle.Caption = Sheets(1).Range("IV1").Value
    End Sub

  7. #7
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Ben non en fait, car je choisis en des nombreux controls à changer, donc j'en ai pas qu'un et je peux pas utiliser la feuille excel à ma guise...

  8. #8
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    As-tu pensé à des zones de texte masquées ? (dans la feuille de calculs)

  9. #9
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Oui mais ça voudrait dire que je dois mettre une centaine de formule car c'est le nombre d'optionbutton que j'ai, enfin bon, ça ne ferait qu'une centaine de plus à 4000 lignes, pas grand chose mais je me demandais si y avait pas plus simple... Ben si, en fait, modifier l'userform directement...

  10. #10
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bon, je reprends ici
    Citation Envoyé par JPDU92
    Sinon, comment puis je faire pour sauvegarder un changement de texbox que j'ai fait dans un userform avec une mise à jour par un textbox dans ce meme userform, car quand je le fais, il me l'affiche et dés que je le ferme, il revient comme avant ! Donc un peu pénible quand meme !
    Peux-tu nous expliquer plus précisément ton pb car ici, il n'était pas question d'optionbutton.
    Tu as des optionButtons... Où ça ?
    Dans un userform à ce que j'ai compris, ok. Mais dans un cadre ? (frame ?) ou isolés les uns des autres ? Ont-ils une partie de nom commune ? S'excluent-ils les uns les autres ?
    Que veux-tu récupérer ? Leur état au moment de la fermeture de l'usf ?
    Bref, dis-nous tout
    A+

  11. #11
    Expert confirmé
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Par défaut
    Salut ouske et merci, je me sens moins seul

    Je suis largué là, dans le message n°1 on parle de TextBox, dans le n°3 de Caption des CheckBox et dans le n°9 de OptionButton...

  12. #12
    Membre confirmé
    Inscrit en
    Septembre 2007
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 72
    Par défaut
    Il est vrai que je me suis mal exprimé, et peut être employé les mauvais termes et un peu embrouillé, désolé !
    En fait j'ai un userform avec une centaine de checkbox, et quand je veux en changer le caption, j'ai une zone de texte que je remplis et quand je valide, le caption du checkbox se change, jusque là tout va bien, sauf que lorsque je ferme l'userform, le checkbox revient comme avant le changement, donc, là, soucis...

  13. #13
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Donc, tu dois mémoriser la situation de chaque checkbox avant de quitter l'userform.
    D'abord la méthode pour mémoriser "quelque part" ces positions.
    Déjà, as-tu d'autres checkBox que les 100 que tu veux mémoriser ?
    Sont-ils numérotés de 1 à 100 ? Ce qui nous arrangerait bien...
    La méthode donc. Ici, j'ai utilisé un bouton pour placer les états de tes checkbox dans la cellule A1 de la feuille de calculs, on verra plus tard où placer ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton1_Click()
    Dim LeCheck as control, Etat as string
    For Each LeCheck In Me.Controls
         If TypeName(LeCheck) = "CheckBox" Then
               Etat = Etat & "," & LeCheck
         End If
    Next
    Cells(1, 1) = Etat
    End Sub
    En sortant de là, Etat aura cette forme ",Vrai,Faux,Vrai,Faux,Faux,Vrai,Faux,Vrai,Vrai,Vrai,Vrai,Faux,Faux,Vrai,Faux,Vrai... etc" et tu retrouveras ça dans la cellule A1 de la feuille active.

    Si tu n'as pas d'autre Checks dans ton Userform, pour en récupérer l'état, une simple boucle suffit dans Userform_Initialize.
    On obtient un tableau des états de chaque Checkbox en faisant un Split sur Etat.
    Comme Etat commence par une virgule, la lecture du tableau devra commencer à 1.
    Donc, pour rétablir l'état d'origine de tes Check, tu utilises la boucle suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub UserForm_Initialize()
    Dim Tablo As Variant, i As Integer, LeCheck As Control, Etat as string
    Etat = Cells(1, 1)
    Tablo = Split(Etat, ",")
    i = 0
    For Each LeCheck In Me.Controls
         If TypeName(LeCheck) = "CheckBox" Then
            i = i + 1
            LeCheck = Tablo(i) = "Vrai"
         End If
    Next
    End Sub
    Ceci pour la méthode.
    Maintenant, pour placer Etat entre fermeture et ré-ouverture, tu as l'embarras du choix. Une cellule perdue dans le fin fond de ta feuille de calculs ou une zone de texte masquée ou en dur sur la dernière ligne de code d'un module.
    Teste ces codes dans un userform tout neuf où tu auras mis un vingtaine de Checkbox et un bouton CommandButton1
    1 clic sur le bouton pour récupérer l'état
    Tu fermes
    Tu relances
    Tu vois
    A+

Discussions similaires

  1. Réponses: 0
    Dernier message: 07/09/2012, 11h03
  2. [Dev-Pascal] Comment empêcher la disparition de l'écran ?
    Par iks37 dans le forum Autres IDE
    Réponses: 3
    Dernier message: 22/10/2009, 20h30
  3. Réponses: 6
    Dernier message: 26/05/2008, 10h32
  4. [VB.NET] Disparition des contrôles dans l'IDE
    Par olbi dans le forum Windows Forms
    Réponses: 5
    Dernier message: 05/05/2006, 16h58
  5. Comment empêcher la mise à jour d'un contrôle à l'écran ?
    Par JojoLaFripouille dans le forum Composants VCL
    Réponses: 4
    Dernier message: 19/09/2003, 12h52

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