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 :

VBA - Remplacement du contenu des cellules d'un range défini par filtre [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Par défaut VBA - Remplacement du contenu des cellules d'un range défini par filtre
    Bonjour bonjour !

    Tout d'abord, merci pour votre participation à ce forum, sans m'être inscrit jusqu'à présent, j'ai toujours trouvé les informations que je recherchais, dans les différentes parties.

    Aujourd'hui cependant, j'ai besoin de demander quelque chose de plus spécifique. peut-être que pour vous ce sera une partie de plaisir ... Je l'espère en tous cas !

    Je reçoit une feuille Excel (Jusques là, tout va bien), sur laquelle, des données (beaucoup, +/- 40k lignes) quotidiennement. Je dois refaire de la mise en forme, et des modifications sur ces données.

    Sur cette feuille, j'ai déjà automatisé une partie du process, via l'enregistreur de macro (je sais qu'on peut épurer, mais je verrais ça plus tard).

    je me retrouve cependant avec une question que je n'arrives pas à solver.
    J'ai deux colonnes de données, une avec des données que je veux harmoniser par rapport aux datas de l'autre.

    Vous allez me dire : Le sujet à été abordé 100fois. Oui... certainement...
    Mais j'arrive pas, en prennant les macros/ fonctions des autres topics, à l'adapter à mon fichier.

    J'ai donc :
    Colonne F et G.
    F contient les données à modifier
    G les données à filtrer pour les modifications.

    Je voudrais que toute donnée de G commençant par certains critères ( Exemple : "Alpha*"; "Beta*"; "AA1*" et "AA2*")soit filtrée et que sur la case de F correspondante (à gauche donc), soit modifiée la valeur (
    "AL" devient "AA"
    "BE" devient "AA" aussi
    "AA" en face de "AA1" devient "AA"
    "AA" en face de "AA2" devient par contre "BB".

    J'ai tenté quelque comme ça, mais je ne pense pas que ce soit la bonne méthode.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Filter_set()
        Dim LOC As String
        Range("G1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$J$65535").AutoFilter Field:=7, Criteria1:="=Alpha*" _
            , Operator:=xlOr, Criteria2:="=Beta*"
        Range("F1").Select
        LOC = Range("F2").Value
        If LOC = "AL;BE" Then
        ActiveCell.Value = "BA"
        End If
    End Sub
    ça me semble très limité comme code, car il faudrait que je fasse une autre macro pour chaque "double" filtre. Sachant que j'ai une bonne 10aine de valeurs différentes à filtrer... Il doit y avoir autre chose.

    Si quelqu'un pouvait m'aiguiller sur la fonction à utiliser, ou n'importe quelle astuce, je lui en serait très reconnaissant !

    Par avance, merci.

    PS : Cette question est une infime partie d'un projet que je commence à peine auquel je suis affecté et il est presque certain que je vais devoir demander de l'aide et des explications sur les macros dans un futur proche et ... régulièrement

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    Peut etre avec ceci, meme si je suis pas vraiment certain d'avoir compris clairement ta demande.

    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 Filter_set()
        Dim LOC As String
        Range("G1").Select
        Selection.AutoFilter
        ActiveSheet.Range("$A$1:$J$65535").AutoFilter Field:=7, Criteria1:="=Alpha*" _
        , Operator:=xlOr, Criteria2:="=Beta*"
        LOC = Range("F2").Value  
        With Range("F1")
            Select Case LOC
                Case "AA2*"
                    .Value = "BB"
                Case Else
                    .Value = "AA"
            End Select    
        End With
     
    End Sub

    Pourrait tu reformuler ce que tu veux exactement par contre. Cette partie est un peu floue

    AL" devient "AA"
    "BE" devient "AA" aussi
    "AA" en face de "AA1" devient "AA"
    "AA" en face de "AA2" devient par contre "BB".

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Par défaut
    Wow... ça c'est une réponse rapide merci !

    Mmm ... Désolé pour le floutage. J'essaie de simplifier :

    Je veux modifier les valeurs de la colonne F en fonction du début de la valeur du contenu de la colonne G.

    Exemple :
    Ligne 1
    F = AA
    G = AA1XXXX
    Dans la colonne F, AA reste AA

    Ligne 2
    F = AA
    G = AA2XXXX
    Dans la colonne F, AA devient BA

    Le fait est que j'ai une 10aine de valeurs différentes pour F
    AA, AB, AC... et sur la colonne G, des centaines AA1****, AA2****, AB1****, AB2**** etc.

    Et je souhaites toujours modifier F en fonction de G.

    C'est plus clair ? Sinon je ferais une petite explication par screenshot

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    Dabs ce cas je pense que select case peut faire l'affaire.


    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
     
     
      LOC = Range("F2").Value  
        With Range("F1")
            Select Case LOC
                Case "AA2*"
                    .Value = "BB"
                Case "XX3*"
                    .Value = "JJ"
                Case "YY5*"
                    .value = "LL"
                'etc....
            End Select    
     
        End With

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juin 2012
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Allemagne

    Informations professionnelles :
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2012
    Messages : 28
    Par défaut
    Bien le bonjour Alpha

    Et merci de ta réponse une nouvelle fois !

    Est-ce que cependant ça ne risques pas d'être lourd comme procédure, si j'ai une centaine de valeur, ma macro fait 200lignes pour les affecter toutes... ça ne risques pas de ralentir copieusement mon système ? Surtout que le fichier excel concerné est un peu lourdeau

    Qu'en penses-tu ?

  6. #6
    Membre expérimenté
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 107
    Par défaut
    Apres tu peux toujours ecrit les correspondances dans une plages de cellule puis l'affecter à une variable tableau en cours de procédure un truc du genre.

    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
    Sub Test()
     
        Dim Mt() As Variant
        Dim WS As Worksheet
        Dim Rng As Range
        Dim LOC As String
        Dim i As Integer
        Dim MaValeur As String
     
        Set WS = ThisWorkbook.Worksheets("Feuil1")
     
     
        '---
     
        With WS
           Mt() = .Range(.Cells(2, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 2))
        End With
        LOC = Range("F2").Value
        For i = 1 To UBound(Mt, 1)
            If Mt(i, 2) = Left(LOC, Len(Mt(i, 2))) Then
                MaValeur = Mt(i, 1)
                Exit For
            End If
     
        Next i
     
     
        '---
     
    End Sub

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 11/03/2014, 10h12
  2. [XL-2007] Code VBA pour remplacer le contenu de cellules
    Par tomlapomme dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 25/08/2010, 14h39
  3. Remplacer le contenu des cellules de destination
    Par cyraile dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2006, 08h23
  4. Réponses: 4
    Dernier message: 30/05/2006, 17h21
  5. [VBA]comptage de lignes en fonction du contenu des cellules
    Par calimero91 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/12/2005, 11h38

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