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 :

Relier deux Userforms pour les inscrire sur une même ligne [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    technicien matériaux
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien matériaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 19
    Points
    19
    Par défaut Relier deux Userforms pour les inscrire sur une même ligne
    Bonjour,

    Je m'entraîne depuis un mois à programmer une macro pour le travail.
    J'ai un problème au niveau des userforms, je ne trouve pas la formule ou le mot pour les relier.

    Après plusieurs recherches sur le forum, je viens vous demander des conseils.

    Voici mon problème :

    Sur ma feuille excel, je clique sur un bouton "Saisir" (qui n'est pas Active X) qui m'ouvre un premier Userform (=Userform1).
    Je sélectionne mon choix en appuyant sur le bouton qui m'intéresse pour ouvrir le deuxième Userform (= Userform2).
    Simultanément l'Userform1 a déjà inscrit les données sur la feuille.
    Je remplis mes données sur l'Userform2 puis je valide seulement celui-ci s'inscrit sur une autre ligne.

    J'aimerai que ces deux Userform s'inscrivent sur la même ligne.
    Je pense que mon soucis vient de Userform1 qui devraient garder les données en mémoire sans les inscrire et en validant l'Userform2 tout inscrire.
    De plus, je décharge l'Userform1, ceci ne sera plus à faire si je dois sauvegarder les données. Peut être est-ce mon erreur ?

    J'ai essayé de ne faire qu'un seul Userform mais le résultat était le même donc je préfère en garder deux.

    Je vous joins le classeur sur lequel je travaille avec des données erronées bien évidemment. Soyez indulgent envers le code, certains proviennent de l'enregistreur de macro et je ne me suis pas encore penchée dessus pour les améliorer.
    Si j'ai glissé des erreurs, veuillez m'en informer s'il vous plaît, toutes remarques constructives sont les bienvenues.

    Je vous remercie de votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si tu souhaites avoir un maximum de réponses, afficher les lignes de code qui posent problème serait préférable car tous les intervenants de ce forum n'ouvrent pas les classeurs en pièces jointes.

  3. #3
    Membre à l'essai
    Femme Profil pro
    technicien matériaux
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien matériaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Bonjour,

    Je ne sais pas comment insérer les lignes de codes comme j'ai pu le voir dans les différents sujets.
    Je viens juste de m'inscrire sur ce forum. Car je ne résouds pas ce problème.

    Le classeur sert juste à imager mon problème. Les 5 premières lignes et surtout le titre le décrivent.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 928
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 928
    Points : 28 922
    Points
    28 922
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je ne sais pas comment insérer les lignes de codes comme j'ai pu le voir dans les différents sujets.
    Pour placer ton code, tu fais un Copier/Coller entre les balises prévues à cet effet (la touche # dans l'éditeur des messages)
    Il y a une charte à lire qui explique tout et aussi que les classeurs à télécharger ne sont pas les bienvenus dès la première question.

    Le classeur sert juste à imager mon problème. Les 5 premières lignes le décrivent.
    Tu fais un copier/coller des 5 lignes qui décrivent ton problème et tu le colles ici

  5. #5
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Bonjour
    dans userform Pr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    'Vide contenu pour une nouvelle saisie
    TBDate.Text = ""
    TBNumCharge.Text = ""
    TBNumOF.Text = ""
    TBNumOP.Text = ""
    CBNbpieces.Text = ""
    CBVisa.Text = ""
    ne sert a rien puisque Unload Me vas le faire

    J'ai modifié comme suit sur userform choixprgm
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Private Sub CmBtr1_Click()
     
    Rows(9).Insert
    Sheets("Données").Range("C3:I3").Copy
        Sheets("Programme").Range("C9:I9").PasteSpecial
     
    Unload Me
    prg.Show
     
    End Sub
    Puis dans module1
    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
    Sub InsererLesDonneesDansLaFeuille(ByVal DateChargement As String, ByVal NumeroDeCharge As String, _
    ByVal NumeroOF As String, ByVal NumeroDOp As String, ByVal Nombredepieces As Byte, ByVal Visa As String)
     
    'Dim LaDerniereLigne As Integer
     
    'Récupération de la dernière ligne du tableau
    'LaDerniereLigne = Sheets("Programme").Range("A9").SpecialCells(xlCellTypeLastCell).Row
     
    Range("A9").Value = NumeroDeCharge
    Range("B9").Value = DateChargement
    Range("J9").Value = NumeroOF
    Range("K9").Value = NumeroDOp
    Range("L9").Value = Nombredepieces
    Range("M9").Value = Visa
     
    'Tri décroissant des A11 à N1000
     
    With Worksheets("Programme").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A9"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
        .SetRange Range("A9:N1000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
     
    End Sub
    je n'ai pas traiter les autres boutons de choixprgm ne sachant si le resultat est le bon

  6. #6
    Membre à l'essai
    Femme Profil pro
    technicien matériaux
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien matériaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    D'accord,
    Veuillez m'excuser pour ce désagrément.

    Je repars de zéro si vous le voulez bien.

    Voici mon problème :

    Sur ma feuille excel, je clique sur un bouton "Saisir" (qui n'est pas Active X) qui m'ouvre un premier Userform (=Userform1).
    Je sélectionne mon choix sur l'Userform1 en appuyant sur le bouton qui valide et pour ouvre le deuxième Userform (= Userform2).
    Simultanément l'Userform1 a déjà inscrit les données sur la feuille.
    Je remplis mes données sur l'Userform2 puis je valide seulement celui-ci s'inscrit sur une autre ligne.

    Mais j'aimerai que ces deux Userform s'inscrivent sur la même ligne.

    Je pense que mon soucis vient de Userform1 qui devraient garder les données en mémoire sans les inscrire et en validant l'Userform2 tout inscrire.
    De plus, je décharge l'Userform1, ceci ne sera plus à faire si je dois sauvegarder les données. Peut être est-ce mon erreur ?

    J'ai essayé de ne faire qu'un seul Userform mais le résultat était le même donc je préfère en garder deux.
    Je recherche une façon différente de réfléchir que la mienne. Vos idées et votre aide sont les bienvenues.
    Et si des erreurs sont commises, j'aimerai savoir pourquoi cela ne va pas avec une explication pour ne pas la reproduire.

    Code de l'Userform1 (j'ai utilisé l'enregistreur de macro, j'améliorerai mon code plus tard) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    'Copie les plages "Données" adéquates tout en insérant une ligne et en collant sur la première ligne du tableau.
     Rows("9:9").Select
        Application.CutCopyMode = False
        Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        Sheets("Données").Range("C8:I9").Copy
        Sheets("Programme").Range("C9:I10").PasteSpecial 'Collage au même format que "Données"
     
    Unload Me 'Ferme ce formulaire
    prg.Show 'ouvre le deuxième userform après clic sur Rev2
    L'Userform2 : Je saisie toutes mes données puis valide mais elle s'insére sur une nouvelle ligne.
    Petite précision je n'ai aucun code d'insertion sur celui-ci. Juste un bouton valider :
    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
    Dim LaDerniereLigne As Integer
     
    'Récupération de la dernière ligne du tableau
    LaDerniereLigne = Sheets("Programme").Range("A10").SpecialCells(xlCellTypeLastCell).Row + 1
     
    Range("A" & LaDerniereLigne).Value = NumeroDeCharge
    Range("B" & LaDerniereLigne).Value = DateChargement
    Range("J" & LaDerniereLigne).Value = NumeroOF
    Range("K" & LaDerniereLigne).Value = NumeroDOp
    Range("L" & LaDerniereLigne).Value = Nombredepieces
    Range("M" & LaDerniereLigne).Value = Visa
     
    'Tri décroissant des A11 à N1000
     
    With Worksheets("Programme").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A9"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
        .SetRange Range("A9:N1000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
    J'utilise beaucoup l'enregistreur de macro, mais comme je débute, c'est pour apprendre. Je ne cherche pas pour le moment à optimiser mes codes, je ne me suis pas penchée dessus.

    Avec encore une fois, toutes mes excuses.

    Cordialement.

  7. #7
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    La solution se trouve au dessus de votre dernier message
    Désolé, j'ai mis du temps a écrire la réponse

  8. #8
    Membre à l'essai
    Femme Profil pro
    technicien matériaux
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien matériaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par keygen08 Voir le message
    Puis dans module1
    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
    Sub InsererLesDonneesDansLaFeuille(ByVal DateChargement As String, ByVal NumeroDeCharge As String, _
    ByVal NumeroOF As String, ByVal NumeroDOp As String, ByVal Nombredepieces As Byte, ByVal Visa As String)
     
    'Dim LaDerniereLigne As Integer
     
    'Récupération de la dernière ligne du tableau
    'LaDerniereLigne = Sheets("Programme").Range("A9").SpecialCells(xlCellTypeLastCell).Row
     
    Range("A9").Value = NumeroDeCharge
    Range("B9").Value = DateChargement
    Range("J9").Value = NumeroOF
    Range("K9").Value = NumeroDOp
    Range("L9").Value = Nombredepieces
    Range("M9").Value = Visa
     
    'Tri décroissant des A11 à N1000
     
    With Worksheets("Programme").Sort
        .SortFields.Clear
        .SortFields.Add Key:=Range("A9"), SortOn:=xlSortOnValues, Order:=xlDescending, _
        DataOption:=xlSortNormal
        .SetRange Range("A9:N1000")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
     
    End Sub
    je n'ai pas traiter les autres boutons de choixprgm ne sachant si le resultat est le bon
    Bonjour,

    Je vous remercie de votre réponse Keygen. Je ne comprends pas pourquoi vous enlever &LaDerniereLigne et remplacé par 9. Car cette partie de code je m'en suis inspirée sur un tutoriel.
    En utilisant SpecialCells(xlCellTypeLastCell).Row + 1 ma dernière ligne va toujours à la ligne suivante même si j'en supprime une.
    J'ai donc trouvé l'astuce de faire un tri de Z à A pour la contourner car en fait je voudrais qu'à chaque fois que j'utilise mes userforms cela aille sur la première ligne du tableau avec une (pour les tr) ou deux (pour les rev). J'ai peut être cherché trop compliqué.
    Voilà pour ma petite explication.

    Merci pour cette solution. Juste pour un insert. Ca fait 2 semaines que je bloque dessus.

  9. #9
    Membre éprouvé Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Points : 973
    Points
    973
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LaDerniereLigne = Sheets("Programme").Range("A9").SpecialCells(xlCellTypeLastCell).Row
    me renvoi 243, alors que l'on veut coller les données en ligne 9 me semble-t-il

    Rechercher la derniere ligne d'un tableau ne convient que si l'on veut inserer les données en bas d'un tableau,
    ce qui n'est pas le cas présentement.

  10. #10
    Membre à l'essai
    Femme Profil pro
    technicien matériaux
    Inscrit en
    Septembre 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : technicien matériaux

    Informations forums :
    Inscription : Septembre 2014
    Messages : 39
    Points : 19
    Points
    19
    Par défaut
    Tout à fait, merci pour votre explication, je mets ce sujet en résolu.

    Vous m'avez enlevé beaucoup de problèmes et je vous en remercie.
    J'ai pu enlever le tri Z à A et insérer deux lignes en même temps sans avoir un message d'erreur.

    Grâce à vous, je vais pouvoir continuer et créer de nouveaux problèmes suite au développement de ce classeur.

    Je reviendrai vers vous, si je n'arrive pas à résoudre et à penser différemment.

    Encore merci à vous et de m'avoir consacré un peu de votre temps.

    Cordialement

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

Discussions similaires

  1. Afficher les informations sur une même ligne
    Par JayenseN dans le forum PL/SQL
    Réponses: 2
    Dernier message: 24/05/2012, 15h12
  2. Scanner des images pour les mettre sur une feuille
    Par slyounet78 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/04/2012, 18h22
  3. [RegEx] Remplacer les occurences sur une même ligne
    Par supertino7 dans le forum Langage
    Réponses: 5
    Dernier message: 19/07/2009, 23h16
  4. [MySQL] Associer deux champs et les afficher sur une page
    Par dreamquad dans le forum PHP & Base de données
    Réponses: 12
    Dernier message: 14/04/2009, 13h40
  5. Voir tout les onglets sur une même ligne
    Par bnreb10 dans le forum AWT/Swing
    Réponses: 9
    Dernier message: 09/08/2006, 11h08

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