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 :

Split cellule avec ; puis comparaison à un intervalle de toutes ces valeurs [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    apprenti ingé
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti ingé

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut Split cellule avec ; puis comparaison à un intervalle de toutes ces valeurs
    Bonjour tout le monde,

    Je me tourne vers vous parce que je suis un peu perdu, pour pas dire complètement.

    J'ai un fichier qui a des valeurs en colonne E, ces valeurs sont séparées par des ; non triées, mais toujours à 4 chiffres.

    Mon objectif est de splitter ces valeurs puis de vérifier que chaque valeur est comprise dans l'intervalle (colonne H et I).

    Le fichier est assez lourd, 1M de lignes alors je vous passe un échantillon.
    http://cjoint.com/?0BrqKCEWAxr

    J'ai déjà essayé de faire le split, qui fonctionne cependant je pense que ce serait mieux de le stocker dans une memoire temporaire mais ça me dépasse,
    si quelqu'un peut m'orienter ce serait super.

    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
    Option Explicit
     
    Sub Test_split()
     
    Dim val As String
    Dim i As Integer
    Dim test As Variant
     
    val = ActiveCell.Value
    test = Split(val, ";")
     
        For i = 0 To UBound(test)
     
            Cells(1, i + 1).Value = test(i)
     
        Next i
     
     
     
     
    End Sub
    J'espère avoir été clair, sinon je suis à votre disposition pour donner plus de précisions.

    Par avance, merci,

    Et bonne fin de journée

  2. #2
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 682
    Par défaut
    Salut,

    peux-tu nous dire ce que tu fais selon le résultat de ton contrôle (valeur entre les bornes de ton intervalle ou non) ?

    A noter que pour 1 million de lignes, je proposerai plutôt Access comme application native.
    Cycle de vie d'un bon programme :
    1/ ça fonctionne 2/ ça s'optimise 3/ ça se refactorise

    Pas de question technique par MP, je ne réponds pas

    Mes ouvrages :
    Migrer les applications VBA Access et VBA Excel vers la Power Platform
    Apprendre à programmer avec Access 2016, Access 2019 et 2021

    Apprendre à programmer avec VBA Excel
    Prise en main de Dynamics 365 Business Central

    Coffrets disponibles de mes ouvrages : https://www.editions-eni.fr/jean-philippe-andre
    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  3. #3
    Membre émérite Avatar de issoram
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2009
    Messages
    665
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2009
    Messages : 665
    Par défaut
    Bonjour,

    En fait quelle est la question exactement?

    Pour moi il te faut coder ceci:
    pour chaque élément de la colonne E
    - Split de la valeur
    Pour chaque valeur du tableau "splité"
    - vérifier qu'elle se trouve entre les bornes

    Mais encore une fois, quelle est la question?

  4. #4
    Futur Membre du Club
    Homme Profil pro
    apprenti ingé
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti ingé

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut
    En effet si j'oublie le principal...

    En fait c'est déjà un extract à partir de 3 tables depuis access, mais si VBA est gérable sous access pour exporter après ça me va aussi.

    J'aimerais ajouter une colonne en bout de tableau en mettant OK et NOK ou des 1 et des 0 si plus pratique pour me dire que ça fait partie de l'intervalle ou non.

  5. #5
    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 Une solution parmi bien d'autre
    Bonjour

    copie ca dans un module standard et lance le test tu aura la reponse dans la colonne J

    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
    Option Base 1
     
    Sub test()
        Dim tabloligne, derlig
        Columns("J") = ""
        derlig = Range("E" & Rows.Count).End(xlUp).Row
        For i = 2 To derlig
            tabloligne = Split(Cells(i, 5), ";")
            For e = LBound(tabloligne) To UBound(tabloligne)
                If Val(tabloligne(e)) > Val(Cells(i, 8)) And Val(tabloligne(e)) < Val(Cells(i, 9)) Then Cells(i, 10) = "oui"
            Next
            If Cells(i, 10) = "" Then Cells(i, 10) = "Non"
            Erase tabloligne
        Next
    End Sub
    pour Kegen

    ta solution est fausse le résultat ok ou non ok est dans la même boucle

    si un des élément du split est faux il te donnera un faux hors quelques tour avant il a pu en trouver un OK

    principe;
    gerer simplement le OK dans la boucle
    gerer le non ok en dehors de la boucle



    Au plaisir
    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

  6. #6
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour
    Merci Patrick, c'est en lisant ta reponse que j'ai compris la question.

  7. #7
    Futur Membre du Club
    Homme Profil pro
    apprenti ingé
    Inscrit en
    Février 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : apprenti ingé

    Informations forums :
    Inscription : Février 2014
    Messages : 4
    Par défaut
    Bonjour,

    tout d'abord un grand merci à tous et surtout à Patrick, c'est tout à fait ce que je souhaitais.

    Hormis petit soucis de bornes qui devaient être supérieures et égales ou inférieures et égales, mais je ne l'avais pas précisé. J'ai donc modifié .


    Merci encore et bonne journée,

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/12/2012, 19h21
  2. Réponses: 17
    Dernier message: 05/05/2011, 15h49
  3. [XL-2003] calculer cumul puis fusionner des cellules avec des valeurs
    Par doudou8mc dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 06/11/2009, 16h51
  4. Comparaison cellules avec une plage de données dans un autre fichier
    Par Jibi64 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/08/2008, 16h22
  5. [JTable] Cellule avec deux boutons
    Par cherbox dans le forum Composants
    Réponses: 3
    Dernier message: 12/08/2004, 17h26

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