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 :

Utilisation des tableaux [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut Utilisation des tableaux
    Bonjour à tous,

    J'en appel aux experts de la programmation à me filer un coup de main. Voici le problème posé :

    J'ai une feuille excel comportant un nombre de lignes variable et un nombre de colonnes fixe (20).
    Sur cette plage je souhaite "retraiter les données" et donc conserver la ligne seulement si elle répond au critère suivant : la cellule de la 5 ème colonne doit contenir 4 chiffres et une lettre(en derniere position de la chaine) : "####[A-Z]"

    Pour l'instant j'ai un code qui tourne en scannant ligne à ligne la plage et effectue un delete à chaque ligne qui ne répond pas au critère. Problème: cela met trop de temps.

    Apparemment le traitement de cette base de données par tableau me permettrait de gagner un temps conséquent. Seulement je ne suis que débutant et ne sait pas trop comment faire. Help me.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le filtre élaboré d'excel peut t'aider à résoudre ce problème, en utilisant les critères calculés.
    A lire éventuellement Les filtres avancés ou élaborés dans Excel
    Deux solutions (Nous supposons que la liste des données commence en cellule A1)
    Soit, nous travaillons à l'envers et nous exportons les données répondant aux critères (4 chiffre et une lettre à l'envers). La formules à placer comme critères calculés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =ET(NBCAR(E2)=5;ESTTEXTE(DROITE(E2;1));ESTNUM(CNUM(GAUCHE(E2;4))))
    Soit on filtre les lignes ne répondant pas aux critères et ensuite on les supprime. Cette procédure est un peu plus complexe.
    Il faut avoir copié la ligne des titres au préalable (La ligne 2 pouvant faire partie des lignes cachées)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =NON(ET(NBCAR(E2)=5;ESTTEXTE(DROITE(E2;1));ESTNUM(CNUM(GAUCHE(E2;4)))))
    C'est la même formule imbriquée dans la formule NON
    Une fois les lignes filtrées
    1) Sélectionner la plage (Ctrl+A)
    2) Appeler l'outil Atteindre (touche F5), cliquer sur le bouton Cellules... et sélectionner Cellules visibles seulement
    3) Faire un clic droit et sélectionner Supprimer la ligne et ensuite répondre OK au message Voulez-vous supprimer la ligne entière ?
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Merci pour cette réponse. En effet je pourrais de cette façon filtrer sur ce qui m'intérresse et exporter les valeurs.

    Seulement je souhaiterais que le retraitement de cette feuille soit "automatisée" et soit déclenchée par l'action sur un bouton.

    En fait je ne sais pas écrire le code permettant de :
    enregistrer la plage dans un tableau (n lignes et 20 colonnes)
    redimensionner le tableau en ne conservant que les lignes respectant le critère
    Transférer les valeurs du tableau remanié vers la feuille de calcul en écrasant les anciennes valeurs.

    Je vous remercie par avance.

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 176
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En fait je ne sais pas écrire le code permettant de :
    enregistrer la plage dans un tableau (n lignes et 20 colonnes)
    Qu'entends-tu par là ?
    Si c'est pour sélectionner la liste des données, tu as entre-autres la propriété CurrentRegion qui est l'équivalent d'un Ctrl+A
    Exemple avec une variable objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub t()
     Dim rng As Range
     Set rng = ThisWorkbook.Worksheets("db").Range("A1").CurrentRegion
    End Sub
    Une fois que l'on a attribué la plage de données à la variable objet rng, on peut utiliser celle-ci pour par exemple mettre en jaune les cellules de la plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    rng.Interior.Color = vbYellow
    ou copier la plage vers la cellule C5 de la feuille nommée Export
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     rng.Copy ThisWorkbook.Worksheets("Export").Range("C5")
    Seulement je souhaiterais que le retraitement de cette feuille soit "automatisée" et soit déclenchée par l'action sur un bouton.
    Le meilleur ami du programmeur est l'enregistreur de macros.
    Commence à l'enclencher et ensuite tu réalises toutes les opérations décrites plus haut, une fois terminé, tu arrêtes l'enregistreur et tu vas lire ce qu'il a écrit.
    Ensuite si tu ne comprends pas tout ou que tu veux enlever les Select, Selection, Activate qu'il ne va pas manquer de produire, tu reviens poser tes questions.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 11
    Par défaut
    Merci,

    Mais seulement le fichier à retraité est renouvellé chaque jour, je ne peux pas à chaque mise à jour rajouter la formule que tu précises. Ta solution est très simple mais demande quelques actions manuelles.

    Je souhaite enregistrer la plage dans un tableau (stocké les valeurs dans un tableau) et réindéxé seulement les lignes qui m'intérressent pour les transférer vers la feuille de calcul. Le cas est très bien traité pour une plage à 2 colonnes, je souhaiterais pouvoir le faire sur 20 colonnes.



    Bonne journée.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut heu
    bonjour

    si tu tiens absolument a utiliser une tableau alors on en utilisera 2
    exemple
    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
    sub machin()
     
    dim tablo1,tablo2,plage
    set plage=range("A1:f10")
    tablo1=plage
    redim tablo2(ubound(tablo1),10)
    for i= 0 to ubound(tablo1)
    'teston la présence de "toto" dans la 1 ere colonne 
    if tablo1(i,0)<>"toto" then 
    for e=0 to 10
    tablo2(i,e)=tablo1(i,e)
    next
    next
    'maintenant on replace le tout sans les "toto"
    plage=tablo2
    end sub
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 12/03/2008, 10h38
  2. Réponses: 1
    Dernier message: 12/12/2007, 13h46
  3. Réponses: 2
    Dernier message: 18/10/2006, 11h36
  4. Réponses: 2
    Dernier message: 09/06/2006, 13h33
  5. Réponses: 4
    Dernier message: 10/05/2006, 10h36

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