Chargement d'une Listbox dans Acess 365 depuis un classeur Excel

Bernard1815 Messages postés 1 Date d'inscription vendredi 20 novembre 2020 Statut Membre Dernière intervention 20 novembre 2020 - Modifié le 20 nov. 2020 à 17:53
vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 - 21 nov. 2020 à 13:10
Bonjour,

Je Charge une Listbox d'un formulaire dans Acess 365 depuis un classeur Excel.
Bien que ma boucle exploite toutes les lignes de mon classeur, la listbox est chargée partiellement (J'ai 681 lignes dans mon classeur et je n'en charge que 462)
Print.debug m'indique bien que j'ai déroulé toutes les lignes du classeur.

Sub ImportFichier()
    Dim xlApp As Variant, xlBook As Variant, xlsht As Variant
    Dim FichierXL As String, Reponse As String
    Dim LAbonneImporte As String, CheminFichier As String
    Dim Col As Long, Lig As Long, NbLig As Long
    Call ViderLDAbonneImporte
    CheminFichier = CurrentProject.Path
    FichierXL = CheminFichier & "\Abonnés"
    'Création de l'objet Excel (main mise sur !)
    Set xlApp = CreateObject("Excel.Application")
    'Création de l'objet [Fichier Excel]
    Set xlBook = xlApp.Workbooks.Open(FichierXL)
    Set xlsht = xlBook.Worksheets(1)
    Call ViderLDAbonneImporte
    With xlsht
        Lig = 2
        While .Cells(Lig, 2) <> ""
            LAbonneImporte = ""
            For Col = 1 To 12
                LAbonneImporte = LAbonneImporte & .Cells(Lig, Col) & " ; "
            Next Col
            LAbonneImporte = LAbonneImporte & .Cells(Lig, 13)
            'Pour voir si des caractères spéciauc pourraient poluer le chargement
            'xx = 1
            'car = Mid(LAbonneImporte, xx, 1)
            'While car <> ""
            '    car = Mid(LAbonneImporte, xx, 1)
            '    If car <> "" Then
            '        If Asc(car) < 32 Or Asc(car) > 250 Then Stop
            '    End If
            '    xx = xx + 1
            'Wend
            LDAbonneImporte.AddItem Item:=LAbonneImporte
            Debug.Print Lig & " - " & LAbonneImporte
            Lig = Lig + 1
        Wend
        If Lig - 2 <> LDAbonneImporte.ListCount Then
            Reponse = MsgBox("Le nombre de lignes chargée est incorrect" & Chr(10) & "Excel " & Lig - 2 & " - Listbox " & LDAbonneImporte.ListCount, vbCritical)
        End If
    End With
    xlBook.Close SaveChanges:=False
    Set xlBook = Nothing
    Set xlApp = Nothing
End Sub

1 réponse

vb95 Messages postés 3472 Date d'inscription samedi 11 janvier 2014 Statut Contributeur Dernière intervention 13 avril 2024 169
21 nov. 2020 à 13:10
Bonjour
Etes-vous certain qu'aucune ligne n'ait cette cellule vide
While .Cells(Lig, 2) <> ""
avant la fin de votre tableau Excel ?
Pourquoi ne pas utiliser une boucle For Next qui engloberait toutes les lignes de votre tableau Excel à la place du While ?
0
Rejoignez-nous