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 :

Remplir un fichier à partir d'un formulaire externe


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 39
    Par défaut Remplir un fichier à partir d'un formulaire externe
    Bonjour,
    J'essaye de créé une macro qui remplis un fichier "test.xlsx" dans l'onglet "Sources" à partir d'un formulaire dans un fichier "source". Voici ce que j'ai fait à date, mais j'ai un message d'erreur, et je ne sais pas c'est quoi la cause?
    Une petite question aussi, est ce que plusieurs personnes peuvent écrire au même temps dans le test.xlsx, car chaque personne à son propre formulaire.

    Merci pour votre aide!

    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
     
    Private Sub btnAjout_Click()
     
     
    Dim Chemin As String, Fichier As String
     
     'Chemin où se trouve le fichier à ouvrir
     Chemin = "http://space.int.moi.ca/Coaching Logs/"
     'Nom du fichier à ouvrir
     Fichier = "test.xlsx"
     
     'Empêche le raffraichissement de l'écran
     Application.ScreenUpdating = False
     
     'Ouverture du fichier
    Workbooks.Open Chemin & Fichier
     
     
        Sheets("Sources").Activate
        Range("B2").Select
        Selection.End(xlDown).Select ' On se positionne sur la dernière ligne non vide
        Selection.Offset(1, 0).Select ' On se décale d'une ligne vers le bas
        ActiveCell = cboAnnée & "-" & cboMois & "-" & cboJour
        ActiveCell.Offset(0, 1).Value = cboConseiller
        ActiveCell.Offset(0, 2).Value = cboDir
        ActiveCell.Offset(0, 3).Value = cboCoach
        ActiveCell.Offset(0, 4).Value = cboÉquipes
        ActiveCell.Offset(0, 5).Value = cboSujet
        ActiveCell.Offset(0, 6).Value = cboÉlémentDeCoaching
        ActiveCell.Offset(0, 7).Value = txtCommentaire
        ActiveCell.Offset(0, 8).Value = txtDateDeSuivi
     
     
         'pour fermer le classeur que tu viens d'ouvrir et l'enregistrer
     Workbooks(Fichier).Close True
     
     'le raffraichissement de l'écran à true
     Application.ScreenUpdating = True
     
        MsgBox "Votre Coaching a bien été enregistré dans le coaching log", vbOKOnly + vbInformation, "CONFIRMATION"
     
    End Sub

  2. #2
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Par défaut
    Bonjour Benouman,

    Il y a de nombreux messages d'erreurs donc si tu ne le donnes pas tu compliques la tâche de ceux qui veulent t'aider surtout si par hasard ton code fonctionnait avec une autre configuration pour une raison ou une autre alors cela serait très difficile d'identifier le problème. Normalement la ligne ou le bloc causant l'erreur est indiquée aussi...

    Je vais essayer de lancer ton code et je ferai un edit si je trouve quelque chose

    Edit :
    Je pense que tu veux parler du partage de classeur qui permet à plusieurs utilisateurs d'ouvrir et de modifier un fichier

  3. #3
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 39
    Par défaut
    Merci Nagel Tha pour ta réponse,
    Je ne sais pas de quoi tu parles, je t'ai donné tout le code du bouton enregistrer de mon formulaire.
    La macro ouvre le fichier test.xlsx et puis elle donne une erreur référent à la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Sheets("Sources").Activate
    Merci encore,

  4. #4
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Par défaut
    Je parlais de cela :
    Nom : Capture.JPG
Affichages : 618
Taille : 18,4 Kox

    Vérifie que l'onglet de la feuille que tu veux activer s'appelle bien "Sources" avec la même casse. De plus, les instructions .Select et .Activate sont souvent inutiles et en l'occurrence cela ne semble pas nécessaire.

    Vu ton code, tu sélectionne en réalité toute la feuille et donc vouloir sélectionner la ligne du dessous cause une erreur...

    Cette question a été posée récemment sur le forum d'ailleurs :
    Récupérer le n° de la dernière ligne renseignée d'une colonne

    Essaye d'adapter cela à ton cas

    Edit
    Si tu bloques fais le moi savoir je te ferai une proposition de correction. Ou quelqu'un d'autre le fera s'il voit ton message avant moi

    Et retire ces deux lignes (mais adapte ton code de manière à ce que le compilateur comprenne que le range que tu vises est dans "Sources") :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Sheets("Sources").Activate
        Range("B2").Select

  5. #5
    Membre actif
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Avril 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Canada

    Informations professionnelles :
    Activité : Analyste d'exploitation

    Informations forums :
    Inscription : Avril 2018
    Messages : 39
    Par défaut
    Bonjour,
    Sources est le bon nom d'onglet, et c'est bien ca le message d'erreur, voici une capture d'écran ou ça bloque:

    Nom : erreur.JPG
Affichages : 630
Taille : 47,2 Ko

    et j'ai aucune espèce d'ici c'est quoi le problème, car quant je veux enregistrer dans le même fichier du formulaire, ca fonctionne bien, mais lorsque je peux écrire dans un autre fichier, ça bloque, et comme je suis débutant, ???
    merci,

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2017
    Messages
    132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2017
    Messages : 132
    Par défaut
    Oui, cela plante car au-delà du nombre limite de lignes dans la feuille il n'y a plus de lignes.

    Tu dois donc utiliser xlUp et non xlDown pour commencer. Tu peux donc écrire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Sources").Range("B" & Rows.Count).End(xlUp).Select
    Pour sélectionner ta plage.

    Je ferai un édit pour les balises et donner plus de détails (je réponds depuis mon portable).

    Bonne nuit ^^

    Edit :

    Ressources que je te propose de consulter (je mettrai à jour si je pense à d'autres) :



    Proposition de correction :
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
     
    Private Sub btnAjout_Click()
     
     
    Dim Chemin As String, Fichier As String
     'Empêche le raffraichissement de l'écran
     Application.ScreenUpdating = False 'cela ne change rien, mais c'est mieux de le faire apparaître avant tes instructions
     
     'Chemin où se trouve le fichier à ouvrir
     Chemin = "http://space.int.moi.ca/Coaching Logs/"
     'Nom du fichier à ouvrir
     Fichier = "test.xlsx"
     
     'Ouverture du fichier
    Workbooks.Open Chemin & Fichier
     
     
        'Sheets("Sources").Activate 'inutile : tu peux enlever cette ligne
        'Range("B2").Select 'inutile : tu peux enlever cette ligne
        'Selection.End(xlDown).Select ' On se positionne sur la dernière ligne non vide
        's'il une ligne est renseignée après B2 : cette ligne sera bien sélectionnée
        'mais si aucune ligne n'est renseignée alors la ligne sélectionnée sera la dernière de la feuille (qui dépend de ta version d'Excel)
        'ainsi avec :
        'Debug.Print Range("B2").End(xlDown).Row le résultat sera 4 si la ligne 4 est renseignée et aucune autre après
        'mais le résultat sera 1048576 (avec ma version d'Excel, je ne sais plus quelle version a vu la limite augmentée) si aucune ligne après la ligne 2
        'est renseignée : autrement dit tu sélectionnes la dernière ligne de la feuille et il est impossible d'aller plus loin
        'note : ctrl+G pour voir les résultats de Debug.Print entre autres
     
        'Les lignes ci-dessus peuvent être remplacées par :
        Range("B" & Rows.Count).End(xlUp).Select 'pour sélectionner mais si la sélection n'est pas utile, enlever la méthode .Select
        'Debug.Print Range("B" & Rows.Count).Row va afficher 1048576 (la dernière ligne de la feuille)
        'Debug.Print Range("B" & Rows.Count).End(xlUp).Row va afficher 1 si la colonne est vide ou le numéro de la première ligne renseignée 
        'rencontrée (qui est la dernière ligne renseignée)
     
     
        'Selection.Offset(1, 0).Select ' On se décale d'une ligne vers le bas 'passer par l'objet sélection est inutile ; remplacer par :
        Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Select
     
        'Ensuite, tu devrais évité tous les ActiveCell qui sont inutiles ici :
        ActiveCell = cboAnnée & "-" & cboMois & "-" & cboJour 'là je ne sais pas ce que tu veux faire
     
        'ActiveCell.Offset(0, 1).Value = cboConseiller
        Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = cboConseiller
     
        'Idem pour la suite (sauf que l'offset sera toujours le même vu que la dernière ligne est réévaluée à chaque fois !) :
        'ActiveCell.Offset(0, 2).Value = cboDir
        Range("B" & Rows.Count).End(xlUp).Offset(1, 0).Value = cboDir
        ActiveCell.Offset(0, 3).Value = cboCoach
        ActiveCell.Offset(0, 4).Value = cboÉquipes
        ActiveCell.Offset(0, 5).Value = cboSujet
        ActiveCell.Offset(0, 6).Value = cboÉlémentDeCoaching
        ActiveCell.Offset(0, 7).Value = txtCommentaire
        ActiveCell.Offset(0, 8).Value = txtDateDeSuivi
     
     
         'pour fermer le classeur que tu viens d'ouvrir et l'enregistrer
     Workbooks(Fichier).Close True
     
     'le raffraichissement de l'écran à true
     Application.ScreenUpdating = True
     
        MsgBox "Votre Coaching a bien été enregistré dans le coaching log", vbOKOnly + vbInformation, "CONFIRMATION"
     
    End Sub
    J'espère que c'est plus clair

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

Discussions similaires

  1. Remplir une table à partir d'un formulaire
    Par coco38 dans le forum Access
    Réponses: 2
    Dernier message: 16/05/2008, 19h31
  2. [Formulaire]Remplir une table à partir d'un formulaire
    Par mystikgirl30 dans le forum IHM
    Réponses: 5
    Dernier message: 13/04/2007, 11h38
  3. Lecture d'un fichier à partir d'un formulaire
    Par Dirty Harry dans le forum Langage
    Réponses: 7
    Dernier message: 01/02/2007, 16h39
  4. [C#/SqlServer 2005] Comment remplir une DB à partir d'un formulaire ?
    Par Clarissa2006 dans le forum Windows Forms
    Réponses: 20
    Dernier message: 22/06/2006, 16h10
  5. gestion de fichier à partir d'un formulaire
    Par seb59dk dans le forum Access
    Réponses: 3
    Dernier message: 06/09/2005, 16h52

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