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 - Macro comparative


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut VBA - Macro comparative
    Bonjour,
    Cela fait un moment que je cherche et j'avoue que je suis un peu perdu etant neophyte en VBA
    J'ai une feuille excel, contenant 3 colonnes, une Nom article déclassée, une ID et une Nom article classée, je souhaiterais parcourir la premiere colonne, pour chaque cellule aller parcourir la 3eme colonne pour y trouver le même texte et pouvoir recuperer l'Id associé(colonne 2) afin de l'ecrire dans une 4eme colonne et ainsi pouvoir obtenir le bon ID face au bon Nom article, j'ai essayé avec le fonction RECHERCHEV, avec des macro mais la je m'y perd...

    EX:
    pomme 1 poire
    abricot 2 marron
    noix 3 fraise
    pasteque 4 pomme

    Je voudrais que le 4 par ex. soit afficher dans une autre colonne face au pomme de la colonne 1 et ainsi de suite.
    La colonne 1 possede des doublons, par contre la colonne 3 ne possede pas de doublons.
    La colonne 1 possede 1300 lignes, pour 3600 pour la colonne 2 et 3

    J'espere avoir été assez concis.

    Est qu'un ame charitable pourrais me donner un coup de main?

    Un gros merci d'avance
    Cordialement

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Décembre 2011
    Messages
    1 186
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 186
    Par défaut
    Bonsoir,

    Un exemple pas optimisé, simplement basé sur de la comparaison de valeur "à la main".

    Un bon exercice serait de chercher à l'optimiser avec les fonction WorksheetFunction.VLookup() , équivalent VBA de la fonction RechercheV.

    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
    Const FirstCelUnfilteredName As String = "A2"
    Const FirstCelFilteredName As String = "C2"
     
    Private Sub CommandButton1_Click()
        Dim nbRows As Long
        nbRows = Range(FirstCelUnfilteredName).End(xlDown).Row
        Dim r As Range
        For Each r In Range(Range(FirstCelUnfilteredName), Cells(nbRows, Range(FirstCelUnfilteredName).Column))
            r.Offset(0, 3).Value = GetID(r.Value)
        Next r
    End Sub
     
    Function GetID(nomNonTrie As String) As String
        Dim nbRows As Long
        nbRows = [C2].End(xlDown).Row
        Dim r As Range
        GetID = "Inconnu"
        For Each r In Range(Range(FirstCelFilteredName), Cells(nbRows, Range(FirstCelFilteredName).Column))
            If r.Value = nomNonTrie Then
                GetID = r.Offset(0, -1).Value
            End If
        Next r
    End Function

  3. #3
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonsoir,

    Un autre exemple avec la méthode Find
    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 Test()
    Dim Ws1 As Worksheet
    Dim DerLig1 As Long, DerLig2 As Long
    Dim MaPlage1 As Range, MaPlage2 As Range, Cel As Range
        Set Ws1 = Worksheets("Feuil1")
        DerLig1 = Ws1.Range("A" & Ws1.Rows.Count).End(xlUp).Row
        DerLig2 = Ws1.Range("C" & Ws1.Rows.Count).End(xlUp).Row
        Set MaPlage1 = Ws1.Range("A1:A" & DerLig1)
        Set MaPlage2 = Ws1.Range("C1:C" & DerLig2)
        For Each Cel In MaPlage1
            Set c = MaPlage2.Find(Cel.Value, LookIn:=xlValues)
            If Not c Is Nothing Then Cel.Offset(0, 3) = c.Offset(0, -1)
        Next Cel
        Set Ws1 = Nothing
        Set MaPlage1 = Nothing
        Set MaPlage2 = Nothing
    End Sub
    Cordialement.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 14
    Par défaut
    Un grand merci à tous les 2... je vais essayer de voir ce que je peux en tirer

    Merci et bonne soirée

  5. #5
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Une autre approche sans vba
    En D2 la formule (que tu tires vers le bas):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(ESTNA(EQUIV(A2;$C$2:$C$3600;0));"";INDEX($B$2:$B$3600;EQUIV(A2;$C$2:$C$3600;0)))
    Qu'on peut appliquer par vba (et en figeant les valeurs)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
    Dim LastLig As Long, NbLig As Long
     
    Application.ScreenUpdating = False
    With Worksheets("Feuil1")                        'Adapte le nom de ta feuille
        LastLig = .Cells(.Rows.Count, "A").End(xlUp).Row
        NbLig = .Cells(.Rows.Count, "B").End(xlUp).Row
        With .Range("D2:D" & LastLig)
            .Formula = "=IF(ISNA(MATCH(A2,$C$2:$C$" & NbLig & ",0)),"""",INDEX($B$2:$B$" & NbLig & ",MATCH(A2,$C$2:$C$" & NbLig & ",0)))"
            .Value = .Value
        End With
    End With
    End Sub

Discussions similaires

  1. [VBA]macro Word avec données de MySQL
    Par Taz_8626 dans le forum VBA Word
    Réponses: 3
    Dernier message: 17/07/2006, 11h39
  2. [VBA-E] Comparer des cellules
    Par lutin06 dans le forum Macros et VBA Excel
    Réponses: 34
    Dernier message: 28/04/2006, 16h24
  3. [VBA-E] Comparer les valeurs entre classeur
    Par Mut dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/03/2006, 12h32
  4. [VBA-A] Comparer une valeur à nimporte quel caractère
    Par cuicui08 dans le forum VBA Access
    Réponses: 23
    Dernier message: 23/03/2006, 09h26
  5. [VBA-E]comparer contenu textbox et cellule
    Par DonKnacki dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 21/02/2006, 12h43

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