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 :

RechM - ignorer les cellules non vides [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut RechM - ignorer les cellules non vides
    Bonjour, voici mon premier message sur le site parce que je n'arrive pas à m'en sortir avec ces quelques lignes de codes, malgré toutes mes recherches... Merci par avance pour votre support!

    J'essaie d'utiliser le code disponible ici : http://boisgontierjacques.free.fr/fi...000Lignes.xlsm pour réaliser une recherche matricielle entre 1 base de plus de 65000 lignes et plusieurs feuilles de plusieurs milliers de lignes que je souhaite importer une par une.

    Or, à chaque import, toutes les cellules du champ résultat qui n'ont pas de clé correspondante dans la table source sont écrasées. J'aimerais conserver les données précédemment importées et donc que le code ignore les cellules non vides.

    Sauriez-vous où insérer cette condition?
    Merci!

    Voici le code:

    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
     
    Sub AppelSub()
      Set TableSource = Range("A2:B1200") ' champ table source
      Set ClésCherchées = Range("I2:I68000") ' champ des clés recherchées
      Set Résultat = Range("J2:J68000") ' champ résultat
      colResult = 2
      Rechv ClésCherchées, TableSource, 2, Résultat
    End Sub
     
    Sub Rechv(ClésCherchées, TableSource, colRésult, Résultat)
      Application.ScreenUpdating = False
      Set d = CreateObject("Scripting.Dictionary")
      a = TableSource.Value ' table source
      b = ClésCherchées.Value ' table des clés recherchées
      For i = LBound(a) To UBound(a)
        d(a(i, 1)) = a(i, colRésult)
      Next i
      Dim temp()
      ReDim temp(LBound(b) To UBound(b), 1 To 1)
      For i = LBound(b) To UBound(b)
        If d(b(i, 1)) <> "" Then temp(i, 1) = d(b(i, 1)) Else temp(i, 1) = ""
      Next i
      Résultat.Value = temp
    End Sub

  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 178
    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 178
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pourquoi ne t'adresses-tu pas directement à l'auteur lui-même ?
    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
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Bonne remarque! Mais je n'ai pas trouvé de moyen de la contacter via son site... C'est pour cela que je tente le forum. :-)
    Dernière modification par AlainTech ; 01/05/2016 à 18h38. Motif: Suppression de la citation inutile

  4. #4
    Invité
    Invité(e)
    Par défaut
    Bonjour à tous,

    Le principe est de conserver la colonne J en synthèse des résultats et de mémoriser ou non les résultats dans les colonnes suivantes.

    J'aurais vu un truc comme ça :
    Nb : Je me suis permis de typer et de modifier le nom des variables (pas de caractères accentués).

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    Sub AppelSub()
     
    Dim Reponse As Integer
     
    Dim ColResult As Long
    Dim ColonneCles As Long
    Dim ColonneResultat As Long
    Dim ColonneSyntheseResultat As Long
     
    Dim TableSource As Range
    Dim ClesCherchees As Range
    Dim Resultat As Range
    Dim CelluleResultat As Range
     
      With ActiveSheet
     
           ColonneCles = 9
           ColonneSyntheseResultat = ColonneCles + 1                 ' La colonne J sert à mémoriser les résultats
           .Cells(1, ColonneSyntheseResultat) = "Synthèse résultats" ' Au cas où cette cellule serait vide
     
           ColonneResultat = .Cells(1, .Columns.Count).End(xlToLeft).Column + 1
           With .Cells(1, ColonneResultat)
                .Value = "Calcul du " & Date  ' En admettant que les calculs soient datés en ligne 1 après la colonne synthèse
                .WrapText = True
           End With
     
           Set TableSource = .Range("A2:B1200")                                  ' champ table source
           Set ClesCherchees = .Range("I2:I68000")                               ' champ des clés recherchées
           Set Resultat = ClesCherchees.Offset(0, ColonneResultat - ColonneCles) ' champ résultat
           ColResult = 2
     
           Rechv ClesCherchees, TableSource, 2, Resultat
     
     
           ' Mémorisation du résultat dans la colonne synthèse si la cellule synthèse est vide.
           For Each CelluleResultat In Resultat
               If CelluleResultat <> "" And CelluleResultat.Offset(0, ColonneSyntheseResultat - ColonneResultat) = "" Then
                  CelluleResultat.Offset(0, ColonneSyntheseResultat - ColonneResultat) = CelluleResultat
               End If
           Next CelluleResultat
     
           ' On garde la trace du résultat ou non
           Reponse = MsgBox("Voulez-vous effacer la colonne résultat ?", vbYesNo)
           If Reponse = 6 Then Resultat.Clear
     
           Set TableSource = Nothing
           Set ClesCherchees = Nothing
           Set Resultat = Nothing
     
      End With
     
    End Sub
    Cordialement.

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

Discussions similaires

  1. [XL-2007] VBA - Compter les cellules non vides
    Par Monkey_D.Luffy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 13/05/2010, 18h24
  2. Compter les cellules non vides
    Par Domino40 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2009, 19h49
  3. ignoré si cellule non vide
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 10/02/2009, 22h55
  4. Sélectionner toutes les cellules non vides d'une feuille
    Par Cantalou dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 16h38
  5. [EXCEL][VBA] Compter les cellules non-vides
    Par Squelet dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 27/02/2006, 15h40

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