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 :

[VBA EXCEL] Comparaison d'entête de colonne


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut [VBA EXCEL] Comparaison d'entête de colonne
    Bonjour a tous ,voila je vous presente mon code avant mon petit probleme:


    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
    Sub comparaison()
    Sheets.Add
    Worksheets("Feuil1").Select
    Range("A1").Select
        ActiveCell.FormulaR1C1 = "Intervenant"
        Range("B1").Select
        ActiveCell.FormulaR1C1 = "Type de ligne"
        Range("C1").Select
        ActiveCell.FormulaR1C1 = "Salaire brut mensuel"
        Range("D1").Select
        ActiveCell.FormulaR1C1 = "Nb jours potentiels"
        Range("E1").Select
        ActiveCell.FormulaR1C1 = "Nb jours facturables"
        Range("F1").Select
        ActiveCell.FormulaR1C1 = "Nb jours hors projet"
        Range("G1").Select
        ActiveCell.FormulaR1C1 = "Nb jours d'absences"
        Range("H1").Select
        ActiveCell.FormulaR1C1 = "Coût des notes de frais"
        Range("I1").Select
        ActiveCell.FormulaR1C1 = "Coût direct"
        Range("J1").Select
        ActiveCell.FormulaR1C1 = "TJM"
        Range("K1").Select
        ActiveCell.FormulaR1C1 = "C.A Intervenant"
        Range("L1").Select
        ActiveCell.FormulaR1C1 = "C.A Total"
        Range("M1").Select
        ActiveCell.FormulaR1C1 = "Responsable d'entretien"
        Range("N1").Select
    Dim tableau(13) As String
    Dim i As Integer
    Dim cel As Range
    Set cel = Range("A1")
    For i = 1 To 13
      tableau(i) = cel.Offset(0, i)
      Next i
     
     
    Worksheets("Liste_Etats_Production").Select
    Dim tableau2(37) As String
    Dim j As Integer
    Dim cel2 As Range
    Set cel2 = Range("A1")
    For j = 1 To 37
      tableau2(j) = cel2.Offset(0, j)
      Next j
     
     
    End Sub
    Donc voila mon probleme est en fait que je voudrait comparer les 13 entête de collone qui sont ranger dans "tableau" au entête de collone dans "tableau2", et si une entête de collone de tableau2 est differente de tableau alors il faut supprimer la collone en question.Mon but c'est de garder toutes
    les collone de tableau2 ayant le meme nom d'entête que tableau(Intervenant Type de ligne, Salaire brut mesuel ,Nb jours potentiels, Nb jours facturables ,Nb jours hors projet ,Nb jours d'absence ,Coût direct Coût des notes de frais TJM ,C.A Intervenant ,C.A Total Responsable d'entretien) quelque soit le nom des entête de collone de tableau2.


    J'espere avoir été assez explicite.
    Merci de vos future reponse

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bonjour Keitarokun, bienvenue sur le forum.
    Tu ne le sais pas encore mais le code doit être balisé afin d'être plus facilement visible. Pour ça, il suffit de le sélectionner et de faire un clic sur l'icône # qui apparaît en mode d'édition du message. Pour corriger, tu as le bouton Editer en bas de ton message.
    A+

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Déjà tu peux simplifier la premier partie pour renseigner les en-têtes de la feuille de calculs (il n'est jamais bon de sélectionner cellule ou feuille, ça alourdit le code et ralentit les procédures. Un exemple de ce que tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim En_Tetes, NoCol as byte
    Sheets.Add
    Worksheets("Feuil1").Select
    En_Tetes = Array("", "Intervenant", "Type de ligne", "Salaire brut mensuel", "Nb jours potentiels", "Nb jours facturables", "Nb jours hors projet", "Nb jours d'absences", "Coût des notes de frais", "Coût direct", "TJM", "C.A Intervenant", "C.A Total", "Responsable d'entretien")
    For NoCol = 1 To UBound(En_Tetes)
        Cells(1, NoCol) = En_Tetes(NoCol)
    Next
    Pour la comparaison des en-têtes, je te propose d'utiliser "Join" qui te permettra de verifier dans celui des entêtes de ta feuille ajoutée, l'existence d'un entête de la feuille existante ("Liste_Etats_Production"). Pas besoin d'un tableau.
    Tu commences par définir la dernière colonne existante et tu vérifies que chaque entête existe dans le tableau précédent (En_Tetes). Si elle n'existe pas, tu supprimes la colonne (si c'est bien ce que tu veux faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Dim DerniereColonne as byte
    Dim Fl2 as worksheet
    Set Fl2 = Worksheets("Liste_Etats_Production")
    DerniereColonne = Fl2.Range("IV1").End(xlToLeft).Column
    For NoCol = DerniereColonne to 1 step -1
         If not(Instr(Lcase(Join(En_Tetes)), Lcase(FL2.Cells(1,NoCol).value )<> 0) then _
              FL2.Columns(NoCol).delete
    Next
    Je n'ai pas testé cette dernière partie mais ça devrait aller.
    Si tu as un pb, tu dis
    A+

  4. #4
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup je teste sur le champs ta solution et je te tient au courant.

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Attention : Je n'ai pas tenu compte de la casse (majuscule ou minuscule) mais on peut également arranger ça
    Tu dis
    A+

  6. #6
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Voila j'ai tester ton code il est sous cette forme:

    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 comparaison()
     
     
    Dim En_Tetes, NoCol As Byte
       Sheets.Add
       Worksheets("Feuil1").Select
       En_Tetes = Array("", "Intervenant", "Type de ligne", "Salaire brut mensuel", "Nb jours potentiels", "Nb jours facturables", "Nb jours hors projet", "Nb jours d'absences", "Coût des notes de frais", "Coût direct", "TJM", "C.A Intervenant", "C.A Total", "Responsable d'entretien")
       For NoCol = 1 To UBound(En_Tetes)
       Cells(1, NoCol) = En_Tetes(NoCol)
       Next
     
     
    Dim DerniereColonne As Byte
      Dim Fl2 As Worksheet
      Set Fl2 = Worksheets("Liste_Etats_Production")
      DerniereColonne = Fl2.Range("IV1").End(xlToLeft).Column
      For NoCol = DerniereColonne To 1
      If not(Instr(Join(En_Tetes),FL2.Cells(1,NoCol).value <> 0) then _
              FL2.Columns(NoCol).delete
     
     
     
    Next
    Cependant cela me fait un erreur de compilation (erreur de sintaxe) le probleme viendrai de cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If not(Instr(Join(En_Tetes),FL2.Cells(1,NoCol).value <> 0) then _
              FL2.Columns(NoCol).delete

    Merci d'avance.

  7. #7
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Il est vrai que le probleme des majuscule et minuscule pourai ce poser plus tard car c'est un programme pour une entreprise et surtout j'ai commencer VBA il y a 2 jours , je suis plus orienter c,c++ mais malheureusement je doit le faire en VBA donc ton aide m'est tres precieuse.

  8. #8
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    JE croit que je vient de trouver l'erreur il manquait une parenthese dans cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    If Not (InStr(Join(En_Tetes), Fl2.Cells(1, NoCol).Value <> 0)) Then _
      F12.Columns(NoCol).Delete
    Cependant cela ne fonctionne pas totalement.
    En effet le code créée bien la Feuil1 avec le nom des entêtes de collone mais dans Liste_Etats_Production cela ne supprime pas les colline qui sont differentes
    des entête de Feuil1. Une petite idée?

  9. #9
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Montre ton code, je soupçonne une erreur qui m'est imputable mais je ne suis pas sûr.
    A+

  10. #10
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    voila 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
    Sub comparaison()
     
    Dim En_Tetes, NoCol As Byte
       Sheets.Add
       Worksheets("Feuil1").Select
       En_Tetes = Array("", "Intervenant", "Type de ligne", "Salaire brut mensuel", "Nb jours potentiels", "Nb jours facturables", "Nb jours hors projet", "Nb jours d'absences", "Coût des notes de frais", "Coût direct", "TJM", "C.A Intervenant", "C.A Total", "Responsable d'entretien")
       For NoCol = 1 To UBound(En_Tetes)
       Cells(1, NoCol) = En_Tetes(NoCol)
       Next
     
     
     
     
    Dim DerniereColonne As Byte
    Dim Fl2 As Worksheet
    Set Fl2 = Worksheets("Liste_Etats_Production")
    DerniereColonne = Fl2.Range("IV1").End(xlToLeft).Column
    For NoCol = DerniereColonne To 1
            If Not (InStr(Join(En_Tetes), Fl2.Cells(1, NoCol).Value <> 0)) Then _
               Fl2.Columns(NoCol).Delete
    Next
    End Sub

  11. #11
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Ok, c'est bon. J'ai crains que tu utilises F12 au lieu de FL2.
    Donc, il semblerait que tu aies un pb de casse (majuscules dans les entêtes différentes dans la feuille FL2, de celles de ton tableau) (?)
    Teste la ligne suivante en remplacement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            If Not (InStr(lcase(Join(En_Tetes)), lcase(Fl2.Cells(1, NoCol).Value) <> 0)) Then _
               Fl2.Columns(NoCol).Delete
    Tu dis
    A+

    Edit
    Non, à la réflexion ça ne peut pas être ça, sinon toutes tes colonnes seraient effacées
    Je regarde
    A+

    J'ai trouvé ! Quel c.. !
    Tu dois mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For NoCol = DerniereColonne To 1 step - 1

    Tu testes tout de même (en corrigeant la ligne ci-dessus) mais en ajoutant la modif du dernier code que j'ai mis (lcase pour les deux variables)
    A+

  12. #12
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    J'ai tester ce que tu a dit sans resultat je chercher aussi de mon coter.
    merci.

  13. #13
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    actuellement mon code donne sa :
    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
    Sub comparaison()
     
    Dim En_Tetes, NoCol As Byte
       Sheets.Add
       Worksheets("Feuil1").Select
       En_Tetes = Array("", "Intervenant", "Type de ligne", "Salaire brut mensuel", "Nb jours potentiels", "Nb jours facturables", "Nb jours hors projet", "Nb jours d'absences", "Coût des notes de frais", "Coût direct", "TJM", "C.A Intervenant", "C.A Total", "Responsable d'entretien")
       For NoCol = 1 To UBound(En_Tetes)
       Cells(1, NoCol) = En_Tetes(NoCol)
       Next
     
     
     
     
    Dim DerniereColonne As Byte
    Dim Fl2 As Worksheet
    Set Fl2 = Worksheets("Liste_Etats_Production")
    DerniereColonne = Fl2.Range("IV1").End(xlToLeft).Column
    For NoCol = DerniereColonne To 1 Step -1
            If Not (InStr(LCase(Join(En_Tetes)), LCase(Fl2.Cells(1, NoCol).Value) <> 0)) Then _
            Fl2.Columns(NoCol).Delete
    Next
    End Sub
    Cependant sa me fait un depassement de capaciter lorsque je lance si tu peut me confirmer si mon code est bon
    merci.



    D'apres le debuggeur sa vient de la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For NoCol = DerniereColonne To 1 Step -1

  14. #14
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    ok j'ai tester avec sa
    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
    Sub comparaison()
     
    Dim En_Tetes, NoCol
       Sheets.Add
       Worksheets("Feuil1").Select
       En_Tetes = Array("", "Intervenant", "Type de ligne", "Salaire brut mensuel", "Nb jours potentiels", "Nb jours facturables", "Nb jours hors projet", "Nb jours d'absences", "Coût des notes de frais", "Coût direct", "TJM", "C.A Intervenant", "C.A Total", "Responsable d'entretien")
       For NoCol = 1 To UBound(En_Tetes)
       Cells(1, NoCol) = En_Tetes(NoCol)
       Next
     
     
     
     
    Dim DerniereColonne
    Dim Fl2 As Worksheet
    Set Fl2 = Worksheets("Liste_Etats_Production")
    DerniereColonne = Fl2.Range("IV1").End(xlToLeft).Column
    For NoCol = DerniereColonne To 1 Step -1
            If Not (InStr(LCase(Join(En_Tetes)), LCase(Fl2.Cells(1, NoCol).Value) <> 0)) Then _
            Fl2.Columns(NoCol).Delete
     
    Next
    End Sub
    Cela supprimer toutes les collone dans la feuille Liste_Etats_Production bizarre

  15. #15
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Bon, là je suis aveugle. Ça t'ennuierait de mettre ton fichier, simplement avec la feuille 2 et les entêtes de colonnes ?
    Tu le zippes (.zip), ne fais pas un .rar, nous n'avons pas tous la licence.
    A+

  16. #16
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    voila normalement, cependant il se peut qu'on rajoute ou retire des collone j'essaille de le faire fonctionner dans cette optique la, c'est a dire pas dans une optique fixe mais une optique ou on modifie les entête c'est assez compliquer faut le dire
    Fichiers attachés Fichiers attachés

  17. #17
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Points : 15 546
    Points
    15 546
    Par défaut
    Quelle andouille je fais : une parenthèse mal placée et paf ! Plein dans la poire (parce que je suis toujours correct )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            If Not (InStr(LCase(Join(En_Tetes)), LCase(Fl2.Cells(1, NoCol).Value)) <> 0) Then _
            Fl2.Columns(NoCol).Delete
    Je teste de mon côté mais fais-en autant du tien
    A+

    Edit
    Testé, Ok !

  18. #18
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    ok bah bonne nouvelle sa marche tu vient de resoudre un gros probleme merci beaucoup j'aurait peut etre une autre question dans pas lompgtemps donc je laisse le post non resolu encore merci a toi.
    je vient de retester il manque des collone je recommence les testes.

  19. #19
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    Ok il manque les Collone : C.A Intervenant C.A Total dans Liste_Etats_Production et

    Coût direct Coût des notes de frais s'inverse

    donc mes 2 derniere question serait comment garder le meme ordre des collone que dans Feuil1 et pourquoi C.A Intervenant C.A Total on disparut?

    je cherche de mon coter merci.
    j'ai ma petite idee pour la disparition de C.A. Intervenant C.A. Total cela doit etre a cause des "."

  20. #20
    Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 14
    Points : 2
    Points
    2
    Par défaut
    ok j'ai trouver pourquoi C.A.Intervenant et C.A. Total disparaissait c'est parce que dans le code c'etait Note C.A Intervenant et C.A Total en gros il manquait un "." dans les 2.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     En_Tetes = Array("", "Intervenant", "Type de ligne", "Salaire brut mensuel", "Nb jours potentiels", "Nb jours facturables", "Nb jours hors projet", "Nb jours d'absences", "Coût des notes de frais", "Coût direct", "TJM", "C.A. Intervenant", "C.A. Total", "Responsable d'entretien")
    Cependant mettre dans le meme ordre je n'arrive toujour pas a le faire.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Macro VBA Excel : Comparaison des deux 1ères colonnes de 2 fichiers Excel
    Par techneric dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/01/2007, 10h00
  2. VBA - Excel - comparaison de deux feuilles
    Par toto14 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/10/2006, 13h52
  3. [VBA-Excel] copier plusieurs fois une colonne dans une feuille Excel
    Par ash_rmy dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 09/08/2006, 18h43
  4. [VBA]excel comparaison de chaine de caractere
    Par ogenki dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/01/2006, 15h32
  5. [VBA Excel] Trier une plage à plusieurs colonnes
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 22/12/2005, 17h04

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