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 :

Extraction de valeurs différentes [XL-2007]


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
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Par défaut Extraction de valeurs différentes
    Bonjour,

    je souhaiterais extraire à l'aide d'une macro les valeurs différentes de deux colonnes.

    J'utilise la macro ci-après qui fonctionne bien mais qui met un temps interminable pour calculer.

    Existe-t-il une formule beaucoup plus rapide.

    Voici ce que je recherche pour 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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    123456789
     
    colonne A                           Colonne B              COLONNE C
     1800                                  4511                    5231
     1500                                  1800                    2310
     2310                                  3000 
     4511                                  25689                   
     5231                                  1500  
     
     etc jusqu'à 10000
    Je souhaite que mes valeurs : colonne A : 2310 et 5231 soient extraites En COLONNE C car différentes de colonne B

    voici ma macro "escargot"...

    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
    Sub epureFOREACHB1()
     
    Dim valeur, resultat As Variant
     
    Application.ScreenUpdating = False
    For Each valeur In S
    heets("feuil3").Range("a:a1000")
    For Each resultat In Sheets("feuil3").Range("b:b1500")
    On Error Resume Next
    If valeur.Value <> resultat.Value Then
    resultat.Value = resultat.Value
    Else: valeur.Value = 0
    End If
    Next
    Next
    Application.ScreenUpdating = True
     
    End Sub
    Par avance merci.

  2. #2
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Bonjour,

    Une autre solution qui évitera une boucle dans la colonne B

    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
    Sub epureFOREACHB1()
     
    Dim RgValeur As Range
    Dim Rg As Range
    Dim i As Long
     
    Application.ScreenUpdating = False
    i = 1
     
    For Each RgValeur In Sheets("feuil1").Range("a1:a10000")
        Set Rg = Range("B:B").Find(RgValeur.Value)
        If Rg Is Nothing Then
            Range("C" & i).Value = RgValeur.Value
            i = i + 1
        End If
    Next
     
    Application.ScreenUpdating = True
     
    End Sub

  3. #3
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    qu'appelle tu extraire ? car je ne comprends pas ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If valeur.Value <> resultat.Value Then
    resultat.Value = resultat.Value
    Else: valeur.Value = 0
    End If
    si la condition est respecté tu ne fais rien .... : resultat.Value = resultat.Valueet si elle est respecté tu n'extrait rien mais tu met la valeur en colonne A à 0 : valeur.Value = 0

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Par défaut Extraction de valeurs différentes
    Citation Envoyé par bbil Voir le message
    qu'appelle tu extraire ? car je ne comprends pas ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    If valeur.Value <> resultat.Value Then
    resultat.Value = resultat.Value
    Else: valeur.Value = 0
    End If
    si la condition est respecté tu ne fais rien .... : resultat.Value = resultat.Valueet si elle est respecté tu n'extrait rien mais tu met la valeur en colonne A à 0 : valeur.Value = 0


    Effectivement, ici dans ce cas rien n'est extrait. (si la condition "=" est remplie = 0 (qui reste sur place colonne A) ; si valeur différente = valeur conservée dans cette même colonne.

    ce que je souhaiterais c'est que la valeur différente apparaissent dans une autre colonne ; que l'opération s'effectue beaucoup plus rapidement qu' avec "for each "

  5. #5
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    Citation Envoyé par carla13 Voir le message
    Effectivement, ici dans ce cas rien n'est extrait. (si la condition "=" est remplie = 0 (qui reste sur place colonne A) ; si valeur différente = valeur conservée dans cette même colonne.

    ce que je souhaiterais c'est que la valeur différente apparaissent dans une autre colonne ; que l'opération s'effectue beaucoup plus rapidement qu' avec "for each "
    pour conserver une valeur ce n'est pas la peine de re-écrire cette valeur il suffit de ne pas y toucher ...


    tu as vu le code à jfontaine ...?

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 13
    Par défaut Extraction de valeurs différentes
    Oui je viens d'essayer le code de JFontaine et le résultat est probant.

    Il n'y a qu'un détail qui me gêne
    1°) c'est que les valeurs différentes extraites en colonne C (beaucoup plus rapidement merci !) comporte des doublons. comment éviter un filtre supplémentaire.
    (Je n'avais pas précisé il est vrai ce cas)

    2°) comment procéder si mes colonnes ne sont pas en A1 : B1 resultat C1
    mais A500 : B500 RESULTAT EN C 500 (car ici "C" m'écrase d'autres données situées en C1 : C500)

    Merci.

  7. #7
    Expert confirmé Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 756
    Par défaut
    Tu fais 2 recherches (une sur B et l'autre sur C)

    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
    Sub epureFOREACHB1()
     
    Dim RgValeur As Range
    Dim Rg As Range
    Dim i As Long
     
    Application.ScreenUpdating = False
     
     
    For Each RgValeur In Sheets("feuil1").Range("a1:a10000")
        Set Rg = Range("B:B").Find(RgValeur.Value)
        If Rg Is Nothing Then
            i= rg.Row 
            Set Rg = Range("C:C").Find(RgValeur.Value)
            If Rg Is Nothing Then
                Range("C" & i).Value = RgValeur.Value
            End if
        End If
    Next
     
    Application.ScreenUpdating = True
     
    End Sub
    EDIT : Ajout du traitement de la ligne colonne C

  8. #8
    Expert éminent


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Par défaut
    pour le 1°) j'ai bien une idée en utilisant une collection comme tampon pour éviter les doublons ( tu stoke les données trouvées dans une collection cMaCol.add... et tu pose le résultat en fin de parcours de la colonne A ...)


    pour le 2) je ne comprends pas ... tes histoire 1, 500... le code de jpfontaine pose les résultats dans la colonne c en rajoutant 1 au numéro de ligne à chaque nouvelle égalité ... cela ne te vas pas ..?

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 09/11/2006, 14h01
  2. Extraction des valeurs hexa d'un champ char
    Par Krispi dans le forum Fortran
    Réponses: 3
    Dernier message: 21/11/2005, 11h10
  3. [Tableaux] Extraction de valeur dans un tableau
    Par pirouette_07 dans le forum Langage
    Réponses: 6
    Dernier message: 21/10/2005, 17h54
  4. Nombre de valeurs différentes dans une colonne
    Par KrusK dans le forum Langage SQL
    Réponses: 4
    Dernier message: 24/08/2005, 14h18
  5. Le nombre de valeurs différentes d'un champs
    Par XecTech dans le forum Requêtes
    Réponses: 4
    Dernier message: 15/06/2005, 21h10

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