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 :

Quelle direction prendre pour réaliser le dépouillement d'un tableau?


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
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Par défaut Quelle direction prendre pour réaliser le dépouillement d'un tableau?
    Bonsoir à vous tous!

    Je cherche aujourd'hui à réaliser le dépouillement de tableau de données issus d'un appareil de mesure.

    Ce tableau se compose de différentes colonnes, les premières sont consacrées aux caractéristiques des échantillons et les suivantes représentent les résultats de l'appareil en fonction des masses atomiques des différents éléments chimiques.

    Voilà ça c'est pour situer un peu le contexte.

    Mon but est d'extraire de ce tableau les données des différents éléments (qui sont variables en fonction de l'analyse) sur des feuilles dédiés pour chaque éléments. Ces feuilles seront créées en fonction des éléments présents.

    Ma question est donc la suivante, aujourd'hui je m'orients sur un tri qui m'affiches les colonnes des caractériques et celles de l'élément voulu et de copier les cellules visibles. Après je créé une nouvelle feuille pour cette éléments et je colle les cellules qui était visibles. Pour passer à l'élément suivant je fait afficher toutes les colonnes et je recommence.

    Mais ce matin je me suis demandé si il ne serait pas plus efficace ou plus propre au niveau du code de créer une feuille par élément et de copier sur chaque feuille le tableau entier. Une fois cette étape réalisée j'élimine les colonnes qui ne concernent pas l'élément de la feuille.

    D'après vous laquelle des deux méthodes et la plus efficace et la plus rapide.

    Question subsidiare l'option "find" dans vba peut-il me servir? si ui comment?

    Merci pour vos commentaires.

  2. #2
    Membre éprouvé Avatar de defluc
    Homme Profil pro
    Architecte
    Inscrit en
    Mai 2002
    Messages
    1 383
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 76
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 383
    Par défaut
    Question rapidité d'exécution, je ne sais pas mais en tout cas, copier une feuille et effacer les colonnes inutiles est certainement plus rapide dans la mesure où les instructions de mises en forme (dimensions de ligne et de colonnes) ne sont pas à écrire.
    Je dis bien copier la feuille et non
    créer une feuille par élément et de copier sur chaque feuille le tableau entier

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Par défaut
    J'ai tester les 2 méthodes et pour le moment avec le cas le plus discriminant (200 colonnes) la copie de la feuille avec suppression des colonnes "inutiles" est un peu plus rapides de quelques dixièmes.

    Dès que je peux je poste les deux codes pour vous montrer les différences de traitement et éventuellement avoir des avis pour améliorer mon codage.

  4. #4
    Membre chevronné
    Avatar de bifconsult
    Homme Profil pro
    Consultant
    Inscrit en
    Mars 2012
    Messages
    189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2012
    Messages : 189
    Par défaut
    Bonjour,

    Defluc a raison: copier les feuilles et traiter les infos à supprimer sera plus rapide que copier les infos séparément dans chaque feuille.

    Sinon pour ce genre de traitement, personnellement j'utilise des variables tableau. Je les remplis de mes valeurs puis je les "jette" dans les feuilles. C'est très efficace.

    Concernant ta demande sur "find" : pour savoir si elle peut vous être utile ou non, dites-nous ce à quoi vous la destinez.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    116
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 116
    Par défaut
    En ce qui concerne "find" je me demandais si cela pouvais être une solution vu que je cherchais à copier des colonne en fonction de leur entête. Mais j'avoue que je connais pas du tout cette possibilité.

    Pour mon dépouillement j'ai donc suivi l'avis de Defluc et je copie la feuille principale et je delete les colonnes non souhaitées. je vous mets en fin de ce message le code. Je ne suis pas contre un avis et une optimisation si quelqu'un voit des choses aberrantes (mon niveau n'est pas top top).

    @bifconsult, concernant ce que je cherche à faire peux-tu m'expliquer comment tu ferais avec des variables tableau? J'ai un peu regarder mais je ne suis pas familier.

    NB: quel peux être l'utilité d'utiliser des variables tableau, j'ai regarder sur le pdf d'initiation VBA mais j'avoue pour le moment je ne vois pas comment les utiliser à bon escient.

    Voilà mon code actuel

    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
    Private Sub CommandButton1_Click()
    Dim elemrech As String, texte As String, debut As String, fin As String, element As String, test As String, unite As String
    Dim nbelem As Integer, nbcol As Integer, nblig As Integer, dl As Integer, dcol As Integer, i As Integer, col As Integer
    Dim x As Byte
     
     
    'macro enregistrée le 08/03/2012 par MC
    'macro permettant la création de tableau unique pour chaque éléments sur la feuille Résultats
     
    With Sheets("Sheet1") 'on travaille sur la feuille Sheet1
         nbcol = .Range("IV2").End(xlToLeft).Column 'récupèration du numéro de la dernière colonne utilisé sur la feuille Sheet1
         nblig = .Range("A" & .Rows.Count).End(xlUp).Row 'récupèration du numéro de la dernière ligne utilisé sur la feuille Sheet1
         nbelem = TextBox2.Value 'définition de la variable nbelem
         For i = 1 To nbelem Step 1 'boucle sur la variable i
            If Me.Controls("ComboBox" & i).Visible = True Then 'condition sur les ComboBox visibles
                elemrech = Me.Controls("ComboBox" & i).Value 'définition de la variable elemrech
                Sheets("Sheet1").Copy after:=Sheets(Sheets.Count)
                ActiveSheet.Name = elemrech
                With Sheets(elemrech) 'on travaille sur la feuille Résultats
                    For col = nbcol To 4 Step -1 'boucle sur la variable col
                        texte = .Cells(1, col).Text 'définition de la variable texte
                        If texte = "" Then 'condition sur la variable texte
                            .Range(.Cells(1, col), .Cells(nblig, col)).Delete Shift:=xlToLeft 'suppression de la colonne entière si la condition sur la première cellule de la colonne est vérifiée
                            Else
                            debut = InStr(1, texte, " ") + 2 'définition de la variable debut
                            fin = InStrRev(texte, " ") - 7 'définition de la variable fin
                            element = Mid(texte, debut, fin - debut) 'définition de la variable element
                            test = Mid(element, 1, 1) 'définition de la variable test
                            If test = "(" Then 'condition sur la variable test
                                element = Mid(texte, debut + 1, fin - debut - 2) 'définition de la nouvelle variable element si la condition précédente est vérifiée
                            End If 'fin de la condition
                            If element <> elemrech Then 'condition sur la variable element
                                .Range(.Cells(1, col), .Cells(nblig, col)).Delete Shift:=xlToLeft 'suppression de la colonne entière si la condition sur la première cellule de la colonne est vérifiée
                            End If 'fin de la condition
                        End If 'fin de la condition
                    Next col 'valeur suivante de la variable col
                    dcol = .Range("IV1").End(xlToLeft).Column 'récupèration du numéro de la deuxièmre colonne vide sur la feuille elemrech
                    .Range(Cells(1, dcol + 2), Cells(nblig, dcol + 2)).Select
                    texte = .Cells(2, dcol).Text 'définition de la variable texte
                    debut = InStr(1, texte, " ") + 3 'définition de la variable debut
                    fin = InStrRev(texte, " ") 'définition de la variable fin
                    unite = Mid(texte, debut, fin - debut) 'définition de la variable unite
                    .Cells(1, dcol + 2).Value = elemrech 'définition du texte de la cellule définie
                    .Cells(2, dcol + 2).Value = unite 'définition du texte de la cellule définie
                    For x = 3 To nblig
                        .Cells(x, dcol + 2).Value = WorksheetFunction.Average(.Range(Cells(x, 4), Cells(x, dcol)))
                    Next x
                End With 'on quitte la feuille Résultats
            End If 'fin de la condition sur les comBoBox visibles
        Next i 'valeur suivante de la variable i
    End With 'on quitte la feuille Sheet1
    UserForm1.Hide 'fermeture de la UserForm1
     
    End Sub 'sortie de la macro

Discussions similaires

  1. 1er pas : quelle direction prendre ?
    Par Dagad dans le forum Création de jeux vidéo
    Réponses: 1
    Dernier message: 12/01/2015, 09h50
  2. Réponses: 1
    Dernier message: 20/10/2013, 15h44
  3. Réponses: 11
    Dernier message: 27/09/2013, 13h02
  4. Quelle technologie web utiliser pour réaliser un diaporama en 3D ?
    Par yonat94 dans le forum Général Conception Web
    Réponses: 4
    Dernier message: 24/05/2007, 14h40
  5. [VB.NET] Direction à choisir pour réaliser ce type de Form?
    Par jazz matazz dans le forum Windows Forms
    Réponses: 14
    Dernier message: 21/04/2006, 03h54

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