Un petit défi pour les fous de la programmation ;) [Résolu]

Signaler
Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008
-
Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008
-
Bonjour à tous,
alors ce petit défi ces un problème que l'on m'as donné en stage sa fait maintenant une semaine que je suis dessus (autant dire que je m'accharne) étant débutant je ne connaissais pas VBA il y a une semaine et on va dire que je m'en sort pas mal déjà. (mais pas assez pour pouvoir faire cette foutu macro ^^ )
[center]Sans ne plus vous faire attendre voici la catastrophe ^^ :/center

(je vais essayer de ne pas complexisé la chose j'aurais bien mis des images pour vous faciliter la comprehension du problème mais il faut etre membre club si toutefois vous avez des questions MP, MSN(vous me demander je pourrais vous envoyer les fichiers))
[center]Problème/center
J'ai deux feuille excel une "MONALISA" et l'autre "GABRIEL" dans le meme fichier ( tes.pax ).
 Dans MONALISA, j'ai un tableau de données avec des caractéristiques: (je vous mets la première ligne)
FlightNumbers           Date             Destination      Aéroport D      Aéroport A      Class Coupon   Class LG         Pax 
LG-0231            10/05/2008             DJE                  LUX               DJE                     V                   V              141

Dans GABRIEL, j'ai aussi un tableau de données avec ces meme caractéristiques:

LG-0231            10/05/2008            DJE                  LUX               DJE          (pas cette colonne)      V               141

Mon But est de copier MONALISA et GABRIEL dans une 3ème feuille "result" comme ceci:

LG-0231      10/05/2008      DJE      LUX      DJE      V      V      141      V      141
Vert étant MONALISA et Rouge étant GABRIEL ( c'est pour mieux expliqué sur le fofo pas besoin de faire dans la macro)

Mon second but sera de vérifier si La class LG de MONALISA et de GABRIEL sont les memes et si les PAX aussi

jusque la pas trop de souci une macro très simple permets de copier de comparer et de surligné si il y a une différence (pour qu'ensuite je puisse chercher d'ou viens cette erreur)

Nan le problème surviens quand l'on a à faire ceci sur 20 000 cellules, ce qui surviens d'emblé ces les boucles bien sur !!!!
alors on applique le code utiliser précédament (voir tout le code en fin de page) et on l'insert dans une boucle sa marche bien sur jusqu'a ce que GABRIEL ou MONALISA ce mettent à différé.

petit démonstration :

FlightNumbers           Date             Destination      Aéroport D      Aéroport A      Class Coupon   Class LG         Pax 
      LG-0231            10/05/2008             DJE                  LUX               DJE                     V                   V                  141
      LG-0236            01/05/2008             DJE                   DJE               LUX                     T                  T                     1
         ###                        ###                   ###                    ###                  ###                     V                   V                   83
         ###                  04/05/2008            DJE                    LUX              DJE                     V                   V                  131





<hr />
      LG-0231            10/05/2008            DJE                  LUX                 DJE                    ###               V                  141
      LG-0236            01/05/2008            DJE                  LUX                 DJE                    ###               B                     1
         ###                        ###                   ###                   ###                   ###                     ###               T                     1
         ###                        ###                   ###                   ###                   ###                     ###               V                    83
         ###                  04/05/2008            DJE                  LUX                 DJE                    ###               V                  131  





<hr />


Et  La tout le monde peut imaginer ce que j'obtiens ...






<hr />


 Fl.N          Date             Dest.     Aér.D      Aér.A      Class C   Class LG         PAX      Class C      PAX 
LG-0231  10/05/2008      DJE      LUX         DJE           V              V                  141          V              141
LG-0236  01/05/2008      DJE      DJE         LUX           T               T                    1            B               1
   ###             ###              ###       ###          ###            V               V                   83           T                1
   ###        04/05/2008      DJE     LUX          DJE          V               V                  131          V               83
                  (la suite de MONALISA)                                                                                   V              131

Petite question auxquel je vais repondre :

Bien sur on pourrais se dire beh tu n'as qu'a copier les caractéristiques de GABRIEL puisque ces les memes ques ceux de MONALISA = ==> des dates présentes dans MONALISA ne sont pas présentes sur GABRIEL

Comment faire j'ai en partie trouver la réponse et avec l'exemple cité j'ai réussi a le mettre sous la forme voulu :
 Fl.N          Date             Dest.     Aér.D      Aér.A      Class C   Class LG         PAX      Class C      PAX  
LG-0231  10/05/2008      DJE      LUX         DJE           V              V                  141          V              141
LG-0236  01/05/2008      DJE      DJE         LUX           T               T                    1            B               1
   ###             ###              ###       ###          ###            V               V                   83           T                1
   ###             ###              ###       ###          ###           ###           ###                 ###         V               83
   ###        04/05/2008      DJE     LUX          DJE          V               V                  131          V              131

Le problème c'est que il n'y a pas que cette exemple il s'agit maintenant de l'appliquer au reste et bien sur dans la boucle.(j'oubliais par moment ces MONALISA qui a plus de class LG que GABRIEL) le but définitif étant que pour chaque vol, date, destination,  je puisse avoir Class LG et PAX de MONALISA et de GABRIEL  tel l'exemple situé un peu plu haut j'en aurais pas beaucoup je le ferais à la main mets la 20 000 vol ces morts surtout qu'ils ont ( l'entreprise du stage) l'intention de m'en donner plus par la suite ... 

Alors soit je suis dans le caca ou je suis dans le caca

1.1  Voici tout le code
==> Attention voila le pavé ^^ 
Sub Trier()
    numLigne = 14
    numLigne2 = 14
    Do While (Worksheets("MONALISA").Range("H" & Mid(Str(numLigne), 2)).Value <> "")
                If ((Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value <> "") True) And ((Worksheets("GABRIEL").Range("B" & Mid(Str(numLigne), 2)).Value <> "") True) Then
            Worksheets("maldecrane").Range("A" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("A" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("B" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("C" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("C" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("D" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("D" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("E" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("E" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("F" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("F" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("G" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("G" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("H" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("H" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("I" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("I" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("J" & Mid(Str(numLigne), 2)).Value = Worksheets("GABRIEL").Range("G" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("K" & Mid(Str(numLigne), 2)).Value = Worksheets("GABRIEL").Range("H" & Mid(Str(numLigne), 2)).Value
        End If        If ((Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value "") True) And ((Worksheets("GABRIEL").Range("B" & Mid(Str(numLigne), 2)).Value = "") = True) Then
            Worksheets("maldecrane").Range("A" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("A" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("B" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("C" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("C" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("D" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("D" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("E" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("E" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("F" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("F" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("G" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("G" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("H" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("H" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("I" & Mid(Str(numLigne), 2)).Value = Worksheets("MONALISA").Range("I" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("J" & Mid(Str(numLigne), 2)).Value = Worksheets("GABRIEL").Range("G" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("K" & Mid(Str(numLigne), 2)).Value = Worksheets("GABRIEL").Range("H" & Mid(Str(numLigne), 2)).Value
        End If        If (Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value <> "" True) And Worksheets("GABRIEL").Range("B" & Mid(Str(numLigne), 2)).Value "" = True Then
        ' j'ai esayer sa marche a peu près ==> c'est bizarre
            Worksheets("maldecrane").Range("A" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("A" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("B" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("C" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("C" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("D" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("D" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("E" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("E" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("F" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("F" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("G" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("G" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("H" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("H" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("I" & Mid(Str(numLigne + 1), 2)).Value = Worksheets("MONALISA").Range("I" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("J" & Mid(Str(numLigne), 2)).Value = Worksheets("GABRIEL").Range("G" & Mid(Str(numLigne), 2)).Value
            Worksheets("maldecrane").Range("K" & Mid(Str(numLigne), 2)).Value = Worksheets("GABRIEL").Range("H" & Mid(Str(numLigne), 2)).Value
        numLigne2 = numLigne2 + 1
        End If        If (Worksheets("MONALISA").Range("B" & Mid(Str(numLigne), 2)).Value "" True) And Worksheets("GABRIEL").Range("B" & Mid(Str(numLigne), 2)).Value <> "" = True Then
        ' A voir ce qu'il faut faire
            MsgBox Prompt:="ERROR!!!!!!", Buttons:=vbExclamation, Title:="RESULTAT"
        End If
    numLigne = numLigne + 1
    Loop
       
End Sub

 




 




C'est le seul moyen que j'ai trouver pour que le code sois "visible" sinon sa donnais un truc incompréhensible (ou en tout cas pas très lisible. jespere que vous arriverez a voir



Probleme pausé peut-etre probleme sera résolu ( passe par ici mortalino ^^ stp) 

...  

------------------------------------------------ Attention
-----------------------------------------------------------------

Ceci est un message de détresse .

7 réponses

Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008

J'ai trouvé le programme je suis tout content voilà c'est tout j'ai encore quelque petit bug à géré mais sa devrait le faire héhé bonne journée à tous (elle commence bien pour moi ;) )

 BrianLux
Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008

Oups sa a tout décalé jespere que vous comprendrez sinn posez vos kestions je suis a votre ecoute la plus complete
bonne journée a toutes la team
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
tu peux fusionner ce qui colle dans Results
et créer une autre feuille qui listerait ce qui ne colle pas.

ou marquer dans tes deux premières feuilles les lignes fusionnées sans souci.

ca te permettra de vérifier d'ou provient l'erreur des données (et quelle feuille a "raison")
Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008

ouais sa pourrait le faire le prob c'est que je ne sais pas fusionner ou plutot je ne vois pas comment faire pour les fusionner mais toute idée est bonne a prendre et a essayer merci de m'aiguiller parce que j'y vois plu rien dans se foutu machin   
Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008

Je pense avoir trouver une piste concernant cette macro :
début du programme :
         selectionner monalisa 
         ensuite selectionner le flightnumbers et le chercher dans gabriel si il existe 
         si il existe chercher la date 
         si elle existe chercher la route (bien que peut nécéssaire puisqu'avec le flight numbers et la date j'aurais toute les informations mais bon vaut mieux prévoir )
         si elle existe chercher Aéroport de départ et ainsi de suite jusque l'aéeroport d'arrivé
         une fois avoir effectué cette manoeuvre je saurais si le vol est sur les deux feuilles si il y est je copie sinn ( a voir cette partie je n'y est pas encore réfléchi)
         Il risque d'etre hyper long ce programme. je vous pose la question a vous suis-je sur la bonne voie?? et si oui m'aiguiller un peu je connais VBA depuis une semaine alors je suis limiter avec le vocabulaire a utiliser et les manoeuvres a effectuer. je vous remercie d'avance vous contribuer a mon apprentissage.
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
68
me semble correct...

la vitesse, ca s'acquiert, batit deja ton algo qui tourne...

si tes données sont triées, une recherche dychotomique ira vite.
Messages postés
24
Date d'inscription
jeudi 3 juillet 2008
Statut
Membre
Dernière intervention
2 septembre 2008

après plusieurs recherche et mes anciens programmes effectuer j'ai trouver cette macro qui marche assez je vous la préente:

Sub Recherche2()
    Worksheets("MONALISA").Select
       Dim x As Range
             strChaine = "FlightNumbers"
       Set x = ActiveSheet.Columns(1).Cells.Find(what:=strChaine)
             y = x.Address
             Range(y).Select
             Selection.Copy
             Sheets("result").Cells(1, 1).Select
             ActiveSheet.Paste
End Sub

bien sur sa marche mais il faut précisé le nom j'ai essayer d'affecté une variable ou du moins je lui est dis de chercher la valeur qu'il y avait dans la cellule (afin de conduire a une boucle) :

Sub Recherche2()
     numLigne = 14
    Dim x As Range
    strChaine = Worksheets("MONALISA").Range("A" & Mid(Str(numLigne), 2)).Value
    Set x = ActiveSheet.Columns(1).Cells.Find(what:=strChaine)
    y = x.Address
    Range(y).Select
    Selection.Copy
    Sheets("result").Cells(1, 1).Select
    ActiveSheet.Paste
End Sub 

Et sa me dit quel peut pas avoir l'adresse d'un truc variant ou un truc du genre si quelqu'un peut donner un coup de pouce pour chercher puis pour coller (de tel facon que je puisse faire une boucle par la suite)