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 :

Aide Optimisation Macro


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2016
    Messages : 1
    Par défaut Aide Optimisation Macro
    Bonjour à tous,

    Je suis actuellement en stage de fin d'études, je suis novice en VBA mais plus que désireux de persévérer et d’acquérir de nouvelles compétences dans ce domaine.

    Mon problème : Je dois analyser plusieurs données d’usinages issus de fichiers textes.

    Chaque jour, j’ai un usinage à analyser soit 92 fichiers textes (de qques Mo jusqu'à 100Mo). Mais d’ici la fin du mois de Mai, je vais avoir 9*92 fichiers par jour à analyser car j’ai bien avancé dans mon travail (déjà que pour un usinage c’est assez fastidieux, alors pour 9 fois plus, j’essaie de trouver une automatisation pour mes manipulations...)

    Pour chaque fichier .txt, j’effectue qques modifications via des macros que j’ai développées pour calculer automatiquement diverses données. J’enregistre le fichier sous le format .xlsm, sous le même nom (extension différente bien sûr) et sous le même répertoire.

    Pour une de mes macro, j'ai besoin de transformer un groupe de cellules en un tableau. Mon problème est que le nombre de lignes et le nombre de colonnes varient pour chaque fichier. J'ai réussi à calculer la dernière ligne du tableau pour chaque fichier. Mais pour la dernière colonne je n'ai pas réussi ; malgré une longue prise de tête ...
    Pour contourner le problème, j'ai repéré le maximum et l'ai inséré dans mon code (colonne "CFP") . Bien entendu ce code n'est pas optimisé et lors de l’enregistrement, cela augmente la taille de mes fichiers, pour au final pas grand chose.

    Voici le 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
    Sub MacroTestTableau()
    '
    ' MacroTestTableau Macro
    '
    ' Touche de raccourci du clavier: Ctrl+b
    '
    'derniere ligne cellule non vide
    Dim derlig As Long
    derlig = Range("A" & Rows.Count).End(xlUp).Row
     
        Range("A6").Select
        ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$6:CFP" & derlig), , xlYes).Name _
            = "Tableau1"
        Range("Tableau1[#All]").Select
        ActiveSheet.ListObjects("Tableau1").TableStyle = "TableStyleLight1"
        ActiveWindow.SmallScroll Down:=-21
    End Sub


    Pourriez vous je vous prie m'éclairer quant à propos de mon soucis. J'ai essayé d'insérer deux variables dans la fonction Range, mais sans succès.

    Je vous remercie par avance de l'attention que vous porterez à mon post.

    Bonne fin de (long) w-e à tous.

    Guillaume

    P.S : Je peux transmettre des exemples de fichiers textes bruts si vous le désirez.

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour

    Ton problème est-t-il finalement celui exprimé ici :
    Mon problème est que le nombre de lignes et le nombre de colonnes varient pour chaque fichier. J'ai réussi à calculer la dernière ligne du tableau pour chaque fichier. Mais pour la dernière colonne je n'ai pas réussi ; malgré une longue prise de tête ...
    ?
    Et si la réponse est oui :
    1) ta feuille contient-elle également des formules ou uniquement des constantes ?
    2) toutes les lignes remplies contiennent-elles le même nombre de colonnes remplies ?

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    as-tu des données en lignes 5 ?

    dans la négative, la méthode .CurrentRegion de l'objet Range va te renvoyer la plage complète

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Range("A6").CurrentRegion
        .Address ' Adresse de la plage
        .Columns.Count ' nombre de colonnes
        .Rows.Count ' nombre de lignes
        ' etc...
    End With
    dans l'affirmative, il faut "retailler" correctement la plage, au moyen de la méthode Resize .... et/ou s'orienter éventuellement vers la méthode .UsedRange de l'objet Range


    Currentregion = plage rectangulaire délimitée par des interesections de lignes/colonnes vides
    UsedRange = plage rectangulaire complète qui est utilisée sur la feuille


    D'autres méthodes vont faire appel, comme tu l'as fait pour calculer ta dernière ligne, à la méthode .End.
    Pour les colonnes en général, on va procéder comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim NumCol as Integer
    NumCol = Cells(1,Columns.Count).End(XltoLeft).Column
    Vu qu'on travaille sur des numéros de colonnes, il est impératif de ne plus travailler avec des Range (Range("C4")) mais avec des Cells (Cells(4,3)) où le premier nombre est la ligne et le second est la colonne

  4. #4
    Membre Expert
    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 703
    Par défaut
    Bonjour,

    Si ton but est de créer le tableau sur la bonne plage automatiquement et que tu as au moins une ligne vide avant et une ligne vide après ce tableau, tu peux faire comme ça pour le créer:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$6").CurrentRegion, , xlYes).Name = "Tableau1"
    => CurrentRegion va automatiquement récupérer toutes la zone connexe.

Discussions similaires

  1. aide excel macro
    Par eillon dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/03/2007, 09h37
  2. besoin d'aide pour macros ou VBA
    Par jmsor dans le forum VBA Access
    Réponses: 1
    Dernier message: 07/02/2007, 18h41
  3. Validation de données à l'aide de Macro (BoîteMsg)
    Par Philosophine dans le forum Access
    Réponses: 20
    Dernier message: 26/09/2006, 15h51
  4. [VBA-E][débutant]aide pour macro sous excel
    Par julyBL dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 09/06/2006, 22h42
  5. [VBA-E] aide pour macro sur excel
    Par letoulouzin31 dans le forum Macros et VBA Excel
    Réponses: 21
    Dernier message: 24/05/2006, 11h29

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