Qualificateur incorrect

Résolu
Bonjour,

Je suis en train de plancher (grâce à l'aide de quelque uns d'entre vous) sur une macro assez fastidieurse et à mon grand regret je tombe sur une erreur que je ne connaissais pas "qualificateur incorrect" à cette ligne de code :

Do While Not (IsEmpty(shSUIVI).Cells(j, 2))

Y voyez vous une erreur de synthaxe ou autre ?

Vous trouverez le lien de la macro ci-dessous :

https://www.cjoint.com/?CJjpuFuM4H3

Merci d'avance pour votre aide.

29 réponses

Résumé de la discussion

Une erreur 'qualificateur incorrect' survient sur la ligne Do While Not (IsEmpty(shSUIVI).Cells(j, 2)) dans une macro Excel VBA qui lit des données dans le tableau de suivi. Les réponses les plus pertinentes recommandent de partager le code complet et les fichiers utilisés, et de vérifier le chemin du fichier source ainsi que la déclaration de NomFichier pour éviter des valeurs vides. D'autres précisent d'examiner les boucles Do While et la cohérence des références entre les classeurs, notamment la variable NomFichier publique et les chemins dans la fonction RechercheFichier. Une précision utile indique aussi que des erreurs de noms de colonnes ou de dossiers manquants dans Suivi D2 peuvent bloquer la progression et nécessiter une correction des références utilisées dans le code.

Bobot (l’IA à votre service)
  1. Re Bonjour Tom 44

    cela devrait aller:

    Do While Not IsEmpty(shSUIVI.Cells(j, 2))

    mais,

    With NomFichier -----> la cela ne cadre pas, parce que NomFicher n'est pas declare en variable Public ou Global,donc sauf erreur de ma part NomFichier dans ce module de code est vide et si vous declarez cette variable public, vous avez le chemin et le nom du fichier

    A+
    0
    1. Rebonjour,

      Comme vous l'aurez compris votre macro d'ouverture fonctionne à merveille, mais je ne parvients pas à définir ce fichier comme la source de mes données dans ma première boucle ...

      Auriez vous là aussi une manière de me dépanner ?
      0
      1. Re,

        Oui. Je regarde la chose.

        Worksheets("sites") est un onglet du fichier xls ouvert apres recherche ???

        A+
        0
        1. Oui tout à fait.
          C'est d'ailleurs le seul onglet du classeur.

          Cdt,
          0
          1. Re,

            code modifier:

            Public NomFichier As String
            Public Rep_Fichier

            Sub MAJ_OPTIMUM()
            '
            ' MAJ_Suivi_D2 Macro
            ' Mise à jour des donnée OPTIMUM
            '
            Dim Dossier As String
            Dim Id_PM, Etat_PM, Id_PA, Etat_PA, Id_Process, Num, Num_cplt, Voie, Adresse, Batiment, Etat_Nego, Nb_logt, logt_R, logt_P, Annee_prog, typo, Envoi_acces, Valid_acces, Id_PB, Date_PB, Code_syndic, Nom_syndic, DTA, Nego_int, Envoi_accord, Retour_accord, Refus_accord, Date_recep_PETU, Date_valid_PETU, Date_accord As Variant
            Dim i, j As Integer
            Dim trouve As Boolean
            Dim shSUIVI As Worksheet

            Set shSUIVI = Workbooks("Export site lot2 LE MANS.xlsm").Worksheets("Suivi D2")

            Call MaProcedure
            'recuperation nom du fichier sans le chemin
            NomFichier = Right(NomFichier, Len(NomFichier) - Len(Rep_Fichier))

            With Workbooks(NomFichier).Worksheets("sites")

            i = 10
            Do While Not (IsEmpty(.Cells(i, 1)))

            Dossier = .Cells(i, 1)

            Id_PM = .Cells(i, 6).Value
            Etat_PM = .Cells(i, 9).Value
            Id_PA = .Cells(i, 14).Value
            Etat_PM = .Cells(i, 15).Value
            Id_Process = .Cells(i, 16).Value
            Num = .Cells(i, 23).Value
            Num_cplt = .Cells(i, 24).Value
            Voie = .Cells(i, 25).Value
            Adresse = .Cells(i, 26).Value
            Batiment = .Cells(i, 27).Value
            Etat_Nego = .Cells(i, 33).Value
            Nb_logt = .Cells(i, 46).Value
            logt_R = .Cells(i, 47).Value
            logt_P = .Cells(i, 48).Value
            Annee_prog = .Cells(i, 58).Value
            typo = .Cells(i, 39).Value
            Envoi_acces = .Cells(i, 64).Value
            Valid_acces = .Cells(i, 65).Value
            Id_PB = .Cells(i, 115).Value
            Date_PB = .Cells(i, 116).Value
            Code_syndic = .Cells(i, 121).Value
            Nom_syndic = .Cells(i, 122).Value
            DTA = .Cells(i, 123).Value
            Nego_int = .Cells(i, 130).Value
            Envoi_accord = .Cells(i, 136).Value
            Retour_accord = .Cells(i, 137).Value
            Refus_accord = .Cells(i, 138).Value
            Date_recep_PETU = .Cells(i, 143).Value
            Date_valid_PETU = .Cells(i, 147).Value
            Date_accord = .Cells(i, 150).Value

            trouve = False

            Workbooks("Export site lot2 LE MANS.xlsm").Worksheets("Suivi D2").Activate

            j = 10
            Do While Not IsEmpty(shSUIVI.Cells(j, 2))

            If shSUIVI.Cells(j, 2) = Dossier Then

            If Not IsNull(Id_PM) Or Id_PM <> "" Then
            shSUIVI.Cells(j, 2) = Id_PM
            End If
            If Not IsNull(Etat_PM) Or Etat_PM <> "" Then
            shSUIVI.Cells(j, 2) = Etat_PM
            End If
            If Not IsNull(Id_PA) Or Id_PA <> "" Then
            shSUIVI.Cells(j, 2) = Id_PA
            End If
            If Not IsNull(Etat_PM) Or Etat_PM <> "" Then
            shSUIVI.Cells(j, 2) = Etat_PM
            End If
            If Not IsNull(Id_Process) Or Id_Process <> "" Then
            shSUIVI.Cells(j, 2) = Id_Process
            End If
            If Not IsNull(Num) Or Num <> "" Then
            shSUIVI.Cells(j, 2) = Num
            End If
            If Not IsNull(Num_cplt) Or Num_cplt <> "" Then
            shSUIVI.Cells(j, 2) = Num_cplt
            End If
            If Not IsNull(Voie) Or Voie <> "" Then
            shSUIVI.Cells(j, 2) = Voie
            End If
            If Not IsNull(Adresse) Or Adresse <> "" Then
            shSUIVI.Cells(j, 2) = Adresse
            End If
            If Not IsNull(Batiment) Or Batiment <> "" Then
            shSUIVI.Cells(j, 2) = Batiment
            End If
            If Not IsNull(Etat_Nego) Or Etat_Nego <> "" Then
            shSUIVI.Cells(j, 2) = Etat_Nego
            End If
            If Not IsNull(Nb_logt) Or Nb_logt <> "" Then
            shSUIVI.Cells(j, 2) = Nb_logt
            End If
            If Not IsNull(logt_R) Or logt_R <> "" Then
            shSUIVI.Cells(j, 2) = logt_R
            End If
            If Not IsNull(logt_P) Or logt_P <> "" Then
            shSUIVI.Cells(j, 2) = logt_P
            End If
            If Not IsNull(Annee_prog) Or Annee_prog <> "" Then
            shSUIVI.Cells(j, 2) = Annee_prog
            End If
            If Not IsNull(typo) Or typo <> "" Then
            shSUIVI.Cells(j, 2) = typo
            End If
            If Not IsNull(Envoi_acces) Or Envoi_acces <> "" Then
            shSUIVI.Cells(j, 2) = Envoi_acces
            End If
            If Not IsNull(Valid_acces) Or Valid_acces <> "" Then
            shSUIVI.Cells(j, 2) = Valid_acces
            End If
            If Not IsNull(Id_PB) Or Id_PB <> "" Then
            shSUIVI.Cells(j, 2) = Id_PB
            End If
            If Not IsNull(Date_PB) Or Date_PB <> "" Then
            shSUIVI.Cells(j, 2) = Date_PB
            End If
            If Not IsNull(Code_syndic) Or Code_syndic <> "" Then
            shSUIVI.Cells(j, 2) = Code_syndic
            End If
            If Not IsNull(Nom_syndic) Or Nom_syndic <> "" Then
            shSUIVI.Cells(j, 2) = Nom_syndic
            End If
            If Not IsNull(DTA) Or DTA <> "" Then
            shSUIVI.Cells(j, 2) = DTA
            End If
            If Not IsNull(Nego_int) Or Nego_int <> "" Then
            shSUIVI.Cells(j, 2) = Nego_int
            End If
            If Not IsNull(Envoi_accord) Or Envoi_accord <> "" Then
            shSUIVI.Cells(j, 2) = Envoi_accord
            End If
            If Not IsNull(Retour_accord) Or Retour_accord <> "" Then
            shSUIVI.Cells(j, 2) = Retour_accord
            End If
            If Not IsNull(Refus_accord) Or Refus_accord <> "" Then
            shSUIVI.Cells(j, 2) = Refus_accord
            End If
            If Not IsNull(Date_recep_PETU) Or Date_recep_PETU <> "" Then
            shSUIVI.Cells(j, 2) = Date_recep_PETU
            End If
            If Not IsNull(Date_valid_PETU) Or Date_valid_PETU <> "" Then
            shSUIVI.Cells(j, 2) = Date_valid_PETU
            End If
            If Not IsNull(Date_accord) Or Date_accord <> "" Then
            shSUIVI.Cells(j, 2) = Date_accord
            End If

            GoTo debut
            trouve = True
            End If
            j = j + 1
            Loop

            debut:
            'Next i
            i = i + 1
            Loop
            End With
            MsgBox "MAJ Terminée", vbOKOnly
            End Sub

            Sub MaProcedure()

            NomFichier = RechercheFichier()
            If NomFichier = "" Then
            MsgBox "Vous n'avez sélectionné aucun fichier"
            Else
            Workbooks.Open NomFichier
            End If
            End Sub

            Function RechercheFichier() As String
            Dim fd As FileDialog
            Dim NomFichier As String
            Set fd = Application.FileDialog(msoFileDialogFilePicker)
            With fd
            .Filters.Add "fichier xls", "*.xls"
            .Title = "Recherche de fichier" 'mettre le chemin du repertoire
            .InitialFileName = "d:\_cles\" '"Bureau\"
            'repertoire fichier
            Rep_Fichier = .InitialFileName
            End With
            If fd.Show = -1 Then NomFichier = fd.SelectedItems(1)
            RechercheFichier = NomFichier
            End Function


            A+
            0
            1. Bonjour,

              Encore un grand merci pour ton aide.

              Cependant je viens de le tester et je me retrouve avec une erreur d'execution '9'

              L'indice n'appartient pas à la selection

              With Workbooks(NomFichier).Worksheets("sites")

              Auriez vous une petite idée sur la question ?

              En vous remerciant par avance.
              0
              1. J'ai l'impression qu'à la fin de la deuxième boucle, le code ne parvient pas à revenir au classeur source...

                Tout le code est il à reprendre ?

                Merci pour vos réponses.
                0
                1. Bonjour,

                  With Workbooks(NomFichier).Worksheets("sites")
                  quand vous avez l'erreur, quel est le contenu de NomFichier ??
                  0
                  1. Le contenu ne varie pas d'un passage de boucle à l'autre.
                    NomFichier est censé récupérer le nom du fichier source défini par la recherche de fichier initiale.
                    Mais j'ai la forte impression qu'une fois passé un tour de boucle, le NomFichier n'est plus du tout reconnu.
                    0
                    1. Re,

                      Mais j'ai la forte impression qu'une fois passé un tour de boucle, le NomFichier n'est plus du tout reconnu. Repondez a la question, NomFichier contient-il le nom du fichier attendu ????
                      0
                      1. "NomFichier" contient le nom du fichier source avec son extension .xls
                        0
                        1. Re,

                          Il faut montrer votre code entier, pour comprendre.

                          A+
                          0
                          1. Merci pour la tentative.
                            Malheureusement infructueuse : en effet la seconde boucle ne retrouve plus sa condition "Do"...

                            J'essayerai de vous fournir les 2 fichiers concernés par soucis de facilité de codage...
                            0
                            1. Re,

                              En effet, vos fichiers serons bienvenus, car je peux difficilement tester les boucles do et je ne comprends pas vraiment votre facon de faire!!!

                              A+
                              0
                              1. Bonjour,

                                Désolé pour le temps sans réponse (fin de semaine chargée...) Y a pas de lezards. Je recupere vos fichiers et vous tiens au courant.

                                A+
                                0
                                1. Re,

                                  Une ligne en trop dans Function RechercheFichier() As String:
                                  Dim NomFichier As String (sorry, j'ai oublie de l'enlever dans le code que je vous ai donne)

                                  Vous pouvez nous rappeler ce que vous esperez faire avec votre macro MAJ_OPTIMUM() !!!!!

                                  Si c'est une mise a jour de Suivi_D2, cela risque d'etre un peu long avec votre facon de proceder d'ou ce que j'avais ecrit : je ne comprends pas vraiment votre facon de faire!!!

                                  A+
                                  0
                                  1. Bonjour,

                                    Le but de la macro est en 2 phases :

                                    1° Permettre à l'utilisateur d'ouvrir un fichier de données source.

                                    Cette partie de lamacro fonctionne très bien grâce à vous.

                                    2° La macro doit récupérer les informations du fichier source et les transposer dans le fichier cible en se référant aux codes IMB présents dans les 2 fichiers :

                                    Colonne A (Fichier source)
                                    Colonne B (Fichier cible)

                                    J'avais donc commencer par désigner les colonnes de données à récupérer dans le fichier source par une 1ère boucle Do While, puis désigner de la même façon les colonnes cibles du second fichier avec une 2ème boucle Do While.

                                    Mais depuis la MAJ de la macro, la première boucle ne fonctionne plus...

                                    Je suis bien conscient que cette méthode n'est pas la plus rapide (surtout lors de l'execution de la macro), mais devrait tout de même fonctionner. Enfin je crois...
                                    0
                                    • 1
                                    • 2