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 :

Verifier et comparer entete de deux tableaux


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Points : 94
    Points
    94
    Par défaut Verifier et comparer entete de deux tableaux
    Bonjour le forum,


    J'ai encore une fois besoin de votre aide.

    J'ai deux tableaux qui doivent contenir la meme entetes dans deux fichiers distincts.

    Je souhaiterais verifier si mon entete (voir code ci dessous) de mon premier tableau (classeur original) correspondant à l'entete du deuxieme tableau (classeur test):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    'entete à tester
    Range(Cells(1, 2), Cells(8, maxcol))
    S'il y a des données qui manquent dans l'entete du tableau du classeur test, rajouter une colonne supplementaire et inserer ces données.

    Merci pour votre aide.

  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
    12 802
    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 : 12 802
    Points : 28 690
    Points
    28 690
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Un petit exemple parmi d'autres
    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
    Option Explicit
    Sub Test()
     Dim sht1 As Worksheet, sht2 As Worksheet
     Dim Tableau1 As Range, Tableau2 As Range
     Dim column As Byte
     Dim maxcol As Byte: maxcol = 3
     With ThisWorkbook
      Set sht1 = .Worksheets("Feuil1"):  Set sht2 = .Worksheets("Feuil2"):
     End With
     With sht1: Set Tableau1 = .Range(.Cells(1, 2), .Cells(4, maxcol)): End With
     With sht2: Set Tableau2 = .Range(.Cells(1, 1), .Cells(8, maxcol)): End With
     For column = 1 To maxcol
      If Tableau1.Cells(1, column) <> Tableau2.Cells(1, column) Then MsgBox "Titre colonne " & column & " différent"
     Next
    End Sub
    Ce code vérifie les cellules de la première ligne de chaque tableau sur MaxCol colonnes (ici 3).
    Les tableaux sont sur les feuilles Feuil1 et Feuil2
    Il y a évidemment moyen de vérifier si le nombre de colonnes sont identiques auquel cas on sait déjà qu'il y a une différence et on pourrait aussi mettre tout en majuscule pour éviter de considérer comme erreur Nom et NOM
    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
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Points : 94
    Points
    94
    Par défaut
    Bonjour,

    Merci tout d'abord pour la reponse!

    Elle est bien ta macro, elle permet de detecter toutes les differences dans chaque colonne, sous forme de message d'erreurs.

    Mais en fait ce que j'essaie de faire ce serait plutot de tester si la premiere ligne de mon premier tableau figure (original) dans le deuxieme tableau (test)

    Si une ligne n'existe pas ce serait d'inserer une nouvelle colonne et de mettre la colonne manquante dans le deuxieme tableau.

    Je vous met en fichier joint le fichier excel(peut etre pour plus de comprehension).

    Merci d'avance
    Fichiers attachés Fichiers attachés

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 802
    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 : 12 802
    Points : 28 690
    Points
    28 690
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Le code compare colonne par colonne les 2 premières lignes du tableau, ce que tu n'avais pas précisé, et si elle sont différentes copie la colonne du Tableau1 et l'insère dans le tableau2 au même n° de colonne.
    Contrainte : Les deux tableaux doivent commencer en A1 et le nombre de lignes doit être identique.
    Cela suppose aussi qu'il n'y a pas de mélange dans les colonnes. Il faudrait alors envisager de créer deux tables avec le n° d'ordre des colonnes, trier ces tables et ensuite comparer.
    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
    Option Explicit
    Sub Test()
     Dim sht1 As Worksheet, sht2 As Worksheet
     Dim Tableau1 As Range, Tableau2 As Range
     Dim column As Byte
     Dim Addr As String
     With ThisWorkbook
      Set sht1 = .Worksheets("original"):  Set sht2 = .Worksheets("Test"):
     End With
     With sht1: Set Tableau1 = .Range("A1").CurrentRegion: End With
     With sht2: Set Tableau2 = .Range("A1").CurrentRegion: End With
     For column = 1 To Tableau1.Columns.Count
      If Tableau1.Cells(1, column) & Tableau1.Cells(2, column) <> Tableau2.Cells(1, column) & Tableau2.Cells(2, column) Then
       MsgBox "Titre colonne " & column & " différent"
       With Tableau1
       Addr = .Range(.Cells(1, column), .Cells(.Rows.Count, column)).Address
       .Range(Addr).Copy:  Tableau2.Range(Addr).Insert Shift:=xlToRight
       End With
      End If
     Next
    End Sub
    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

  5. #5
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Points : 94
    Points
    94
    Par défaut
    Merci Corona,

    Bravo, ton code fonctionne supeeeeeeer bien dans mon cas !!!!!

    Si je veux l'adapter: si je fais le meme test mais d'une feuille d'un classeur X vers une autre feuille d'un classeur Y, est ce possible (sachant que les deux feuilles peuvent porter le meme nom : genre "original")?

    J'ose esperer que c'est possible de faire la meme comparaison pour deux classeurs differents mais portant le même nom pour les feuilles.

    Je sais pas si j'ai etait bien clair


    En tout cas merci!!!!

  6. #6
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 802
    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 : 12 802
    Points : 28 690
    Points
    28 690
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Bien sûr c'est possible. Il faut modifier ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     With ThisWorkbook
      Set sht1 = .Worksheets("original"):  Set sht2 = .Worksheets("Test")
     End With
    Par (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set sht1 = ThisWorkbook.Worksheets("original")
    Set sht2 = Workbooks("maCopie.xls").Worksheets("Test")
    ThisWorkbook représente le classeur où se trouve le code VBA
    Workbooks("maCopie.xls") le nom d'un fichier ouvert. Le suffixe (xls) est obligatoire.
    Contrainte : Les 2 classeurs doivent être ouverts. Il est possible de le faire avec des classeurs fermés mais alors il faut utiliser une autre techinque.
    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

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2012
    Messages
    65
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Transports

    Informations forums :
    Inscription : Janvier 2012
    Messages : 65
    Points : 94
    Points
    94
    Par défaut
    Merci Corona,


    Juste une derniere question : pour faire tourner la macro de la feuille 2 à la feuille 10 des deux classeurs, faut faire comment?

    Est ce qu'il faut que je rajoute sht1 et sht2 à chaque debut de Tableau1 et Tableau2?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for i =2 to 10
    If sht1(i).Tableau1.Cells(1, column) & sht1(i).Tableau1.Cells(2, column) <> sht2(i).Tableau2.Cells(1, column) & sht2(i).Tableau2.Cells(2, column) Then
    With Tableau1
       Addr = .Range(.Cells(1, column), .Cells(.Rows.Count, column)).Address
       .Range(Addr).Copy:  Tableau2.Range(Addr).Insert Shift:=xlToRight
       End With
      End Ifnext i
    Je te remercie pour ton code et pour ton aide aussi.

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

Discussions similaires

  1. Comparer deux tableaux
    Par Boubou382002 dans le forum Excel
    Réponses: 19
    Dernier message: 12/11/2008, 19h20
  2. [Tableaux] Comparer deux tableaux
    Par popy67 dans le forum Langage
    Réponses: 2
    Dernier message: 05/05/2008, 07h22
  3. Comparer deux tableaux
    Par gefrey54 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 12/09/2007, 10h58
  4. comparer deux tableaux
    Par djibril dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2005, 15h26

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