Copier les données d'un Userform dans une feuille Excel

simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   -  
simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
J'ai préparé un joli Userform et je voudrais que les données s'inscrivent sur une feuille Excel après avoir cliqué sur le bouton 'enregistrer" Mais je n'y arrive pas.
Je vous joins mon fichier - enfin, son début ..
Sub ArchiverBordereau()

'archiver les bordereaux dans le récapitulatif et incrémenter le numéro de Bordereau

Dim ligne As Integer
Dim numBord As Integer

MsgBox "Avez vous fait les impressions dont vous avez besoin ?", vbOKOnly

ligne = Sheets("récapitulatif").Range("A" & Rows.Count).End(xlUp).Row + 1 'je descend d'une ligne à chaque fois
numBord = TextBox1.Value

Sheets("récapitulatif").Range("B" & ligne).Value = numBord
Sheets("récapitulatif").Range("C" & ligne).Value = TextBox2.Value
Sheets("récapitulatif").Range("D" & ligne).Value = TextBox7.Value
Sheets("récapitulatif").Range("E" & ligne).Value = TextBox6.Value

End Sub
sur mon USF j'ai un bouton "enregistrer", mais rien ne se produit ...

excusez, mais j'ai beau cliquer sur code "Basic", je n'arrive pas à mettre mon fichier correctement !

merci de votre aide

Configuration: Windows / Chrome 99.0.4844.84

15 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    explications sur les balises de code: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

    Je pense que tu ne regardes pas au bon endroit. Les données s'inscrivent, sans doute pas où tu le souhaites.
    As-tu examiné la valeur de
    ligne
    ?
    Je pense que ce n'est pas la première fois que tu rencontres ce soucis.

    Il est préférable d'écrire:
    ligne = Sheets("récapitulatif").Range("A" & Sheets("récapitulatif").Rows.Count).End(xlUp).Row + 1
    0
  2. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci pour ton aide.
    En effet j'ai déjà eu ce problème auparavant; mais cette fois j'ai un userform alors qu'avant j'avais une feuille bon de commande à vider en fin et recopier sur une seconde feuille récapitulatif.
    je suis allé rechercher le code de cet ancien projet afin de m'en inspirer pour celui ci.
    Maintenant, je viens de corriger ma ligne "ligne" ainsi que tu me l'a conseillé et à ce niveau àa fonctionne.
    Mais ça bloque au niveau de numBord. Je l'ai supprimé et alors àa bloque au niveau du textBox7.
    Par rapport à mon ancien programme, ici j'ai mis les n° de TextBox à la place des références de feuille puisque je suis sur un Userform.
    Sub ArchiverBordereau()
    
    'archiver les bordereaux dans le récapitulatif et incrémenter le numéro de Bordereau
    
    Dim ligne As Integer
    Dim numBord As Integer
    
    MsgBox "Avez vous fait les impressions dont vous avez besoin ?", vbOKOnly
    ligne = Sheets("récapitulatif").Range("A" & Sheets("récapitulatif").Rows.Count).End(xlUp).Row + 1 ' je descend d'une ligne à chaque fois
    
    'numBord = TextBox1.Value
    
    Sheets("récapitulatif").Range("B" & ligne).Value = numBord
    Sheets("récapitulatif").Range("C" & ligne).Value = TextBox2.Value
    Sheets("récapitulatif").Range("D" & ligne).Value = TextBox7.Value
    Sheets("récapitulatif").Range("E" & ligne).Value = TextBox6.Value
    
    
    End Sub


    Bien que j'aie suivi à la lettre les explications de la mise en place du code, je n'y suis toujours pas arrivé.
    Mon second problème :
    j'ai mis un bouton (CommandButton) sur mon UserForm, mais je ne vois pas comment lui faire déclencheer mon enregistrement.
    Merci encore une fois de ton aide.
    0
    1. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
       
      Ouf, lors de l'envoi, le code s'inscrit correctement ! j'ai enfin réussi. Merci
      0
    2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      As-tu bien
      option explicit
      en haut du module?

      "ça bloque": symptôme?
      0
  3. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Eh non ! je ne l'ai pas. Je vais donc l'ajouter de suite . Merci

    Mais comment "dire" à mon bouton "enregistrer" qu'il doit me lancer le code ?

    merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Faisons d'abord fonctionner le code.
      Où se trouve le code?
      0
  4. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    en effet !
    voici donc le lien pour avoir mon fichier complet.
    Concernant le code, tout n'est pas terminé, mais lorsque je saurai entrer les premieres, le reste se fera aisément.

    https://www.cjoint.com/c/LCFqkpGDf3I

    j'espère qu'avec cela tu pourras m'aider.
    Encore merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Ton code n'est pas au bon endroit: il est dans un module, alors que cela doit être le code du UserForm.
      Option Explicit
      
      
      Private Sub Enregistrer_Click()
      
      
      'archiver les bordereaux dans le récapitulatif et incrémenter le numéro de Bordereau
      
      Dim ligne As Integer
      Dim numBord As Integer
      
      MsgBox "Avez vous fait les impressions dont vous avez besoin ?", vbOKOnly
      ligne = Sheets("récapitulatif").Range("b" & Sheets("récapitulatif").Rows.Count).End(xlUp).Row + 1 ' je descend d'une ligne à chaque fois
      
      numBord = TextBox1.Value
      
      Sheets("récapitulatif").Range("B" & ligne).Value = numBord
      Sheets("récapitulatif").Range("C" & ligne).Value = TextBox2.Value
      Sheets("récapitulatif").Range("D" & ligne).Value = TextBox7.Value
      Sheets("récapitulatif").Range("E" & ligne).Value = TextBox6.Value
      
      
      End Sub
      
      
      
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Et bien MERCI ! je l'ignorais. C'est la première fois que je met un Userform en place. Auparavant j'ai toujours travaillé directement sur des feuilles... Mais je trouvais que l'utilisation d'un UserForm était particulièrement bien.
    Et je le pense toujours. Je vais maintenant mettre mon code dans l'USF, l'essayer et ensuite si tout fonctionne correctement, je le complète.

    Merci de ton aide.
    0
  7. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Super ! ça fonctionne à merveille ! J'ai continué mon code et cela fonctionne parfaitement pour les TextBox.
    Par contre, je cherche comment faire avec les CommandButton; j'aimerais que lorsque je clique sur un commandButton il s'inscrive par exemple une croix (x) dans la colonne adhoc.
    en attendant ta solution (je suis sur qu'elle va arriver, je cherche de mon côté.
    Bien à toi
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      De quels CommandButton s'agit-il?
      S'il s'agit de ceux pour le type de matériel à réparer, ne serait-ce pas plus logique d'utiliser des boutons d'options, plutôt que des boutons de commande? En mettant ces boutons dans le même groupe (en leur donnant le même nom de groupe), un seul pourra être coché à la fois.
      Ensuite, au moment d'enregistrer, le code VBA va récupérer le(s) bouton(s) coché(s), et mettre X dans la ou les colonnes.
      0
  8. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    merci, c'est exactement ce que je voulais faire. Je vais donc changer ces boutons pour des boutons d'option et je vais essayer pour faire le groupe.

    Merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Le nom du groupe, c'est une propriété du bouton. Il suffit de leur mettre à chacun la même valeur pour cette propriété.
      0
  9. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci, je regarde. j'ai déjà changé mes boutons.
    0
  10. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Super ! j'ai maintenant deux groupes distincts et je peux faire un choix dans les deux groupes sans effacer le second.
    Je continuerai demain ... je dois encore changer ce qui s'inscrit sur ma feuille selon le bouton cliqué ( actuellement c'est vrai ou faux)
    et ensuite, je voudrais faire une sauvegarde afin de pouvoir rappeler le bordereau.
    Merci bonne soirée et excellent week end
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      bon week-end, bon RepairCafé (si c'est ce week-end).
      si tu as un souci pour enregistrer les options choisies (X dans la bonne colonne), partage un fichier avec la nouvelle version du UserForm.
      0
  11. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci, le Repair Café c'est la semaine prochaine. Nous le faisons tous les second samedi du mois.
    Nous avons débuté cela en juin par un premier essai, arrêt en juillet et aout et première "vrai" session en septembre. Chaque mois nous avons un peu plus de visiteurs- 36 le mois dernier - et nous avons une super ambiance.
    Du point de vue informatique, nous sommes trois : un responsable informatique dans une grande société, un informaticien indépendant travaillant avec des sociétés (pas de magasin) depuis 20 ans et ... moi, l'apprenti ! j'y fais ce que je sais faire et je suis leurs conseils pour le reste.
    Nous avons également une couturière (82 ans !), deux électroniciens, un réparateur vélo ainsi que trois "répar'Tout" qui s'occupent de démonter un aspirateur, un climatiseur mobile, le nettoyer et le remonter.
    C'est vraiment une belle organisation qui m'a poussé de plus en plus à réparer plutôt que remplacer. Surtout au vu de tout ce qui augmente actuellement.
    Excellent week end à toi aussi. Je me replonge dans mon programme et je reviens vers toi si besoin.
    Décidement, ce forum est une superbe invention !
    0
  12. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    me revoici ...
    j'ai bien avancé dans mon projet.
    Maintenant mon USF s'ouvre à l'ouverture de mon dossier.
    la feuille se remplit correctement, mais j'aimerais que avec les commandbutton je puisse remplacer les FAUX et VRAI par rien et X (pour vrai) J'ai cherché mais n'ai pas trouvé !
    Ensuite, j'ai essayé d'imprimer mon USF, mais il prend plus qu'une page en largeur ! Je ne vois pas comment l'adapter à une feuille A4 si ce n'est un conseil vu lsur le net de faire une copie d'écran et la mettre dans une feuille et ensuite imprimer cette feuille dans les bonnes dimensions . Je trouve cela un peu farfelu ?
    La dernière chose, pas du tout nécessaire, mais ce serait bien que l'heure de la prise du bordereau s'indique automatiquement. Mais ça c'est vraiment pas important.
    déjà merci pour le travail que tu m'aides à réaliser.
    Je joins mon fichier .
    https://www.cjoint.com/c/LDckuJoMmWI
    merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      pour les "X", je ferais:
      if OptionButton1.Value then
          Sheets("récapitulatif").Range("I" & ligne).Value = "X"
      end if

      Je suppose que il n'y a rien à faire sinon, car toute la ligne est vide au départ.

      Pour l'heure, moi je supprimerais cela du userform, et ferais:
      Sheets("récapitulatif").Range("C" & ligne).Value = Time ' heure


      Pour l'impression, je n'ai pas beaucoup d'expérience avec cela, je pense à deux pistes:
      1) réduire la taille du userform (donc également l'afficher plus petit)
      2) créer une feuille Excel qui a le look de ce que tu veux imprimer, et, au moment d'imprimer, y transférer les données, puis imprimer cette feuille.
      0
  13. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Merci pour les OptionButton, je vais mettre cela en route de suite.
    Si tu as ouvert mon fichier, tu verras que j'ai déjà préparé une feuille Excel avec les mêmes indication que sur l'USR. Je pense que je vais envoyer mes données également vers cette feuille et ensuite l'imprimer en lui donnant les dimensions désirées et tant que j'y suis pourquoi pas l'imprimer en noir et blanc (plus rapide et plsu économique)
    Merci
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Je n'avais pas remarqué le second onglet, "impression", sinon j'aurais expliqué plus simplement!

      Cela te permet aussi, si utile, d'imprimer à partir d'une ligne du récapitulatif, sans passer par le userform.

      Je me demande comment tout cela fonctionne, car une partie des données sont encodées avant réparation, et une autre partie après, non?
      0
  14. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Oui, c'est aussi mon problème. Je ne sais pas encore comment nous allons faire ? je pensais à sauvegarder les bordereaux afin de pouvoir les rappeler après réparation et ainsi compléter la partie "après réparation". sinon on utiliserait des feuilles imprimées comme l'USF mais vierges et lorsqu'elles reviendraient, elles seraient alors encodées. Mais je trouve que c'est là ça prendra plus de temps.
    Je peux aussi limiter l'USF à la première partie et encoder la seconde directement dans le récapitulatif.
    Le récapitulatif nous permettra d'effectuer des statistiques selon toutes les critères que l'on veut.
    Je vais donc me lancer dans la préparation de l'impression en recopiant les données de l'USF dans la feuille Impression.
    Merci et excellente soirée.
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      peut-être ainsi:
      - un userform pour créer un nouveau bordereau, avec creation d'une nouvelle ligne dans "récapitulatif" (tout cela existe déjà)
      - si on se positionne dans l'onglet "récapitulatif" sur une des lignes, et qu'on fait une combinaison de touches, ou un double clic, cela démarre un autre userform, qui permet de corriger/compléter les données déjà introduites.
      0
  15. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    Excellente idée, je vais essayer cela. Mais j'avais également l'idée que j'ai utilisée dans un programme de facturation (pour lequel tu m'as d'ailleurs beaucoup aidé) où je sauvegarde les documents par leur numéro d'ordre et ej peux ainsi aller rechercher le pdf, mais ici je sauvegarderais en xlsx afin de pouvoir le corriger.
    Je vais essayer les deux.
    Merci et excellent dimanche. Ici il fait froid ... très froid !
    0
    1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588
       
      Si toutes les infos sont dans l'onglet "récapitulatif", est-il utile de sauvegarder en xlsx?
      bon dimanche!
      0
  16. simkmil Messages postés 505 Date d'inscription   Statut Membre Dernière intervention   35
     
    en effet !!
    le principal est que nous ayons tout dans le récapitulatif .
    Parfois on chercher à faire compliqué alors qu'on peut faire simple...
    et bien entendu on remarque encore ici qu'il y a plus dans deux têtes que dans une.
    Merci
    0