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 :

Formulaire lecture fichier Excel


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Par défaut Formulaire lecture fichier Excel
    Bonjour le forum,

    Je viens de créer un formulaire nommé UserFormTicket. Ce formulaire utilise un fichier excel dans lequel j'ai des valeurs dans une seule colonne (colonne A).

    Je veux lire la dernière ligne de ma colonne et le déposer dans un textbox. Malheureusement à chaque "nouvelle" exécution lors du 1er lancement il ne me ressort aucune valeur, à partir de la deuxième exécution aucun problème. Et je ne vois pas d'où vient mon erreur. Si quelqu'un peut me renseigner....

    Ci dessous mon 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
    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
     
    Sub generer_ticket()
     
        Dim oApp As Object      'permet d'instancier un fichier excel
        Dim workbookExcel As Object     'permet d'instancier un classeur excel
        Dim sheetExcel As Object        'permet d'instancier une feuille excel
        Dim cheminExcel As String
        Dim i As Integer
        Dim dernierTicket As String
        Dim nouveauTicket As String
     
        cheminExcel = "C:\Test\numeroTicket.xls"
    '============================================
    '===== INSTANCIATION DES OBJETS EXCEL =======
    '=====  + OUVERTURE DU FICHIER EXCEL  =======
    '============================================
        Set oApp = CreateObject("Excel.Application")
        oApp.Visible = False 'mettre la valeur a true
     
        Set workbookExcel = oApp.workbooks.Open(Path & cheminExcel)
        Set sheetExcel = workbookExcel.Sheets("Feuil1")
     
    debut:
     
        i = 1
     
        Do While sheetExcel.Range("A" & i).Value <> ""
            dernierTicket = sheetExcel.Range("A" & i).Value
            i = i + 1
        Loop
     
    '    If dernierTicket = "" Then
    '            GoTo debut
    '    End If
     
     
        nouveauTicket = Right(Left(dernierTicket, 13), 4)
     
        If nouveauTicket = 9999 Then
                nouveauTicket = Left(dernierTicket, 9) & "0001"
        Else
            nouveauTicket = nouveauTicket + 1
            If Len(nouveauTicket) < 4 Then
                nouveauTicket = "0" & nouveauTicket
                Do While Len(nouveauTicket) < 4
                    nouveauTicket = "0" & nouveauTicket
                Loop
            End If
            nouveauTicket = Left(dernierTicket, 9) & nouveauTicket
        End If
     
        UserFormTicket.Show
     
        UserFormTicket.TxtNumeroTicket = nouveauTicket
     
        UserFormTicket.CbxAgent.AddItem "", 0
        UserFormTicket.CbxAgent.AddItem "CLE", 1
        UserFormTicket.CbxAgent.AddItem "GDU", 2
        UserFormTicket.CbxAgent.AddItem "MJU", 3
        UserFormTicket.CbxAgent.AddItem "PDE", 4
        UserFormTicket.CbxAgent.AddItem "PKI", 5
     
     
        oApp.workbooks.Close
    End Sub
    Merci d'avance pour vos réponses.

  2. #2
    Membre chevronné Avatar de drakkar_agfa
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    618
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2008
    Messages : 618
    Par défaut
    Bonjour,

    Dans ton code,
    Do While sheetExcel.Range("A" & i).Value <> ""
    dernierTicket = sheetExcel.Range("A" & i).Value
    i = i + 1
    Loop

    tu fais un i = i + 1 à la fin alors tu as la ligne suivant.

    Mais voici un code plus efficace pour trouver la dernière ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A65536").End(xlUp).Row
    Redonne nous des nouvelles!

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Par défaut
    salut drakkar,

    j'ai essayé ton code et j'ai une erreur, en fait je ne sais pas où le mettre, car je ne sais pas ce qu'il fait.

    A quoi correspond End(Xlup) ?


    Par contre, ce que je ne comprends pas c'est que dans mon code à la première exécution il me retourne 0, mais quand je ferme le formulaire et que je relance la macro, il me retourne le bon résultat.

    De plus, tu dis que ma boucle estmal faite. Mais dans mon cas j'attribue la valeur inclue dans la cellule A+i. Ensuite j'incrémente i, donc si dans la nouvelle cellule A+i il n'y a pas de valeur je ne rentre plus dans la condition de ma boucle donc il devrait bien me reprendre la dernière cellule non vide.

  4. #4
    Membre Expert Avatar de Krovax
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 888
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 888
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for i = 1 to Range("A65536").End(xlUp).Row
    dernierTicket = sheetExcel.Range("A" & i).Value
    next i
    pour la dernière ligne/colonne regarde ici

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Par défaut
    Salut Krovax,

    J'ai toujours une erreur. En utilisant Range("A65536").End(xlUp).Row j'obtiens l'erreur : "Sub ou fonction non définie"
    A savoir que je lance la macro à partir d'outlook
    donc j'ai renseigné sheetExcel.Range("A65536").End(xlUp).Row et dans ce cas j'obtiens l'erreur : "erreur définie par l'application ou par l'objet"

    Donc je ne sais pas si je peux utiliser cette fonction à partir d'outlook.

    Donc n'y a t il pas une solution en utilisatn ma boucle...

    Je me répète mais je ne comprends pas pourquoi ma macro fonctionne bien au 2ème lancement.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    100
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Moselle (Lorraine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 100
    Par défaut
    J'ai trouvé la solution... bien que je ne comprenne toujours pas pourquoi celà ne fonctionnait pas avant.

    Voici mon nouveau code (qui a très peu changé) :

    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
     
    Sub generer_ticket()
     
    '######################################################
    '############ ALIMENTATION DE LA COMBOBOX #############
    '######################################################
        UserFormTicket.CbxAgent.AddItem "", 0
        UserFormTicket.CbxAgent.AddItem "CLE", 1
        UserFormTicket.CbxAgent.AddItem "GDU", 2
        UserFormTicket.CbxAgent.AddItem "MJU", 3
        UserFormTicket.CbxAgent.AddItem "PDE", 4
        UserFormTicket.CbxAgent.AddItem "PKI", 5
     
     
    '######################################################
    '############## DECLARATION DES VARIABLES #############
    '######################################################
        Dim oApp As Object      'permet d'instancier un fichier excel
        Dim workbookExcel As Object     'permet d'instancier un classeur excel
        Dim sheetExcel As Object        'permet d'instancier une feuille excel
        Dim cheminExcel As String
        Dim i As Integer
        Dim dernierTicket As String
        Dim nouveauTicket As String
     
        cheminExcel = "C:\Test\numeroTicket.xls"
    '============================================
    '===== INSTANCIATION DES OBJETS EXCEL =======
    '=====  + OUVERTURE DU FICHIER EXCEL  =======
    '============================================
        Set oApp = CreateObject("Excel.Application")
        oApp.Visible = False 'mettre la valeur a true
     
        Set workbookExcel = oApp.workbooks.Open(Path & cheminExcel)
        Set sheetExcel = workbookExcel.Sheets("Feuil1")
     
        i = 1
     
        Do While sheetExcel.Range("A" & i).Value <> ""
            dernierTicket = sheetExcel.Range("A" & i).Value
            i = i + 1
        Loop
     
        nouveauTicket = Right(Left(dernierTicket, 13), 4)
     
        If nouveauTicket = 9999 Then
                nouveauTicket = Left(dernierTicket, 9) & "0001"
        Else
            nouveauTicket = nouveauTicket + 1
            If Len(nouveauTicket) < 4 Then
                nouveauTicket = "0" & nouveauTicket
                Do While Len(nouveauTicket) < 4
                    nouveauTicket = "0" & nouveauTicket
                Loop
            End If
            nouveauTicket = Left(dernierTicket, 9) & nouveauTicket
        End If
     
        UserFormTicket.TxtNumeroTicket = nouveauTicket
     
        UserFormTicket.Show
     
        oApp.workbooks.Close
    End Sub
    Les seules modifications, sont que je remplie ma combobox tout de suite au début et que j'ouvre mon formulaire uniquement à la fin.

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

Discussions similaires

  1. probleme lecture fichier excel
    Par snetechen dans le forum Documents
    Réponses: 1
    Dernier message: 04/07/2007, 08h41
  2. [Excel] Lecture fichiers Excel sans Excel
    Par neometaller dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/04/2007, 09h32
  3. Lecture fichier Excel
    Par marie20 dans le forum C++Builder
    Réponses: 4
    Dernier message: 27/03/2007, 15h02
  4. [PHP-JS] Données formulaire dans fichier Excel
    Par Partner dans le forum Langage
    Réponses: 2
    Dernier message: 05/10/2006, 16h04
  5. [VB.net] Lecture fichier excel, cellule fusionnée
    Par UNi[FR] dans le forum Windows Forms
    Réponses: 1
    Dernier message: 16/08/2006, 13h12

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