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 :

[VA-E] trier des données avec macro VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut [VA-E] trier des données avec macro VBA
    bonjour

    voilà mon soucis est le suivant :

    j'ai deux classeurs Excel contenant chacun 4 colonnes

    je dois comparer ses deux classeurs (qui sont dans deux fichiers différents) pour afficher le résultats dans un nouveau classeur.

    Ce classeur résultat devant contenir trois feuilles :
    une pour les ajouts, une pour les modifications et une une pour les suppression.
    chacune de ces trois feuilles de résultats reprenant les 4 colonnes de départ.

    tout cela devrait etre lancé dans une macro Excel de façon simple pour l'utilisateur.

    En gros j'ai jusqu'à la fin de la semaine.

    Voilà maintenant j'ai ça comme script :

    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
    Sub ComparaisonTableau()
     
    Dim RG1 As Range, RG2 As Range
    Dim Tblo1, Tblo2, Rg3 As Range
    Dim A As Long, B As Integer, C As Long, D As Integer
     
    Set RG1 = Sheets("Feuil1").Range("A1:A10") 'Tabeau 1
    Set RG2 = Sheets("Feuil2").Range("A1:A10") 'Tableau 2
    Set Rg3 = Sheets("Feuil3").Range("A1") 'Tableau des résultats
     
    If RG1.Rows.Count <> RG2.Rows.Count Then
    MsgBox "Le tableau n'a pas le même nombre de lignes"
    Exit Sub
    End If
    If RG1.Columns.Count <> RG2.Columns.Count Then
    MsgBox "Le tableau n'a pas le même nombre de colonnes"
    Exit Sub
    End If
     
    Tblo1 = RG1: Tblo2 = RG2: D = 1
    Application.ScreenUpdating = False
    For A = 1 To UBound(Tblo1, 1)
    For B = 1 To UBound(Tblo1, 2)
    If Tblo1(A, B) <> Tblo2(A, B) Then
    C = C + 1
    Rg3(C, D) = RG1(A, B).Address(0, 0)
    Rg3(C, D).Offset(, 1) = Tblo1(A, B)
    Rg3(C, D).Offset(, 2) = RG2(A, B).Address(0, 0)
    Rg3(C, D).Offset(, 3) = Tblo2(A, B)
    End If
    Next
    Next
     
    Set RG1 = Nothing: Set RG2 = Nothing: Set Rg3 = Nothing
    Erase Tblo1: Erase Tblo2
    End Sub
    le probleme de celui ci c'est qu'il ne permet de faire des comparaison qu'entre deux feuilles et pas deux classeur et que je ne peut pas lui faire un filtre sur des termes précis, de plus j'aurai souhaité avoir un classeur résultats contenant trois feuilles :

    _ une pour les modif
    _ une pour les ajouts
    _ une pour les supression

    conaîtriez vous un script qui puisse me faire (ou qui s'en rapproche) ?
    ou éventuellement des astuces pour créer ce script ?

    PS : j'ai déjà trouvé des progs qui font à peu pres ça mais ça me donne jamais ce que je veut (Diff Doc, Excel Compare ...)

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Tu devrais travailler avec des objets WorkBook. De plus, point n'est besoin de passer par des tableaux, tu peux directement comparer tes feuilles.

    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
     
    Sub Comparer()
        Dim wk1 As Workbook ' Classeur 1
        Dim wk2 As Workbook ' Classeur 2
        Dim wk3 As Workbook ' Classeur de résultat
     
        Dim Plage1 As Range ' Plage du classeur1
        Dim Plage2 As Range ' Plage du classeur 2
     
        Dim Ligne As Long, Colonne As Integer ' Positionnement de la cellule dans la plage
     
        Set wk1 = Workbooks("Comparaison1.xls")
        Set wk2 = Workbooks("Comparaison2.xls")
        Set wk3 = Workbooks("resultatcomparaison.xls")
     
        Set Plage1 = wk1.Worksheets("feuil1").Range("a1:a10")
        Set Plage2 = wk2.Worksheets("feuil1").Range("a1:a10")
     
        For Ligne = 1 To Plage1.Rows.Count ' on itère sur le lignes DE LA PLAGE
            For Colonne = 1 To Plage1.Columns.Count ' et sur les colonnes DE LA PLAGE
                If Plage1.Cells(Ligne, Colonne) <> Plage2.Cells(Ligne, Colonne) Then
                    MsgBox "Différence sur la cellule " & Plage1.Cells(Ligne, Colonne).Address ' Affichage si <>
                End If
            Next Colonne
        Next Ligne
     
        Set Plage1 = Nothing
        Set Plage2 = Nothing
        Set plage3 = Nothing
    End Sub
    Il reste à remplacer la ligne de message par le code affectant le classeur de résultat, mais je n'ai pas compris ce que tu souhaitais obtenir, ni ce que tu entendais par "ajouts, modifications et suppressions"
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    en gros

    je voudrai que dans un classeur Excel qui serait le fichier résultat j'ai trois feuilles Excel

    _ une m'indiquant toute les lignes qui ont été ajouté dans les différentes colonnes
    _ une m'indiquant toute les lignes qui ont été suprimé
    _ une m'indiquant tout les ligne qui ont été ajouté

  4. #4
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    je vais peut etre posé une question débile :

    mais les macro VB pour Excel on peut les faire avec VB Express gratuit ou faut passer par VB 6 ?

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par M@XflY
    en gros

    je voudrai que dans un classeur Excel qui serait le fichier résultat j'ai trois feuilles Excel

    _ une m'indiquant toute les lignes qui ont été ajouté dans les différentes colonnes
    _ une m'indiquant toute les lignes qui ont été suprimé
    _ une m'indiquant tout les ligne qui ont été ajouté
    Le tout est de savoir comment déterminer les lignes ajoutées. Ajoutées ou supprimées par rapport à quoi? Par rapport à ta feuille récapitulative qui contiendrait déjà des données?

    Peux-tu donner un petit exemple? Une liste avec 3 ou 4 données, une deuxième avec quelques données et une troisième avec ce que tu souhaites obtenir comme résultat?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  6. #6
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    bon en gros tu as deux enregistrement de fichiers Excel identique séparé d'un mois d'équart, l'un étant la mise à jouir de l'autre (par exemple un fichier pour janvier l'autre pour février) :

    il contiennent chacun quatre colonnes :

    Marque / Modèle / Code TAC / Bearer

    il s'agit ici de telephones portable
    le Code Tac est une suite de chiffre, le Bearer c'est la technologie utilisé (
    2G, 3G ...)

    et donc en gros je souhaite comparer ses deux fichiers qui sont sur la meme base (nom des colonnes et nombre identique) et sortir un troisième tableur.

    Et dans ce tableur tu aura trois feuille Excel :
    _ une indiquant les changements effectué dans les quatres colonne entre les deux classeurs Excel
    _ une indiquant les ajouts qui ont été fait de portable (avec Marque, Modele ...) entre les deux enregistrement
    _ et une derniere indiquant les suppression qui aurait été fait d'un mois sur l'autre

    voilà

    je travaille sur ton script, merci pour le tuyau si tu as d'autre suggestion

    PS : par contre je voudrai savoir :
    les macro VB pour Excel on peut les faire avec VB Express gratuit ou faut passer par VB 6 ?
    car je vois pas trop ou je cole ton script et comment je le test ?

  7. #7
    Membre confirmé Avatar de M@XflY
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 95
    Par défaut
    bon j'ai essayé ton script mais il me renvoie une erreur
    en gros pour la sélection du deuxieme workbook il me dit que l'indice n'appartient pas à la sélection

    en gros je pense qu'il ne trouve pas le fichier

    je vais essayé de debugger pour voir

  8. #8
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par M@XflY
    ...
    PS : par contre je voudrai savoir :
    les macro VB pour Excel on peut les faire avec VB Express gratuit ou faut passer par VB 6 ?
    car je vois pas trop ou je cole ton script et comment je le test ?
    Le plus simple est de créer les macros dans le classeur Excel. Alt+F11 ou Outils/Macros/Visual Basic Editor pour entrer dans l'éditeur de VBA.

    Pour ce qui est du code de comparaison proprement dit, je regarde et te dis quoi...
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. Problème Macro pour trier des données
    Par lmb19 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/11/2010, 00h00
  2. Graphique avec des données précises en vba
    Par seyflo dans le forum Excel
    Réponses: 10
    Dernier message: 25/05/2010, 09h47
  3. trier des données excel grâce à VBA
    Par fred2949 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 09/01/2008, 19h27
  4. Trier des données xls via macro VB
    Par Ch0rizz0_boulo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 06/09/2007, 14h14
  5. [Tableaux] Trier des données avec des tableaux
    Par yobogs dans le forum Langage
    Réponses: 2
    Dernier message: 31/10/2006, 13h39

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