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 :

Problème avec un code pour remplir une feuille de calcul


Sujet :

Macros et VBA Excel

  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut Problème avec un code pour remplir une feuille de calcul
    Bonjour à toutes et à tous,

    Avec le code ci-dessous, je dois remplir une feuille de calcul qui n'est pas ouverte en premier plan et qui se trouve dans le même répertoire que le fichier maître "Engagements".

    Lorsque je clique sur le bonton "Ok" de mon Userform, plusieurs feuilles se remplissement simultanément de le même manière. Or, les feuilles du fichier "Tiers.xls" ne se remplissent pas et je n'arrive pas à comprendre pourquoi.
    Je vous remercie si vous pouvez m'apporter votre aide.

    Code propre à tous les fichiers qui doivent être ouverts :
    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
     
    Sub TestA()
    Dim wbkRecap As Workbook, wbkBatiprix, wbkTiers
    Dim shtFact As Worksheet, shtRecap As Worksheet, shtBati, shtTiers
    Dim LastLigF As Long, LastLigR As Long
    Dim stFichierComp As String, NumLig As String
    Dim stFichComp As String, NumLign As String
    Dim stFichCompa As String, NumeLign As String
    Dim NewRec As Boolean, Exist As Boolean
    Dim NewRech As Boolean, Existe As Boolean
    Dim NewReche As Boolean, Exista As Boolean
     
    Application.ScreenUpdating = False
    Set shtFact = ThisWorkbook.Sheets("Engagements")
    NumLig = Me.CmbListeCred.Value
    NumLign = Me.CmbMarche.Value
    NumeLign = Me.CmbListeTiers.Value
    stFichierComp = "S:\FACTURES\FACTURES 2011\Recap prest.xls"
    stFichComp = "S:\FACTURES\FACTURES 2011\Batiprix.xls"
    stFichCompa = "S:\FACTURES\FACTURES 2011\Tiers.xls"
    NewRec = False
    NewRech = False
    NewReche = False
    Code pour remplir les feuilles du fichier "Tiers.xls"
    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
     
    If Me.CmbListeTiers.Value <> "" Then 'si la Combo est différent de vide
     
    If Dir(stFichCompa) = "" Then  'Si le fichier Tiers.xls n'existe pas, on le crée
        Workbooks.Add (1)
        NewReche = True
        Set wbkTiers = ActiveWorkbook         'On nomme la première feuille
        Set shtTiers = wbkTiers.ActiveSheet
            shtTiers.Name = NumeLign
            wbkTiers.SaveAs Filename:=stFichCompa
    Else
        Set wbkTiers = Workbooks.Open(stFichCompa)    'Si le fichier Tiers.xls existe
     
        Exista = False
        For Each ws In Worksheets
            If ws.Name = NumeLign Then  'On cherche si la feuille existe
                Set shtTiers = ws
                Exista = True
                Exit For
            End If
        Next ws
        If Not Exista Then
            Set shtTiers = wbkTiers.Sheets.Add(Type:=xlWorksheet) 'Sinon on ajoute une nouvelle feuille
            shtTiers.Name = NumeLign
            NewReche = True
        End If
    End If
        '-------------------------------------------------------------
     
        With shtTiers
            If NewReche Then
            .Range("B3").Value = "N° Engagement" 'sur la ligne 3 on mets les intitulés suivants
            .Range("C3").Value = "N° Devis"
            .Range("D3").Value = "Date"
            .Range("E3").Value = "Montant"
            .Range("F3").Value = "Site"
            .Range("G3").Value = "Objet"
            .Range("F3").Value = "Tiers"
            End If
     
            LastLigR = .Range("B65536").End(xlUp).Row + 1
     
            .Range("B" & LastLigR).Value = shtFact.Range("D" & LastLigF).Value
            .Range("C" & LastLigR).Value = shtFact.Range("E" & LastLigF).Value
            .Range("D" & LastLigR).Value = shtFact.Range("F" & LastLigF).Value
            .Range("E" & LastLigR).Value = shtFact.Range("K" & LastLigF).Value
            .Range("F" & LastLigR).Value = shtFact.Range("I" & LastLigF).Value
            .Range("G" & LastLigR).Value = shtFact.Range("J" & LastLigF).Value
            .Range("H" & LastLigR).Value = shtFact.Range("H" & LastLigF).Value
        End With
     
    wbkTiers.Close savechanges:=True
     
    Set shtFact = Nothing
    Set shtTiers = Nothing
    Set wbkTiers = Nothing
     
    Application.ScreenUpdating = True
    End If
    End If
    End Sub
    En pièces jointes, vous avez la procédure complètes
    Images attachées Images attachées
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  2. #2
    Membre chevronné
    Inscrit en
    Août 2006
    Messages
    1 588
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 1 588
    Points : 2 178
    Points
    2 178
    Par défaut
    Bonsoir,
    Quand tu déclares
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim wbkRecap As Workbook, wbkBatiprix, wbkTiers
    wbkTiers est un variant

    Corrige
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim wbkRecap As Workbook, wbkBatiprix As Workbook, wbkTiers As Workbook

  3. #3
    pgz
    pgz est déconnecté
    Expert éminent Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut
    Bonsoir.

    As-tu vérifié la valeur de CmbListeTiers avec un Debug.Print quand tu cliques le bouton ok?

    Sinon on ne voit que ce que signale Helas, mais ne devrait pas empêcher l'exécution, et quelques approximations comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Workbooks.Add (1)
    Set wbkTiers = ActiveWorkbook
    au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set wbkTiers = Application.Workbooks.Add (1)
    mais qui là encore n'expliquent pas le pb...

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    Comme hélas te l'a fait remarquer, certaines de tes variables sont de type Variant et "shtTiers" est aussi de type Variant alors que tu devrais la typer explicitement ainsi que les autres dailleurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Dim shtFact As Worksheet, shtRecap As Worksheet, shtBati As Worksheet, shtTiers As Worksheet
    J'ai pas testé ton code mais il se peut (pour quelle raison, aucune idée) que le compilateur n'effectue pas correctement la conversion de type. Enfin, à voir ?

    Hervé.

  5. #5
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour à toutes et à tous,

    Merci pour l'aide que vous m'avez apportée, mais malgré toute mon application à retranscrire vos recommandations, cela ne fonctionne toujours pas, du moins pour la partie concernant le remplissage du fichier "Tiers.xls".

    Je vais y réfléchir et si vous avez d'autres idées, je vous en remercie par avance
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  6. #6
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Bonjour,

    nonobstant les remarques pertinentes qui t'on déjà été faites,
    il reste encore ceci à regarder :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        Set wbkTiers = Workbooks.Open(stFichCompa)    'Si le fichier Tiers.xls existe
     
        Exista = False
        For Each ws In Worksheets
            If ws.Name = NumeLign Then  'On cherche si la feuille existe
                Set shtTiers = ws
                Exista = True
                Exit For
            End If
        Next ws
    Dans ce code, tu ne fais pas spécifiquement référence à wbkTiers !! dans ta boucle sur les feuille.


    Ta Feuille contient t'elle qqchose en colonne B ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            LastLigR = .Range("B65536").End(xlUp).Row + 1
    C'est peut-être un peu parano, mais je n'aime pas cette méthode de save forcé implicitement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wbkTiers.Close savechanges:=True
    Pourquoi pas comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wbkTiers.Save
    WbkTiers.close
    Bonne journée.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  7. #7
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour Godzestla,

    Merci pour tes réponses. Cependant il y a une chose que je ne comprends pas, j'ai copié le code déjà existant pour les autres feuilles et qui fonctionnent trés bien, je l'ai transposé au fichier "Tiers.xls".
    Ayant modifié les données afin qu'elles fassent référence au fichier "Tiers" et aux feuilles qu'il contient (en l'occurence 1 seule), celle-ci devrait aussi bien marchée, mais ce n'est pas le cas.

    Dans la colonne "B" de mes feuilles, il n'y a rien si la feuilles n'exsite pas. Par contre à la création de la feuille (dans le cas où elle n'a pas été trouvée), la colonne B doit contenir un numéro (en B3, en-tête de tableau, "N° engagement")
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  8. #8
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Salut Nec14,

    sur base de ceci ou wkbtiers n'est pas préfixé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
        Exista = False
        For Each ws In Worksheets
            If ws.Name = NumeLign Then  'On cherche si la feuille existe
                Set shtTiers = ws
                Exista = True
                Exit For
            End If
        Next ws
    il serait intéressant de vérifier si la feuille en question n'est pas crée dans le fichier où ce code tourne.

    Pour en être certain, tu enlève le sceenupdating à false et tu mets un point d'arrêt par exemple à cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            .Range("B" & LastLigR).Value = shtFact.Range("D" & LastLigF).Value
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  9. #9
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Dans tous les fichiers concernés, les feuilles sont créées si elles n'existent pas, et cela fonctionne bien.

    Dans le fichier "Tiers", rien ne se passe, aucune feuille n'est créé.

    J'ai essayé tes codes, mais aucun effet. Je suis complètement perdu, ça fonctionne ailleurs (dans le même répertoire et des fichiers différents), je sais que je me répète, mais pour celui-ci (le fichier Tiers) il y un os.

    Je vais tout refaire depuis le début pour chacun des fichiers et voir ce que cela va donner.

    Je te tiens informé

    Merci pour ta patience et l'intérêt que tu portes à ma question

    Bien amicalement
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  10. #10
    Membre émérite Avatar de Godzestla
    Homme Profil pro
    Chercheur de bonheur
    Inscrit en
    Août 2007
    Messages
    2 392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chercheur de bonheur
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2007
    Messages : 2 392
    Points : 2 985
    Points
    2 985
    Par défaut
    Essaie le debug comme je te l'ai suggéré ... cela devrait te donner un éclairage car les données sont bien écrites qqpart.

    Enfin, je tenterais cela avant de tout réécrire.
    (\ _ /) Cordialement G@dz
    (='.'=)

    (")-(") Vous avez des neurones. Sollicitez-les. . Si vous êtes aidé, pensez à Voter.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Points : 984
    Points
    984
    Par défaut
    Bonjour,

    J'ai enfin trouvé la solution, j'avais un End If qui n'était pas à sa place et qui arrêtait la procédure avant que celle-ci ne soit complètement terminée.

    Merci à tous pour votre aide précieuse

    Bien amicalement
    René
    J’entends et j’oublie,
    Je vois et je me souviens,
    Je fais et je comprends.
    Confucius

  12. #12
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonsoir,

    D'où la nécessité de bien incrémenter son code afin que chaque instruction soit bien identifiée et surtout, ne pas oublier les commentaires il en vaut mieux trop que pas assez.

    Bonne continuation.

    Hervé.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/08/2010, 14h19
  2. code pour appelé une feuille paramétrée
    Par an.pi dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 31/10/2009, 20h06
  3. problème avec mon code pour accès au serveur ftp
    Par mimi51340 dans le forum Général Java
    Réponses: 1
    Dernier message: 03/03/2008, 23h24
  4. [ImageMagick] Problème dans le code pour redimensionner une image
    Par pierrot10 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 08/06/2007, 14h06
  5. [VBA-E97]Code pour déprotéger une feuille de calcul
    Par blaiso dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/04/2007, 11h30

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