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 :

Import de tableaux de plusieurs feuilles dans une seule


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Import de tableaux de plusieurs feuilles dans une seule
    Bonjour à tous et à chacun,

    Je dispose d'un classeur composé de feuilles de renseignements identiques dans leurs formes et d'une feuille de comparaison.

    Mon objectif est de permettre la lecture d'une même colonne issue de chacune des feuilles de renseignements dans la feuille de comparaison.

    Pour l'instant, je fonctionne sur un mode "copier/coller" de la colonne qui m'intéresse dans la feuille de comparaison.

    J'ai bien essayé d'automatiser cette copie en utilisant les fonctions d'Excel, mais c'est peine perdue. Au mieux, à chaque fois, Excel demande à l'utilisateur des mises à jours...j'aimerai aussi m'en passer.

    J'ai trouvé ce lien:
    http://www.developpez.net/forums/sho...port+donn%E9es,
    qui m'a pas mal éclairé.

    Mais dans mon cas, je souhaiterai permettre à l'utilisateur de "nommer" les feuilles qu'il souhaite comparer.

    Afin d'être plus clair, paraphrasons Napoléon 1: "Mieux vaut une PJ bien commentée plutôt qu'un long discour."

    Merci de vos conseils et /ou idées de génies.

    Je m'attèle dès maintenant à l'adaptation du code fourni en fin de discu jointe, à mes besoins.

    Cordialement,
    Jibicas
    Fichiers attachés Fichiers attachés

  2. #2
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Enfin du code adapté
    Salut à tous,

    Après une semaine si chargée que je n'ai pu m'atteler à mon ouvrage,
    je reviens vers vous pour vous montrer ce que j'ai "pondu" comme code.

    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
     
    Sub Transfert()
     
    Dim fl1 As Worksheet
    'Nom feuille de données.
    Dim fl2 As Worksheet
    'Nom feuille de récap.
    Set fl2 = Worksheets("Recap")
    Set fl1 = Worksheets(fl2.Cells(4, 5).Value)
     
    For J = 0 To 6
        For I = 0 To 4
            fl2.Cells(J + 8, I + 11).Value = fl1.Cells(J + 2, 2).Value
            'fl1 = Worksheets(fl2.Cells(J + 4, I + 5).Value)
            I = I + 1
        Next I
    Next J
    End Sub
    Certes, ce n'est sans doute pas la panacée et je suis ouvert à tous les commentaires constructifs, mais surtout, au milieu de ma boucle, une partie du code est en commentaire...

    J'ai donc le souci suivant: "Comment réussir à donner une nouvelle valeur à ma variable fl1?"...

    Je vous joins à nouveau mes tableaux modifiés.

    Merci d'avance,
    Jibicas
    Fichiers attachés Fichiers attachés

  3. #3
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Bonjour,

    Ci-joint une piste à peaufiner pour la mise page et la longueur et l'adresse des plages à copier dans la feuille Recap

    Pièce jointe 28207

  4. #4
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Remerciements...et autres questions!
    Merci Fring,

    Je m'approprie tout ça, je me le "cogite" et je posterai au moindre souci.


    Edit 1:

    Fring, je ne comprends pas la signification exacte de:
    Mais j'ai su apprivoiser ton code pour qu'il me retrourne ce que j'en attends.


    Edit 2:

    Une deuxième question me tarabuste...:"Comment as tu créé ce bouton?"
    Je n'ai appris qu'à passer par des "userform" et là... mystère!


    Merci de méclairer à nouveau.


    Edit 3:

    C'est bon, j'ai pigé la création du bouton!

    Par contre la copie ne me plait plus.
    En effet, j'ai l'impression que:
    Range(...).copy ne copie que les "formules" et non pas les valeurs des cellules

    Jibicas

  5. #5
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Un souci de copie
    Voilà,

    Après de multiple "Edit" je me dis qu'en reformulant et en repostant quelque chose de clair, l'un ou l'une d'entre vous aura peut être une idée ou un conseil pour moi.

    Comme vous vous en rendrez compte si vous ouvrez le fichier joint, j'ai retravaillé le code fourni par Fring, (merci à lui ) mais je "bute" sur un problème de copie.

    Lorsque les cellules que je cherche à copier dans mes feuilles font elles même référence à d'autres cellules de cette feuille, il me retourne 0 en fiche récapitulative.

    Joie! Il conserve cependant la "mise en forme" des cellules de départ.


    Je me doute que mon ".copy" dans mon code n'est pas bon, mais par quoi puis je le remplacer ?


    Merci de votre aide,
    Jibicas
    Fichiers attachés Fichiers attachés

  6. #6
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Alors..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(3, 5).End(xlDown).Row
    signification :
    • Cells(3, 5) --> on démarre de la cellule E3
    • End(xlDown) --> on descend et on cherche la dernière cellule non vide
    • Row --> on récupère le numéro de ligne de la cellule trouvée


    Concernant le problème de copie des valeurs, essaye ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            Set FL2 = Worksheets(Cells(i, Col).Text)
            'Cells(3, i + 3 + j) = FL2.Name 'en commententaire parceque pas essentiel
            FL2.Range("B2:B7").Copy
            FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
            j = j + 1 'petit test de mise en forme perso

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Merci.
    Merci Fring!

    Une fois de plus, ça marche et c'est que du bonheur.

    Deux questions toutefois:

    Je me rappelle que lorsque j'ai appris le VBA sous ArcGIS, il y avait une sorte de "table des fonctions existantes" sous arcgis pour permettre de développer de nouveaux outils.
    C'était un fichier PDF assez "lourd" mais exhaustif.

    Existe t il un fichier-listing, similaire sous Excel?


    Ma deuxième question concerne le bouton présent dans la feuille.
    Existe t il une fonction dans ce gout là: "CommandButton1.Visible" qui me permette de rendre visible (ou invisible) et donc utilisable (réciproquement inutilisable) ce bouton?

    Merci de tes réponses.

    Jibicas

  8. #8
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Citation Envoyé par Jibicas Voir le message
    Je me rappelle que lorsque j'ai appris le VBA sous ArcGIS, il y avait une sorte de "table des fonctions existantes" sous arcgis pour permettre de développer de nouveaux outils.
    C'était un fichier PDF assez "lourd" mais exhaustif.

    Existe t il un fichier-listing, similaire sous Excel?
    Aucune idée, perso je n'en ai jamais vu mais DVP regorge de tuto's et faq's en tous genres, en fouillant un peu tu trouveras sans doute pas mal de réponses à tes questions

    Citation Envoyé par Jibicas Voir le message
    Ma deuxième question concerne le bouton présent dans la feuille.
    Existe t il une fonction dans ce gout là: "CommandButton1.Visible" qui me permette de rendre visible (ou invisible) et donc utilisable (réciproquement inutilisable) ce bouton?
    oui c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ActiveSheet.Shapes("CommandButton1").Visible = False 'pour le rendre invisible
    'True pour le rendre visible
    Pour modifier les propriétés de ce bouton (texte, couleur, taille, position, etc...), via la barre d'outils Visual Basic, tu clic sur le bouton "Mode Création".
    Une fois le mode création activé, clic droit sur le bouton --> propriétés
    Ne pas oublier de désactiver le mode création lorsque tu as terminé les modif's

  9. #9
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut problème de "scan" des onglets du classeur actif
    Merci Fring de tes réponses,

    Je "m'enrichis" chaque minute passé sur ce forum.

    Je reviens vers vous pour vous présenter mon code applicable à la dernière PJ envoyée.

    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
    65
    66
    67
    68
    69
    Public Sub importer()
     
    Dim compteur As Long
    Dim i As Long, j As Long, k As Long, l As Long, Col As Byte
    Dim CL As Workbook
    Dim FL As Worksheet, FL1 As Worksheet, FL2 As Worksheet
     
    Set FL1 = Worksheets("Recap")
     
    Col = 5 'numéro de la colonne où son pris les noms
    j = 0
    k = 0
    l = 0
     
    'Je crée une boucle compteur sur l'ensemble de mon tableau qui le parcourera en recherchant le nombre de cellules "vides" et "pleines".
    For compteur = 4 To 11 'FL1.Cells(3, Col).End(xlDown).Row 'retiré car ne me permet pas de "blinder" la macro...a savoir permettre le calcul sans faire bugger la macro malgrès des erreurs de remplissage.
        If Cells(compteur, Col).Text <> "" Then
            k = k + 1
        Else
            l = l + 1
        End If
    Next compteur
     
    'Ici, la boucle va me permettre de remplir mon tableau récapitulatif en évitant les bugs d'écriture dans le tableau
    For i = 4 To 11
        If k = 8 Then 'valeurs de (11-4..."+1") on compte en incluant la ligne 4
            Set FL2 = Worksheets(Cells(i, Col).Text)
            FL2.Range("B2:B7").Copy
            FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
            j = j + 1
        Else
            If l = 8 Then
                MsgBox ("Merci de remplir le tableau avant d'importer.")
                Exit Sub
            Else
                'Là, je vais chercher à comparer chacune des valeurs écrites par l'utilisateur à chacun des noms des onglets existant.
                If Cells(i, Col).Text <> "" Then
                    If Cells(i, Col).Text = "Recap" Then
                        MsgBox ("Vous ne pouvez importer la fiche récapitulative.")
                        j = j - 1
                    Else
                    For Each FL In CL.Worksheets 'Là, ça bug! pas moyen de trouver le terme ad hoc.
                        If Cells(i, Col).Text <> FL.Name Then
                            MsgBox ("Il y a une erreur d'orthographe dans le nom de l'onglet que vous souhaitez importer")
                            j = j - 1
                        Else
                            Set FL2 = Worksheets(Cells(i, Col).Text)
                            FL2.Range("B2:B7").Copy
                            FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
                            j = j + 1
                            k = k - 1
                        End If
                    Next FL
                    End If
                Else
                    If (Cells(i, Col).Text = "" And k = 0) Then
                        Exit Sub
                    Else
                        If Cells(i, Col).Text = "" Then
                        j = j - 1
                        Else
                        End If
                    End If
                End If
            End If
        End If
    Next i
     
    End Sub
    Bon, y'en a une tartine, et ça bug à l'endroit commenté...
    Auriez vous donc une idée pour me "débloquer".
    Comme vous l'aurez compris, il s'agit de récupérer le nom de toutes les feuilles du classeur actif et de les comparer (une par une) avec ce que l'utilisateur a "saisi" pour chaque "case" du tableau de saisi.

    J'imagine bien volontiers que ce code peut être simplifié, je suis ouvert à toutes idée constructive sur le sujet.


    Nota: je me lancerai dans l'apparition, disparition du bouton quand le reste fonctionnera.


    Merci de votre aide,

    Jibicas

  10. #10
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Essaye comme ceci (pas testé)
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Public Sub importer()
     
    Dim compteur As Long
    Dim i As Long, j As Long, k As Long, l As Long, Col As Byte
    Dim FL1 As Worksheet, FL2 As Worksheet
    Dim x As Integer, Correct As Boolean
     
    Correct = False
     
    Set FL1 = Worksheets("Recap")
     
    Col = 5 'numéro de la colonne où son pris les noms
    j = 0
    k = 0
    l = 0
     
    'Je crée une boucle compteur sur l'ensemble de mon tableau qui le parcourera en recherchant le nombre de cellules "vides" et "pleines".
    For compteur = 4 To 11 'FL1.Cells(3, Col).End(xlDown).Row 'retiré car ne me permet pas de "blinder" la macro...a savoir permettre le calcul sans faire bugger la macro malgrès des erreurs de remplissage.
        If Cells(compteur, Col).Text <> "" Then
            k = k + 1
        Else
            l = l + 1
        End If
    Next compteur
     
    'Ici, la boucle va me permettre de remplir mon tableau récapitulatif en évitant les bugs d'écriture dans le tableau
    For i = 4 To 11
        If k = 8 Then 'valeurs de (11-4..."+1") on compte en incluant la ligne 4
            Set FL2 = Worksheets(Cells(i, Col).Text)
            FL2.Range("B2:B7").Copy
            FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
            j = j + 1
        Else
            If l = 8 Then
                MsgBox ("Merci de remplir le tableau avant d'importer.")
                Exit Sub
            Else
                'Là, je vais chercher à comparer chacune des valeurs écrites par l'utilisateur à chacun des noms des onglets existant.
                If Cells(i, Col).Text <> "" Then
                    If Cells(i, Col).Text = "Recap" Then
                        MsgBox ("Vous ne pouvez importer la fiche récapitulative.")
                        j = j - 1
                    Else
     
                    For x = 1 To Sheets.Count
                        If Sheets(x).Name = FL1.Cells(i, Col).Text Then
                            Correct = True
                            Exit For
                       End If
                    Next x
     
                        If Correct = False Then
                            MsgBox ("Il y a une erreur d'orthographe dans le nom de l'onglet que vous souhaitez importer")
                            j = j - 1
                        Else
                            Set FL2 = Worksheets(Cells(i, Col).Text)
                            FL2.Range("B2:B7").Copy
                            FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
                            j = j + 1
                            k = k - 1
                        End If
                    End If
                Else
                    If (Cells(i, Col).Text = "" And k = 0) Then
                        Exit Sub
                    Else
                        If Cells(i, Col).Text = "" Then
                        j = j - 1
                        Else
                        End If
                    End If
                End If
            End If
        End If
    Next i
     
    End Sub

  11. #11
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Super et merci,

    Je test "de-suite".

    Edit 1:

    Ouaich, hé bien pour ce que j'en vois, ça m'a pas l'air si mal, je vais me l'adapter maintenant.
    Tu m'as donné l'idée du "sheet(x).Name" merci.

  12. #12
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Tadaaa!
    Bonjour à tous et à chacun,

    Fring, j'ai remarqué une "erreur" assez cocasse qui survenaient si l'on oubliait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Else
    Correct = False
    End If
    dans:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    For x = 1 To Sheets.Count
    If Sheets(x).Name = Cells(i, Col).Text Then
    Correct = True
    Exit For
    End If
    Next x
    La "routine" considère dans le cas où l'on a dans le tableau d'import:
    Une assertion vraie
    suivie d' autre fausse
    que cette dernière est toujours vraie.

    Pour s'en rendre compte, insérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'MsgBox (Cells(i, Col).Text)
    Ici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    If Correct = False Then
    MsgBox ("Il y a une erreur d'orthographe dans le nom de la feuille: " & Cells(i, Col).Text & ", dont vous souhaitez importer les valeurs")
    j = j - 1
    k = k - 1
    Else
    'MsgBox (Cells(i, Col).Text)
    Set FL2 = Worksheets(Cells(i, Col).Text)
    FL2.Range("B2:B7").Copy
    FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
    j = j + 1
    k = k - 1
    End If
    Comme eut dit le regretté P Desproges: "Etonnant, Non?"

    Sinon, pour ceux qui suivent le "feuilleton", voici ce que j'ai pondu avec le soutien de Fring (Grand merci à lui: ) et qui "marche":
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    Option Explicit
    Public Sub importer()
     
    Dim compteur As Integer, x As Integer
    Dim i As Long, j As Long, k As Long, l As Long
    Dim Col As Byte
    Dim Correct As Boolean
    Dim FL1 As Worksheet, FL2 As Worksheet
     
    Set FL1 = Worksheets("Recap")
    Correct = False
     
    Col = 5 'numéro de la colonne où son pris les noms
    j = 0
    k = 0
    l = 0
     
    'Je crée une boucle compteur sur l'ensemble de mon tableau qui le parcourera en recherchant le nombre de cellules "vides" et "pleines".
    For compteur = 4 To 11 'FL1.Cells(3, Col).End(xlDown).Row 'retiré car ne me permet pas de "blinder" la macro...a savoir permettre le calcul sans faire bugger la macro malgrès des erreurs de remplissage.
        If Cells(compteur, Col).Text <> "" Then
            k = k + 1
        Else
            l = l + 1
        End If
    Next compteur
     
    'Ici, la boucle va me permettre de remplir mon tableau récapitulatif en évitant les bugs d'écriture dans le tableau
    For i = 4 To 11
        If k = 8 Then 'valeurs de (11-4..."+1") on compte en incluant la ligne 4
            For x = 1 To Sheets.Count 'Là, je vais chercher à comparer chacune des valeurs écrites par l'utilisateur à chacun des noms des onglets existant.
                If Sheets(x).Name = Cells(i, Col).Text Then
                    Correct = True
                    Exit For
                Else
                    Correct = False
                End If
            Next x
            If Correct = False Then
                MsgBox ("Il y a une erreur d'orthographe dans le nom de la feuille: " & Cells(i, Col).Text & ", dont vous souhaitez importer les valeurs")
                j = j - 1
                k = k - 1
            Else
                Set FL2 = Worksheets(Cells(i, Col).Text)
                FL2.Range("B2:B7").Copy
                FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
                j = j + 1
                k = k - 1
            End If
        Else
            If l = 8 Then
                MsgBox ("Merci de remplir le tableau avant d'importer.")
                Exit Sub
            Else
                'Là, je vais chercher aussi à comparer chacune des valeurs écrites par l'utilisateur à chacun des noms des onglets existant.
                If Cells(i, Col).Text <> "" Then
                    For x = 1 To Sheets.Count
                        If Sheets(x).Name = Cells(i, Col).Text Then
                            Correct = True
                            Exit For
                        Else
                            Correct = False
                        End If
                    Next x
                    If Correct = False Then
                        MsgBox ("Il y a une erreur d'orthographe dans le nom de la feuille: " & Cells(i, Col).Text & ", dont vous souhaitez importer les valeurs")
                        j = j - 1
                        k = k - 1
                    Else
                        Set FL2 = Worksheets(Cells(i, Col).Text)
                        FL2.Range("B2:B7").Copy
                        FL1.Cells(5, i + 3 + j).PasteSpecial Paste:=xlValues
                        j = j + 1
                        k = k - 1
                    End If
                Else
                    If Cells(i, Col).Text = "Recap" Then
                        MsgBox ("Vous ne pouvez importer la fiche récapitulative.")
                        j = j - 1
                    Else
                        If (Cells(i, Col).Text = "" And k = 0) Then
                            Exit Sub
                        Else
                            If Cells(i, Col).Text = "" Then
                            MsgBox ("Merci de remplir le tableau d'import sans laisser de cellules vides.")
                            j = j - 1
                            Else
                            End If
                        End If
                    End If
                End If
            End If
        End If
    Next i
     
    End Sub
    Je m'attelle donc dès maintenant à l'apparition disparition du bouton en fonction du remplissage du tableau.

    Encore merci et à plus tard pour la suite.


    Jibicas

  13. #13
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Re,

    Je ne comprend pas comment tu peux avoir une assertion vraie suivit d'une fausse ?

    La variable "Correct" est fixée à "False" en début de procédure, on parcourt les noms des feuilles, si un des noms correspond à la valeur de la cellule, "Correct" bascule à "True" et on sort de la boucle, sinon "Correct" reste à "False". Comment peux-tu avoir deux assertions qui se suivent ?

  14. #14
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut Ha! Flûte!
    Re,

    Escuse moi, j'ai du mal m'exprimer.

    Si tu test l'exemple qui suit avec ton code ou avec celui fournis ci-dessus en enlevant le bout de code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Else
    Correct = False
    End If
    que j'ai rajouté, il va planter et te dire:
    'erreur d'exécution 9

    L'indice n'appartient pas à la sélection'

    Et te surlignera la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Set FL2 = Worksheets(Cells(i, Col).Text)
    qui suis la boucle sur "Correct".

    Si tu cherche le "bug" en intégrant à ton code des MsgBox, tu verras que la source du problème provient du "changement d'état" de "Correct", contre toute attente et aussi étrange que cela paraisse.

    J'ai pas mal bloqué dessus et je pense que cela peux provenir de:
    , qui suit: Comme si Exit "validait" la dernière valeur prise par correct.


    Voilà, en espérant avoir été plus clair.


    Jibicas

    PS: voici l'exemple:

    1 ère cellule: Vide
    2ème cellule:Feuil1
    3ème cellule:Feuil
    4ème cellule:Feuil
    5ème cellule:vide
    6ème cellule:Feuil
    7ème cellule:Feuil2
    8ème cellule:vide

    où "Feuil" ne correspond donc à rien d'existant, tandis que Feuil1 et Feuil2 existent et sont renseignées.

  15. #15
    Expert éminent
    Avatar de fring
    Homme Profil pro
    Engineering
    Inscrit en
    Février 2008
    Messages
    3 900
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Engineering

    Informations forums :
    Inscription : Février 2008
    Messages : 3 900
    Points : 7 964
    Points
    7 964
    Par défaut
    Le problème doit venir d'ailleurs, j'ai testé uniquement la petite boucle qui vérifie si la feuille existe et il n'y a pas de problème.
    Correct passe bien à False ou à True quand il le faut et ce sans ajouter Else...

    Bizarre, Bizarre...

  16. #16
    Futur Membre du Club
    Inscrit en
    Mars 2008
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 23
    Points : 9
    Points
    9
    Par défaut
    Ach! oui.

    Je ne l'ai pas testé séparément...

    J'ai donc un bug "sournois" caché dans mon code.

    Bon, hé bien, je m'y attèle dès que j'aurai 5 minutes (ou plusieurs heures) devant moi.

    Merci Fring, merci Forum.

Discussions similaires

  1. [XL-2010] Importer des données de plusieurs fichiers dans une feuille excel en VBA
    Par Alibel dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/10/2013, 15h16
  2. [XL-2003] Copier plusieurs feuilles dans une seule
    Par RussellD dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/09/2010, 15h20
  3. [XL-2007] Créer une boucle pour copie des tableaux de plusieurs feuilles sur une seule
    Par rvtoulon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/09/2009, 17h12
  4. Récapitulatif de plusieurs feuilles dans une seule
    Par Elumastebit dans le forum Macros et VBA Excel
    Réponses: 23
    Dernier message: 04/12/2008, 19h11
  5. import de données de plusieurs feuilles dans une seule
    Par naevus dans le forum Macros et VBA Excel
    Réponses: 13
    Dernier message: 10/01/2008, 13h32

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