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 :

Fichier pour inventaire [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juillet 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juillet 2014
    Messages : 56
    Par défaut Fichier pour inventaire
    Bonjour à tous,

    étant débutante en vba, je fais appel à vous.

    Après nombreuses recherches et tentatives, voici en PJ un tout petit fichier dans lequel j'aimerais faire un outils de suivi d'inventaire de biens matériels :

    J'ai fait deux onglets pour décomposer ma procédure, après si vous avez le temps de me proposer quelque chose de plus light, je suis preneuse.

    La procédure actuelle :

    On fait un copier de ligne d'un fichier PDF, que l'on vient coller dans l'onglet DONNEES. On voit que les données sont toutes collées à la suite (rouge). C'est la raison pour laquelle j'avais décomposé en 3 colonnes pour extraire les 3 parties. Ensuite je voulais faire un bouton pour copier et coller les formules sur chaque lignes que je viens de coller depuis le PDF. (Je me suis rendu compte que j'ai écrasé les formules en plus mais le résultat que je souhaite est mis dans le classeur)

    Deuxième étape sur l'onglet résultat qui fonctionne ; avec un bouton, ramener les données extraites dans l'onglet précédent, et saisir une date d'inventaire et un N° de local. J'ai donc fait ça avec un Userform que j'ai réussi à mettre en route. Ces deux infos saisies se retrouvent donc collées tant de fois que les infos extraites de l'onglet Données sont collées.

    Voilà mon petit code est très approximatif et mérite surement quelques corrections MAIS le plus important pour l'instant est que dans l'onglet DONNEES, mon copier coller ne s'arrête pas ?

    En espérant avoir été claire.

    LIEN FICHIER
    (Désolée pour l'hébergement mais je n'ai pas réussi avec le Bouton Gérer les PJ.)

  2. #2
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Bonjour,


    Citation Envoyé par MsVixene Voir le message
    Bonjour à tous,


    (Désolée pour l'hébergement mais je n'ai pas réussi avec le Bouton Gérer les PJ.)
    C'est peut-être dû à l'extension. Si tu le "compresses" en zip avant de l'envoyer, cela donne quoi ?

    Cela ne compresseras pas bien fort, mais zip est accepté, mais, si ma mémoire m'est fidèle, xlsm ne l'est pas.

  3. #3
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Citation Envoyé par MsVixene Voir le message

    Voilà mon petit code est très approximatif et mérite surement quelques corrections MAIS le plus important pour l'instant est que dans l'onglet DONNEES, mon copier coller ne s'arrête pas ?
    Bonjour,

    C'est egalement mon premier post sur ce forum (qui m'a tout de même beaucoup aider ces dernieres annees)
    Si j'ai bien compris, tu as mis des formules dans les colonnes B/C/D/E, et tu veux les etendres par macro jusqu'a la fin de ton tableau ?

    Je t'avoue ne pas encore comprendre pourquoi ton copier coller ne s'arrete pas, vu que ta condition est respecter, mais je te propose une autre approche (si je suis a cote de la plaque, dis le moi ^^)

    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
     
    Function CountLig(Ws As Worksheet, col As Single)
     
    'Fonction servant à compter les lignes
     
    On Error GoTo ErrorHandler
     
    CountLig = Ws.Columns(col).Find("*", , , , xlByRows, xlPrevious).Row
     
    Exit Function
     
    ErrorHandler:
        CountLig = 1
     
    End Function
     
     
    Sub CopyFormula()
     
    Dim I as single
    Dim J as single
    Dim LastLine as single
     
    Dim MaFormule as string
     
    Dim WsDonnee as worksheet
    Set WsDonnee = Worksheets("DONNEES")
     
    Const FIRSTLINE = 3
     
    LastLine = CountLig(WsDonnee, 1)
     
    On Error GoTo ErrH
     
    For I = 2 to 5           'Boucle sur les colonnes
         MaFormule = WsDonnee.Cells(I, FIRSTLINE).Formula
         For J = FIRTSLINE to LastLine           'Boucle sur les lignes
     
              WsDonnee.Cells(I, J).Formula = MaFormule
     
        Next J
    Next I
     
    Exit Sub
     
    ErrH:
         Err.Raise Err.Number, , Err.Description   'Erreur
     
    End sub
    Je ne peux pas tester le code actuellement, donc je ne sais pas si il fonctionne
    Et si j'ai repondu de travers, dis le moi ^^

    Pour l'explication du code :
    Je calcule tout d'abord la derniere ligne de ton tableau, avec une fonction CountLig
    Puis j'utilise une boucle FOR, qui a pour avantage de ne jamais faire de boucle Infini, vu que l'on definit les limites avant, et pas dynamiquement
    Et ensuite, je prend la formule dans la premiere cellule, et je l'applique au cellule du dessous, et je recommence avec les autres colonnes

    Cordialement, et bonne chance pour la suite !

  4. #4
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juillet 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juillet 2014
    Messages : 56
    Par défaut
    Bonjour,

    je te remercie d'avoir regardé tout d'abord.

    Ensuite j'ai essayé ta maccro mais il semble y avoir un probleme à la ligne 47.

    N'y a-t-il pas plus simple sinon ? Ne peut-t-on pas en une fois séparer les données collées et les mettre dans l'onglet RESULTAT ?

    (Pour l'hébergement, je ne peux pas le remettre pour l'instant.)

  5. #5
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Il doit y avoir un problème dans le code, et comme je suis un mauvais élève, je bâcle toujours mes gestionnaires d'erreur, ce qui fait que ça plante a la ligne 47.

    Si je comprend bien, tu veux prendre les données en rouge sur la feuille DONNEE, les séparer, et les rentrer dans ta feuille résultat en y ajoutant une date et un numéro de Local ?

    Bon voila ce que je te propose (J'ai tester le code chez moi, et ça marche)

    Ici, j'ai légèrement modifié le code de ton Userform :

    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
     
    Private mDate As String
    Private mLocal As String
     
    Property Get TheDate() As String
        'Definit la date en Lecture
        TheDate = mDate
    End Property
     
    Property Let TheDate(TheDate As String)
        'Definit la date en ecriture
        mDate = TheDate
    End Property
     
    Property Get LocalNumber() As String
        'Definit le numero de Local en Lecture
        LocalNumber = mLocal
    End Property
     
    Property Let LocalNumber(LocalNumber As String)
        'Definit le numero de Local en Ecriture
        mLocal = LocalNumber
    End Property
     
    Private Sub CommandButton1_Click()
     
    'Entrer la date et la coller
     
    mDate = TextBox1.Value
    'Affecte la date entree par l'utilisateur comme une des propriete de l'UF
     
    'Entrer le N° de local et le coller
     
    mLocal = TextBox2.Value
    'Affecte le numero de local entree par l'utilisateur comme une des propriete de l'UF
     
    Me.Hide
     
    End Sub
    J'ai légèrement redéfinis le code de l'Userform pour que rien ne soit écris dans la feuille, mais qu'il me retourne les valeurs "Date" et "Numéro de Local" qu'un Utilisateur aurait rentré.
    Si tu as des questions sur les Propriétés de l'Userform, je t'invite a lire ce superbe Tuto qui m'a beaucoup aidé.

    Lorsque l'utilisateur appuie sur le bouton "OK", nous affectons les deux valeurs qu'il a rentré dans les propriétés de l'Userform, propriétés auxquelles nous allons pouvoir avoir accès par la suite.

    Ensuite, nous allons utiliser un Sub Principal, a l'aide d'une fonction qui va nous permettre de compter les lignes.
    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
     
    Function CountLig(Ws As Worksheet, col As Single)
     
    'Fonction servant à compter les lignes
     
    On Error GoTo ErrorHandler
     
    CountLig = Ws.Columns(col).Find("*", , , , xlByRows, xlPrevious).Row
     
    Exit Function
     
    ErrorHandler:
        CountLig = 1
     
    End Function
     
     
    Sub CopyData()
     
    Dim I As Single
    'Variable d'iteration
    Dim LastLine As Single
    'Determine la derniere ligne
     
    Dim MonMateriel As String
    'Determine ton materiel
    Dim MySeparateValue() As String
    'Tableau separant les donnees issu du PDF
     
    Dim AllTheValue() As Variant
    'Tableau comprenant toute les valeurs a ecrire
     
    Dim WsDonnee As Worksheet
    'Feuille de DONNEE
    Dim WsResult As Worksheet
    'Feuille de Resultat
    Set WsDonnee = Worksheets("DONNEES")
    Set WsResult = Worksheets("RESULTAT")
     
    Const FIRSTLINE = 3
    'Determine la premiere ligne de la feuille de DONNEE qui contient des valeurs, a adapter au besoin
     
    LastLine = CountLig(WsDonnee, 1)
    'Determine la derniere ligne de la feuille de DONNEE
     
    Load UserForm1
    UserForm1.Show
    'Lance l'Userform
     
    ReDim AllTheValue(3, LastLine - FIRSTLINE)
    'Determine la taille du tableau comprenant toute les valeurs
     
    For I = FIRSTLINE To LastLine
    'Parcours toutes les donnees issu du PDF
     
        MySeparateValue = Split(WsDonnee.Cells(I, 1), " ")
        'Separe les valeurs selons les espaces
     
        MonMateriel = ""
        For J = LBound(MySeparateValue, 1) + 2 To UBound(MySeparateValue, 1)
            MonMateriel = MonMateriel + MySeparateValue(J) + " "
            'Definit ton materiel comme etant la concatenation de toutes les valeurs issu de la separation
            'sauf les deux premiere
        Next J
     
        AllTheValue(0, I - FIRSTLINE) = UserForm1.TheDate
        'Recupere la propriete Date de l'UF
        AllTheValue(1, I - FIRSTLINE) = UserForm1.LocalNumber
        'Recupere la propriete Numero de Local de l'UF
        AllTheValue(2, I - FIRSTLINE) = MySeparateValue(1)
        AllTheValue(3, I - FIRSTLINE) = MonMateriel
        'Remplie le tableau avec les valeurs que tu veux
     
    Next I
     
    Unload UserForm1
     
    LastLine = CountLig(WsResult, 1) + 1
    'Definis la derniere ligne de la feuille Resultat
     
    With WsResult
    For I = LBound(AllTheValue, 2) To UBound(AllTheValue, 2)
        .Cells(I + LastLine, 1) = AllTheValue(0, I)
        .Cells(I + LastLine, 2) = AllTheValue(1, I)
        .Cells(I + LastLine, 3) = AllTheValue(2, I)
        .Cells(I + LastLine, 4) = AllTheValue(3, I)
        'Remplis ta feuille resultat avec les valeurs du tableau
    Next I
    .Select
    End With
     
    End Sub
    Grosso modo, nous allons d'abord séparer la chaîne de caractère rouge, pour en tirer le nom du matériel ainsi que son numéro d'inventaire.
    Nous écrirons toutes ces valeurs dans une variable de type "Tableau" (A lire également ce magnifique Tuto)

    Et ce tableau de résultats est ensuite recopié dans la feuille "RESULTAT"

    Pour que tout fonctionne, tu dois simplement lancer la macro "CopyData"

    Ci-joint ton fichier avec les macro que j'ai rajouté.
    Il faut appuyer sur le bouton de la page "DONNEE" pour lancer la fonction

    Voila, si tu as des questions, n’hésite pas.

    PS : Je suis sincèrement désolé pour les accents, mais j'utilise actuellement un clavier qwerty, et j'ai un peu de mal avec la transition azerty - qwerty.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juillet 2014
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juillet 2014
    Messages : 56
    Par défaut
    Merci beaucoup, j'ai essayé, c'est super.

    Petite question : du coup les formules de l'onglet Données sont-elles encore nécessaires ?

  7. #7
    Membre émérite Avatar de Nico Chg
    Homme Profil pro
    Apprenti ingénieur Business Development
    Inscrit en
    Juillet 2014
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Apprenti ingénieur Business Development
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2014
    Messages : 352
    Par défaut
    Pas réellement, car dans cet exemple, les données sont directement séparées dans la macro.
    Ceci dit, elles peuvent servir à titre d'information, c'est à toi de voir

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

Discussions similaires

  1. SGBD vs fichiers pour du XML
    Par ahebert dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 31/08/2005, 08h17
  2. [D2005][CGI] Nom de fichier pour une image
    Par Argonaute dans le forum Web & réseau
    Réponses: 1
    Dernier message: 30/08/2005, 12h56
  3. Envoyer un fichier pour le faxer...
    Par Sunchaser dans le forum C++Builder
    Réponses: 5
    Dernier message: 24/07/2005, 00h12
  4. [Eclipse 2.1] Encodage des fichiers pour un projet
    Par _-Sky-_ dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 26/05/2005, 22h26
  5. [débutant] filtrer un fichier pour afficher des infos
    Par Valichou dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 21/04/2004, 11h44

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