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 :

comparaison de range [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juin 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 89
    Par défaut comparaison de range
    Bonjour,
    Je cherche un moyen de comparer deux range (qui représenteront des lignes de longueurs variables, par forcément même longueur). Ces deux ranges seront dans deux fichiers différents (juste pour info)

    car la comparaison if range1 = range2 ne fonctionne pas.


    J'ai vu qu'il existait la méthode rowdifference mais celle-ci compare le range à une seule cellule.

    Moi je voudrais que la comparaison soit faite colonne par colonne, c'est à dire
    colonne 1 du range1 avec colonne 1 du range 2
    colonne 2 du range1 avec colonne 2 du range 2
    colonne 3 du range1 avec colonne 3 du range 2 ...
    et ceci jusqu'au max (derniere colonne range1, dernière colonne range2)
    indiquant donc l'éventuelle différence de longueur entre les deux range.

    J'ai déjà mis au point un algo qui faisait la comparaison cellule par cellule mais je voulais voir si il y avait plus rapide. Avec une méthode par exemple.

  2. #2
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Bonjour

    Pourrais tu précisez ce que tu entends par range, l'objet range pouvant etre une cellule, une ligne, une colonne, un ensemble de cellule.
    Tu as le nez sur ton projet, la question est donc evidente pour toi, perso je comprends pas ce que tu veux obtenir, et je pense que je serai pas le seul.

    D'apres ce que j'en comprends, tu veux comparer
    Classeur1, colonne1, nombre de cellule rempli = classeur2, colonne1, nombre de cellule rempli
    auquel cas il suffit de comparer le n° de ligne de la derniere occurrence de chaque colonne, de chaque classeur

    je pense que tu cherche quelque chose de plus complexe.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juin 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 89
    Par défaut
    Ces ranges (range1 et range 2) représentent chacun une ligne de deux documents que je souhaite comparer.
    Ces lignes n'ont pas forcément le même nombre de colonnes. Je souhaite donc que la comparaison soit faite jusqu'au numéro de colonne de la ligne la plus longue.

    J'espère que c'est plus claire.

  4. #4
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Pense tu pouvoir t'en sortir avec l'une des deux lignes ci-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range(Cells(1, 1), Cells(1, Cells(1, 1).End(xlToRight).Column)).Select
    Cells(Cells(1, Cells(1, 1).End(xlToRight).Column)).Select
    Faut il comparer le nombre de cellule composant la ligne ou bien le contenu de chaque cellule une a une ?
    en cas de cellule vide dans la ligne, on peut aussi trouver la derniere cellule de la ligne avec le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells(Cells(1, Cells(1, 255).End(xlToleft).Column)).Select

  5. #5
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juin 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 89
    Par défaut
    Je veux comparer le contenu de chaque cellule une a une si la ligne est différente pour trouver ou sont les différences.
    Mais si les deux lignes sont identique, je voudrais m'éviter de parcourir une à une les cellules.

    En gros un algo

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if range1 <> range 2 then
    for x = 1 to range1.cells(1,columns.count).end(xltoleft).column
    if range1.cells(1,x) <> range2.cells(1,x)
    ...
    Endif
    next x
    Endif
    Et dans cet algo, je me demande comment coder la première ligne

  6. #6
    Membre émérite Avatar de keygen08
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    545
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Octobre 2012
    Messages : 545
    Par défaut
    Un truc dans le genre, a coller dans la feuille du premier classeur ouvert

    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
    Private Sub comparer()
    Dim cls As Workbook
    Dim l As Integer, c As Integer
     
    Set cls = Application.Workbooks.Open("c:\ton_deuxieme_classeur.xlsm", , True) 'ouvre le classeur pour comparaison
    ThisWorkbook.Activate
    Windows.CompareSideBySideWith cls.Name
     
    For l = 1 To Cells(65000, 2).End(xlUp).Row 'pour toute les lignes depuis la ligne 1
        For c = 1 To Cells(l, 255).End(xlToLeft).Column ' pour toutes les colonnes de cette lignes
            If Cells(l, c) <> cls.Sheets(1).Cells(l, c) Then 'compare une a une le contenu de chaque cellule
                MsgBox "cette cellule est differente" 'arrete la macro et pointe la cellule inegale
                ActiveWorkbook.ActiveSheet.Cells(l, c).Select
                Exit Sub
            End If
        Next c
    Next l
    csl.Close False 'ferme sans enregistrer le deuxiemme classeur
    End Sub

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

Discussions similaires

  1. [XL-2010] Recherche d'une range et comparaison du max en VBA
    Par Novagsk dans le forum Excel
    Réponses: 2
    Dernier message: 02/11/2014, 09h06
  2. [VBA-E] Comparaison de 2 Range
    Par moicwill dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 27/06/2006, 16h36
  3. comparaison de 2 dates
    Par eisti dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/08/2003, 11h33
  4. Comparaison JBuilder avec Sun ONE Studio
    Par chichos dans le forum EDI et Outils pour Java
    Réponses: 4
    Dernier message: 13/11/2002, 15h08
  5. Comparaison d'un registre 8 bits avec une variable 32 bits
    Par tupperware dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 15/10/2002, 10h25

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