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 :

Cellules fusionnées- comparaison entre 2 feuilles


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nanoucha
    Invité(e)
    Par défaut Cellules fusionnées- comparaison entre 2 feuilles
    Bonjour,
    Voila, j'ai fait une macro qui me permet de comparer des données entre 2 feuilles et si elles sont identiques, je regroupe les données dans une seule feuille. Par contre, je ne gère pas les cellules fusionnées dans mes 2 feuilles. Ce qui fait que lorsque j'ai une cellule fusionnée, la comparaison se fait bien sauf pour les autres cellules non fusionnées. Si vous avez une idée, ça m'aiderai beaucoup. J'utilise Excel 2003...

    Voici en image ce que j'aimerai obtenir:

    Feuille1 Feuille2 Feuille résultats
    A 2 A coco A 2 coco
    5 C toto => B 7 toto
    B 7
    C 10

    Résultats que j'obtiens pour le moment:
    Feuille1 Feuille2 Feuille résultats
    A 2 A coco A 2 coco
    5 C toto => B 5 coco
    B 7
    C 10


    Voici mon 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
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    Sub MacroRechercheV()
     
     Dim FL1 As Worksheet, FL2 As Worksheet, FL3 As Worksheet
     Dim rngPlage As Range, MaRech As Range
     Dim DerLigne1 As Long, DerLigne2 As Long, DerLigne3 As Long 'Derligne par feuille
     Dim i As Long, k As Long, j As Long 'Pour la boucle
     Dim intCpteLignes As Long
     Dim rngPlageDonnees As Range
     
     
    ' Initialisation
     Set rngPlageDonnees = Nothing
     Set rngPlage = Nothing
     
     Set FL1 = Worksheets("FeuilleDestination")  'Affecte le nom de la feuille à la variable
     Set FL2 = Worksheets("FeuilleSource")
     Set FL3 = Worksheets("FeuilleResultats")
     
     DerLigne1 = FL1.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Def dernière ligne col. A
     DerLigne2 = FL2.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Def dernière ligne col. A
     DerLigne3 = FL3.Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'Def dernière ligne col. A
     
     DerCol = FL1.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column 'Def dernière colonne ligne 1
     DerCol2 = FL2.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
     
     
     FL1.Activate 'Nécessaire pour pouvoir affecter la variable rngPlage
     Set rngPlage = FL1.Range(Cells(1, 1), Cells(DerLigne1, 1)) 'Défini la plage de recherche
     
     k = 2 'affecte 2 car titre pour collage du résultat
     intCpteLignes = 2
     
    'Boucle de la ligne 2 (car titre) à la dernière ligne remplie de la col. A
     For i = 2 To DerLigne2 
        With rngPlage 'Sur base de la plage
            'Affecte l'élément à rechercher sur base de la col. A
            Set MaRech = .Find(FL2.Cells(i, 1).Value, LookIn:=xlValues)
            If Not MaRech Is Nothing Then 'Si la recherche est positive alors
                ' copie les données de FL1 dans FL3 (colonne A identique entre les 2)
                FL1.Range(Cells(MaRech.Row, 1), Cells(MaRech.Row, DerCol)).Copy (FL3.Cells(k, 1))
     
                ' Récupérer la dernière colonne de la feuille de Résultats
                DerCol3 = FL3.Cells(1, Rows(1).Cells.Count).End(xlToLeft).Column
     
                'Boucle permettant de copier toutes les autres colonnes de la feuille Source à la feuille résultats
                'dont la 1ère colonne est identique
                For j = 2 To DerCol2
                    FL3.Cells(k, (DerCol - 1) + j) = FL2.Cells(MaRech.Row, j).Value
                Next j
     
               'On incrémente k pour affecter à la ligne suivant le prochain élément trouvé
                k = k + 1
            End If
        End With
     Next i
     
     'Copier les entêtes de ma feuille Destination dans ma feuille Résultats
     ' Pour chaque colonne à la première ligne
     For i = 1 To DerCol
        FL3.Cells(1, i) = FL1.Cells(1, i).Value
     Next i
     
     'Copier les entêtes de ma feuille Source dans ma feuille Résultats
     ' Pour chaque colonne à la première ligne
     For i = 2 To DerCol2
        FL3.Cells(1, i + (DerCol - 1)) = FL2.Cells(1, i).Value
     Next i
     
     MsgBox "Fonction RechercheV réussie avec succès.", vbOKOnly + vbInformation, "Fonction RechercheV"
    Dernière modification par AlainTech ; 29/08/2009 à 06h40. Motif: Version par le préfixe

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,


    Sans regarder tout ton code, une remarque, les cellules fusionnées peuvent être de véritables casse tête dans le code, en as tu vraiment besoin ?

    Une solution est de tester si une cellule est fusionnée et dans ce cas ne pas lire la suivante (qui fait partie de la fusion).

    Un exemple pour tester les cellules :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    For Each cellule In plage.Cells
    
        If cellule.MergeCells Then
    '...

  3. #3
    Nanoucha
    Invité(e)
    Par défaut
    Bonjour,
    En effet, j'en ai vraiment besoin et je me suis rendue compte que c'était un casse-tête. Ton idée de vérifier si la cellule est fusionnée et dans ce cas ne pas lire la suivante est une bonne idée.

    Je vais essayer ton exemple et voir ce que j'obtiens comme résultat.

    Merci

    Bonne journée

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/03/2011, 09h43
  2. Probleme de comparaison entre deux cellules identiques
    Par GlamIS dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 04/07/2008, 14h50
  3. Recherche d'une plage de cellules identiques entre 2 feuilles Excel
    Par asayeh dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 30/06/2008, 22h39
  4. Copier une feuille(valeur seulement) avec cellule fusionnée
    Par carpediem2807 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 14/05/2008, 16h58
  5. Réponses: 1
    Dernier message: 24/01/2008, 09h13

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