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 :

Prob de transfert de données


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2018
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Prob de transfert de données
    bonjour,
    mon probléme est que j'ai plusieurs userfoms( usf1, usf2, usf3)
    Dans USF3, il y a un commande bouton pour enregistrer les données, mais ces données sont dans USF1,USF2,USF3, et il doivent étre transferer à un classeur excel.
    mais je sais pas comment la faire
    aidez-moi svp

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub CommandButton1_Click()
    Dim derligne As Integer
    If MsgBox("confirmez-vous l'ajout de vos données?", vbYesNo, "confirmation") = vbYes Then
    derligne = Sheets("capitaliser").Range("A456541").End(xlUp).Row + 1
    Cells(derligne, 1) = TextBox1.Value
    Cells(derligne, 2) = UserForm3.ComboBox1.Value
    Cells(derligne, 3) = UserForm3.ComboBox2.Value
    end if 
    end sub

  2. #2
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    décembre 2013
    Messages
    2 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2013
    Messages : 2 412
    Points : 4 200
    Points
    4 200
    --------------------------------------------------------------*****----------------------------------------------------------------------------
    Bonne Continuation & Plein Succès
    Notre seul pouvoir véritable consiste à aider autrui avec modestie
    ______________________________________________________
    Pour dire merci, cliquer sur et quand la discussion est résolue, penser à cliquer sur le bouton

  3. #3
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    décembre 2017
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : décembre 2017
    Messages : 715
    Points : 1 434
    Points
    1 434
    Par défaut
    Bonjour,
    Question: D'après le code, vous transférez après un click bouton sur un bouton de UF3 des données de UF3? Mais qu'y a t il sur les deux autres UF ? Ou les données doivent-elles aller, Colonnes etc ? Parce que si vous ne donnez aucun renseignements, comment voulez vous qu'on vous aide?
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    15 379
    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 379
    Points : 12 500
    Points
    12 500
    Billets dans le blog
    8
    Par défaut re
    bonjour
    est ce que tes 3 userforms sont affichés au moins ????? se lon le cas la methode est radicalement differente
    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
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 003
    Points : 51 787
    Points
    51 787
    Billets dans le blog
    97
    Par défaut
    Salut.

    L'important n'est pas qu'ils soient affichés, mais qu'ils soient chargés.

    D'abord, je vois trop souvent du code qui fait ceci:
    1. afficher le userform;
    2. récupérer des données (d'une feuille Excel ou autre);
    3. laisser l'utilisateur manipuler les données, en saisir...;
    4. traiter les données (inscription dans des cellules, sauvegarde, manipulations diverses);
    5. masquer le userform et/ou le décharger.


    Le problème de cette technique est qu'elle crée un couplage fort entre le usf et l'environnement dans lequel on l'utilise. Autrement dit, le usf est très dépendant de l'univers dans lequel on le manipule (nom de feuille, adresse de cellule, ...). Cela induit qu'il n'est souvent exploitable que dans un contexte très déterminé et qu'on ne peut que rarement le réutiliser ailleurs sans le modifier, parfois considérablement.

    Le rôle d'un userform est d'afficher des données, de permettre à l'utilisateur de les modifier, et c'est tout. Eventuellement, et même assez souvent, on crée une fonction de validation au sein du userform pour accepter le clic sur OK uniquement si les données sont correctes, sans que cette fonction doive aller chercher des données à l'extérieur du userform. C'est au code qui a appelé le userform de lui passer les valeurs à afficher ainsi que celles qui permettraient un contrôle de validité éventuelle, et de traiter les valeurs modifiées ou non par l'utilisateur lorsque ce dernier a terminé son traitement.


    Pour utiliser un usf comme il se doit, il faut savoir qu'il y a trois états à un userfom:
    1. non chargé;
    2. chargé mais non affiché;
    3. chargé et affiché.


    Normalement:
    1. On charge le userform;
    2. On lui passe éventuellement des données;
    3. On l'affiche;
    4. L'utilisateur modifie des données;
    5. Un bouton du userform (ou plusieurs) masque(nt) le userform;
    6. On traite les données du userform;
    7. On le décharge.


    Si on n'a rien à lui passer avant de l'afficher, on peut:
    1. L'afficher directement (.Show) ce qui a pour effet de le charger avant de l'afficher;
    2. Laisser l'utilisateur manipuler les données;
    3. Utiliser un bouton du userform (ou plusieurs) pour masquer le userform;
    4. Traiter les données du userform;
    5. Décharger le userform.


    Dans l'exemple suivant, je charge trois userform à la suite, je leur passe une info qui affiche une valeur dans un textbox, un bouton les masque, je récupère les valeurs des userforms puis je décharge les userform. Chaque userform contient un textbox1 et un commandbutton1.

    Chaque commandbutton1 utilise le code évènementiel suivant, qui ne fait que le masquer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
      Me.Hide
    End Sub
    La procédure suivante d'un module standard te permettra de comprendre comment le tout s'enchaine. Il va de soi que c'est plus intéressant si la valeur du textbox est modifiée par l'utilisateur lorsque le userform est affiché.

    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
    Sub Test()
      Load UserForm1
      UserForm1.TextBox1.Value = "Pierre"
      UserForm1.Show
      Load UserForm2
      UserForm2.TextBox1.Value = "Pierre"
      UserForm2.Show
      Load UserForm3
      UserForm3.TextBox1.Value = "Pierre"
      UserForm3.Show
      Debug.Print UserForm1.TextBox1.Value & ";" & UserForm2.TextBox1.Value & ";" & UserForm3.TextBox1.Value
      Unload UserForm1
      Unload UserForm2
      Unload UserForm3
    End Sub
    Citation Envoyé par nouhaaa1995 Voir le message
    [...]
    Dans USF3, il y a un commande bouton pour enregistrer les données, mais ces données sont dans USF1,USF2,USF3, et il doivent étre transferer à un classeur excel.[...]
    Normalement, ce n'est pas de la responsabilité du userform d'enregistrer les données. USF3 devrait simplement être masqué, puis la procédure qui a ouvert les différents userform devrait enregistrer les données. Un userform ne sert qu'à afficher des données et à en collecter de l'utilisateur, jamais à les traiter. En respectant ce principe de base de la programmation, tu écriras un code bien plus facile à tester, à maintenir et à faire évoluer

    Eventuellement, voir ma réponse dans une discussion qui illustre autrement le mécanisme d'utilisation pertinente d'un userform.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 9 468
    Points : 18 773
    Points
    18 773
    Par défaut
    Bonjour,

    vite fait en passant pour rappeler lorsque des données sont passées à un UserForm
    alors cet UserForm est de facto chargé, l'instruction Load étant donc optionnelle …

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    avril 2018
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : avril 2018
    Messages : 12
    Points : 14
    Points
    14
    Par défaut
    Citation Envoyé par Transitoire Voir le message
    Bonjour,
    Question: D'après le code, vous transférez après un click bouton sur un bouton de UF3 des données de UF3? Mais qu'y a t il sur les deux autres UF ? Ou les données doivent-elles aller, Colonnes etc ? Parce que si vous ne donnez aucun renseignements, comment voulez vous qu'on vous aide?
    Cordialement
    le bouton m'aidera à enregistrer les données existant dans UF3, UF2 et UF1 mais je sais pas comment ?
    mettez en considération que je suis débutante en VBA
    merci beaucoup pour votre aide

  8. #8
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 003
    Points : 51 787
    Points
    51 787
    Billets dans le blog
    97
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    [...]
    Pour plusieurs raisons, je préfère un code explicite à un code implicite.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  9. #9
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 663
    Points
    12 663
    Par défaut
    Bonjour
    La seule évocation d'un userform ou de l'un de ses objets provoque nécessairement son chargement et donc son initialisation.

    Une petite démonstration
    - un userform userform1 avec un bouton de commande commandbutton1 et ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub UserForm_Initialize()
      CommandButton1.Caption = "toto"
    End Sub
    - un bouton de commande commandbutton1 sur une feuille de calcul et ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub CommandButton1_Click()
      MsgBox UserForm1.CommandButton1.Caption
    End Sub
    Userform1 n'étant encore ni montré, ni chargé, cliquons sur le bouton de commande de la feuille --->>
    "toto" sera affiché par la msgbox. Ce qui montre bien que Userform1 a été chargé et que son évènement initialize a été déclenché.
    Il ne s'agit pas là d'un mécanisme simplement implicite, mais d'un mécanisme automatique, délibéré et incontournable (au demeurant le même sous VB6) dont certains développeurs se servent à des fins très précises (scénaris particuliers).
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  10. #10
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 663
    Points
    12 663
    Par défaut
    Je vois un pouce rouge.
    Il est probable que celui qui l'a mis n'a pas su comprendre tout le sens et le parti qu'il pouvait dans certains cas de figure tirer de ce qui est exposé dans l'aide interne VBA -->>
    Lorsqu'un objet est chargé, il se place en mémoire mais n'est pas visible. Utilisez la méthode Show pour rendre cet objet visible. Tant qu'un objet n'est pas visible, l'utilisateur n'a aucune interaction avec lui. Toutefois, l'objet peut être manipulé par voie de programmation par le biais de sa procédure d'événement Initialize.
    Je n'ai pas l'intention (ce serait une autre discussion qui aurait sa place dans la section Conception) de montrer ici des exemples de scénarii particuliers.
    Amitiés à tous
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2013
    Messages : 9 468
    Points : 18 773
    Points
    18 773
    Par défaut




    Nous frisons la pensée unique …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 003
    Points : 51 787
    Points
    51 787
    Billets dans le blog
    97
    Par défaut
    Citation Envoyé par Marc-L Voir le message
    Nous frisons la pensée unique …
    Il n'est pas question de pensée unique.

    Il est question qu'un userform est chargé de façon implicite ou explicite selon qu'il y a absence ou présence de Load... ou non. Le chargement automatique dont parle Jacques est bien un chargement implicite, où alors nous ne parlons pas la même langue. Le fait que ce soit un comportement normal et voulu en VB(A) ne change rien à cela.

    Après, que l'on mette un Load ou pas ne change rien à l'explication que je donnais à Nouhaaa, et je pense que le mécanisme dont parle Jacques y est bien expliqué.

    Si j'ai mis des pouces rouges, c'est parce que c'est fatigant de lire une allusion comme celle qui suit alors que l'extrait de l'aide VBA citée par Jacques expose justement les possibilité auxquelles je fais allusion dans mon explication initiale.

    Citation Envoyé par unparia Voir le message
    [...]
    Il est probable que celui qui l'a mis n'a pas su comprendre tout le sens et le parti qu'il pouvait dans certains cas de figure tirer de ce qui est exposé dans l'aide interne VBA[...]
    Je me suis pris un pouce rouge uniquement parce que j'ai précisé que je préférais un chargement explicite à un implicite et j'ai droit à un étalage de savoir d'une rare suffisance qui n'apporte rien sur le plan technique. Et on vient me parler de pensée unique?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 663
    Points
    12 663
    Par défaut
    Bonjour Pierre
    où alors nous ne parlons pas la même langue
    Il y a peut-être un peu de cela.
    Implicite a pour moi (je n'y peux rien. Je suis désolé -mais loin d'être honteux - d'être de la vieille école) un sens assez passif (résultat d'une déduction ou d'une induction) à distinguer de la présence d'un état sine qua non.
    Amitiés
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  14. #14
    Membre expérimenté Avatar de Transitoire
    Homme Profil pro
    Auditeur informatique
    Inscrit en
    décembre 2017
    Messages
    715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Auditeur informatique

    Informations forums :
    Inscription : décembre 2017
    Messages : 715
    Points : 1 434
    Points
    1 434
    Par défaut
    Bonjour, pardonnez moi de me mêler à cette discussion.
    Vous avez un peu tous raison dans le sens ou face à un objet, il existe autant de réalités subjectives, qu'il y a de sujets. Par contre je pense que lorsque l'on s'adresse à des gens qui débutent, il est important d'expliciter un maximum de choses. En tous cas, je vous remercie tous, vous avez éclairés en moi de nouvelles facettes de la lumière. J'utilise Excel depuis la version mac 1.1 et ses macro-commandes et j'ignorait que l'on pouvait charger un UF sans l'ouvrir
    Cordialement
    On a deux vies, la deuxième commence quand on se rend compte qu'on n'en a qu'une.
    Confucius

  15. #15
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 663
    Points
    12 663
    Par défaut
    Bonjour Transitoire
    j'ignorait que l'on pouvait charger un UF sans l'ouvrir
    "ouvrir" n'est pas le terme exact.
    Il ne s'agit pas d' "ouverture", mais d'ajout à une collection : la collection userforms
    Le principe est simple :
    1) - de la même manière qu'un chirurgien ne saurait obtenir une image irm d'un patient non introduit dans le tunnel nécessaire, VBA ne saurait agir sur un objet qui n'appartient pas à une collection
    2) - la collection userforms d'un projet est vide au départ. Comment VBA pourrait-il alors traiter un objet userform qu'il ne connait pas ?
    Il n'a d'autre choix que celui de l'ajouter d'abord et obligatoirement à sa collection Userforms. Il va puiser ce dont il a besoin à cette fin dans les composants du projet et l'ajouter à la collection Userforms (comme le chirurgien du 1) installerait le patient dans le tunnel nécessaire)
    Regarde ce que fait l'intellisence dès que l'on écrit le nom d'un userform (par exemple userform1). Dès que l'on fait suivre ce nom par un point, l'intellisense a déjà repéré l'existence parmi les composants du projet et propose alors les membres qui y sont associés ******
    Si l'objet userform de ce nom existe et qu'un (quel qu'il soit) de ses membres est utilisé, VBA ajoute immédiatement ce userform à sa collection Userforms
    Cette petite expérience mettra ce fait en évidence : (lancement alors qu'aucun userform n'a encore été sollicité)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     MsgBox UserForms.Count
      UserForm1.Hide
      MsgBox UserForms.Count
    Fais maintenant celle-ci, d'expérience (alors que la collection userforms est vide)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    MsgBox UserForms.Count
      Unload UserForm1
      MsgBox UserForms.Count
    la seconde ligne devrait déclencher une erreur, puisque la collection userforms est encore vide -->> mais pas d'erreur -->> car vba commence de toute manière par l'ajouter et pouvoir ainsi le supprimer de la collection (à l'instar d'un officier de l'état-civil qui transcrirait un acte pour pouvoir le dénoncer et en faire annuler les effets).
    Amitiés

    EDIT : ****** ainsi (pour lever tous doute quant à une seule liste de membres d'un objet de ce type) que tous les objets que contient ce userform (ceux créés en mode création)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  16. #16
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    15 379
    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 379
    Points : 12 500
    Points
    12 500
    Billets dans le blog
    8
    Par défaut re
    re
    Normalement:

    1. On charge le userform;
    2. On lui passe éventuellement des données;
    3. On l'affiche;
    4. Un bouton du userform (ou plusieurs) masque(nt) le userform;
    5. On traite les données du userform;
    6. On le décharge.

    heu ....oui
    il y a aussi un 4,5 eventuellement les textbox peuvent etre remplis manuellement (au clavier)
    d'ou ma question qui n'a été prise qu'au premier degré "est ce que tes 3 userforms sont affichés"
    car a ma connaissance tout ce qui a été tapé au clavier dans un textbox est dechargé quand le userform est refermé
    j'aurais pu parler de la etat "hide" je vous l'accorde

    reste a l'utilisateur de reprendre exactement son code initial et faire simplement le test de presence des userforms affichés ou pas
    perso sans les api je ne sais pas faire mais j'ai une astuce simple (tester le top) de chaque userform si c'est pas zero c'est qu'il sont affichés bien entendu il ne faut pas que leur top a
    en mode affiché soit prevu a zero sinon ca fonctionne pas

    un peu dans ce genre
    code initial pour le bouton dans userform3 avec condition sur userform affiché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub CommandButton1_Click()
    Dim derligne As Integer
    crit = UserForm1.Top > 0 And userform2.Top > 0
    If crit = True Then
    If MsgBox("confirmez-vous l'ajout de vos données?", vbYesNo, "confirmation") = vbYes Then
    derligne = Sheets("capitaliser").Range("A456541").End(xlUp).Row + 1
    Cells(derligne, 1) = TextBox1.Value
    Cells(derligne, 2) = UserForm3.ComboBox1.Value
    Cells(derligne, 3) = UserForm3.ComboBox2.Value
    End If
    Else
    MsgBox "les userforms 1 (et/ou) 2 ont été dechargés precedement"
    End If
    End Sub
    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

  17. #17
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 80
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : avril 2016
    Messages : 7 563
    Points : 12 663
    Points
    12 663
    Par défaut
    mais j'ai une astuce simple (tester le top) de chaque userform si c'est pas zero c'est qu'il sont affichés bien entendu il ne faut pas que leur top a
    en mode affiché soit prevu a zero sinon ca fonctionne pas
    Et tout cela pour "éviter" la simple extraction de la propriété visible (de surcroît sans aleas, elle) ?
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  18. #18
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 003
    Points : 51 787
    Points
    51 787
    Billets dans le blog
    97
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    re


    heu ....oui
    il y a aussi un 4,5 eventuellement les textbox peuvent etre remplis manuellement (au clavier)
    Il me semblait évident qu'entre les points 3 et 4, l'utilisateur modifie les valeurs des contrôles manuellement. C'est un peu le but d'un userform, me semble-t-il


    Citation Envoyé par patricktoulon Voir le message
    d'ou ma question qui n'a été prise qu'au premier degré "est ce que tes 3 userforms sont affichés"
    car a ma connaissance tout ce qui a été tapé au clavier dans un textbox est dechargé quand le userform est refermé
    j'aurais pu parler de la etat "hide" je vous l'accorde
    Mais non, justement. Les contrôles sont accessibles dès que, et tant que le userform est chargé, qu'il ne soit pas encore ou plus visible. C'est justement là l'intérêt, et ce que démontrent mes codes et ceux de Jacques, appuyés par l'extrait de l'aide en ligne proposé par Jacques.

    C'est pourquoi il ne faut pas parler d'ouvert ou de fermé car ces termes prêtent à confusion, et c'est pourquoi j'ai bien parlé de trois états, sans mentionner les termes ouvert ou Fermé.

    Utilise le code que je donne en démo, il met bien cela en lumière.

    Quant au test pour savoir si un userform est visible... c'est, heu... comment dire... Exotique...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    novembre 2003
    Messages
    18 003
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : novembre 2003
    Messages : 18 003
    Points : 51 787
    Points
    51 787
    Billets dans le blog
    97
    Par défaut
    Exemple pour tester qu'un userform est visible... (sans api et sans .top... ) ==>> UserForm1.Visible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub Test()
      UserForm1.Show False
      Debug.Print UserForm1.Visible
      UserForm1.Hide
      Debug.Print UserForm1.Visible
      Unload UserForm1
    End Sub
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  20. #20
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    avril 2009
    Messages
    15 379
    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 379
    Points : 12 500
    Points
    12 500
    Billets dans le blog
    8
    Par défaut re
    bonjour pierre
    oui je comprends
    mais sio l'utisateur a fait un "unload me/userform(x)" entre les manipulation dans usf(1,2,3) les textbox des usf unloadé sont vides
    d'ou ma question
    j'aurais pu dire "est ce que tes userforms on été unloadé ou pas " si tu veux ma question aurait été plus precise
    je vais tester ton code

    tester le".visible du userform est une solution sauf si justement pour une confortabilité visuelle il hide les deux autre userforms que celui affiché

    reste aussi au final qu'il peut simplement tester la valeurs des textboxs de ces userforms si elles ne doivent absolument pas etre vides

    puisque l'on peut tester la valeur d'un textbox meme si il n'est pas loader
    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

Discussions similaires

  1. [newbie] Transfert de données multibases
    Par Thierryx dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 11/07/2005, 09h35
  2. [C#] [Excel] Transfert de données
    Par bartoumi dans le forum Windows Forms
    Réponses: 3
    Dernier message: 11/04/2005, 14h08
  3. Transfert de données securisées via Internet ???
    Par franck06 dans le forum Développement
    Réponses: 3
    Dernier message: 22/11/2004, 17h16
  4. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  5. Transfert de données vers My SQL
    Par zoso dans le forum Outils
    Réponses: 2
    Dernier message: 30/09/2003, 10h21

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