Optimisation ou autre solution

Bonjour ,

Voila , j 'ai un petit souci , avec cette partie de code

                    If MsgBox("Chantier Terminé, Voulez vous Archiver l affaire ?", vbYesNo, "Demande de confirmation") = vbYes Then 'Question de confirmation
                    Dim lastline, lastine_db As Integer
                    lastline = Sheets("Archive").Range("A65536").End(xlUp).Row + 1
                    Sheets("Archive").Rows(lastline).Value = Sheets("Db").Rows(Ligne).Value
                    Sheets("Db").Rows(Ligne).ClearContents

                    lastline_db = Sheets("Archive").Range("A65536").End(xlUp).Row + 1
                    Sheets("Db").Select
                    Range("A2:ZZ" & lastline_db).Sort Key1:=Range("A2"), Order1:=xlAscending 

                    lastline = Sheets("Archive").Range("A65536").End(xlUp).Row + 1
                    Sheets("Archive").Select
                    Range("A2:ZZ" & lastline).Sort Key1:=Range("A2"), Order1:=xlAscending 

                    Sheets("fiche client").Select
                    Range("C3") = Empty 'effacement du nom du client

                    MsgBox ("affaire archivée") 'Code pour archiver le dossier

Sur mon PC de chez moi , ceci fonctionne très bien et je n ai aucun souci , mais sur le pc du boulot (qui est une épave et qui rame a fond) c'est une horreur , parfois le code s execute correctement , mais genre 1 fois sur 3 , ca ne réorganise pas les valeurs , ou ca ne vide pas la ligne

y 'a pas moyen d eviter la commande .select (une feuille) ? , j ai tenté de faire ceci mais ca ne fonctionne pas :

Sheets("Archive").Range("A2:ZZ" & lastline).Sort Key1:=Range("A2"), Order1:=xlAscending 

mais ca ne fonctionne pas !

Par avance merci :)

Bonjour,

On peut penser que si "ça rame" ça ne vient certainement pas du code que vous citez.

En tout cas éviter les select, c'est possible et YAPA de raison que ça marche pas mais votre code est un peu simpliste et pas très optimisé :

Si vous ne sélectez pas, il faudrait mettre :

Sheets("Archive").Range("A2:ZZ" & lastline).Sort Key1:=Sheets("Archive").Range("A2"), Order1:=xlAscending

ou mieux (optimisé :

With Sheets("Archive")
.Range("A2:ZZ" & lastline).Sort Key1:=.Range("A2"), Order1:=xlAscending
End with

Nota : A l'intérieur du bloc With bien remarquer les points avant Range, Cells, Rows...

Bien que ce ne soit pas obligatoire, je recommande toujours de préciser l'argument Header en plus (xlYes, xlNo ou xlGuess) sinon vous pouvez avoir parfois des surprises...

A+

Re ,

On peut penser que si "ça rame" ça ne vient certainement pas du code que vous citez.

Pourtant c'est juste ce bout de code qui s exécute, il n y a plus rien derrière :P

votre code est un peu simpliste et pas très optimisé

Oui , je peche vraiment sur le langage VBA , et je suis conscient que mon code n 'est vraiment pas optimisé :D

le bloc with est vraiment utile avec si peu de code ?

Bien que ce ne soit pas obligatoire, je recommande toujours de préciser l'argument Header en plus (xlYes, xlNo ou xlGuess) sinon vous pouvez avoir parfois des surprises...

Je vais voir ce que je trouve a ce sujet

Merci pour le retour

Bonjour,

au travail, ton fichier n'est pas sur réseau des fois ?
Si c'est le cas, travailler sur une copie locale à copier dessus ensuite.
eric

Bonjour ,

Dans le futur , il doit y etre , mais les autres ne feront que le consulter , je serais le seul a l éditer

Re !

J ai essayé la fonction .with et c'est deja plus fluide , j ai aussi un header en xlno (pas d 'entete)

En amont de ce bout de code , j ai un gros pavé (qui va jusqu'a range EN) , y a t il une solution pour optimiser ce genre de choses ?

             Sheets("Db").Range("e" & Ligne) = Range("c4") 'C4 E Adresse1
            Sheets("Db").Range("f" & Ligne) = Range("c5") 'C5 F Adresse 2
            Sheets("Db").Range("g" & Ligne) = Range("c6") 'C6 G Adresse 3
            Sheets("Db").Range("H" & Ligne) = Range("f4") 'F4 H Numero 1
            Sheets("Db").Range("I" & Ligne) = Range("f5") 'F5 I Numero 2
            Sheets("Db").Range("J" & Ligne) = Range("c7") 'C7 J mail
            Sheets("Db").Range("K" & Ligne) = Range("F3") 'F3 K date devis
            Sheets("Db").Range("L" & Ligne) = Range("H3") 'H3 L montant 20%
            Sheets("Db").Range("M" & Ligne) = Range("H4") 'H4 M Montant 10%
            Sheets("Db").Range("N" & Ligne) = Range("H5") 'H5 N montant 5%

Par avance merci

Bonjour,

Oh oui, mais le VBA ça ne s'optimise pas à l'aide d'une boule de cristal !

A+

Re ,

Je colle le pavé du coup :P

 If MsgBox("Ajouter ce nouveau client dans la base ?", vbYesNo, "Demande de confirmation") = vbYes Then
            Sheets("Db").Range("A" & Ligne) = Range("c3") 'C4 E Adresse1
            Sheets("Db").Range("e" & Ligne) = Range("c4") 'C4 E Adresse1
            Sheets("Db").Range("f" & Ligne) = Range("c5") 'C5 F Adresse 2
            Sheets("Db").Range("g" & Ligne) = Range("c6") 'C6 G Adresse 3
            Sheets("Db").Range("H" & Ligne) = Range("f4") 'F4 H Numero 1
            Sheets("Db").Range("I" & Ligne) = Range("f5") 'F5 I Numero 2
            Sheets("Db").Range("J" & Ligne) = Range("c7") 'C7 J mail
            Sheets("Db").Range("K" & Ligne) = Range("F3") 'F3 K date devis
            Sheets("Db").Range("L" & Ligne) = Range("H3") 'H3 L montant 20%
            Sheets("Db").Range("M" & Ligne) = Range("H4") 'H4 M Montant 10%
            Sheets("Db").Range("N" & Ligne) = Range("H5") 'H5 N montant 5%
            Sheets("Db").Range("EO" & Ligne) = Range("F7") 'F7 N Chantier terminé

            Sheets("Db").Range("O" & Ligne) = Range("C11") 'C11 O Alu
            Sheets("Db").Range("P" & Ligne) = Range("D11") 'D11 P alu delai
            Sheets("Db").Range("Q" & Ligne) = Range("E11") 'E11 Q alu préco
            Sheets("Db").Range("R" & Ligne) = Range("F11") 'F11 R Alu cde
            Sheets("Db").Range("S" & Ligne) = Range("G11") 'G11 S Alu livraison
            Sheets("Db").Range("T" & Ligne) = Range("H11") 'H11 T Alu Stock

            Sheets("Db").Range("U" & Ligne) = Range("C12") 'C12 U Pvc
            Sheets("Db").Range("V" & Ligne) = Range("D12") 'D12 V Pvc delai
            Sheets("Db").Range("W" & Ligne) = Range("E12") 'E12 W Pvc préco
            Sheets("Db").Range("X" & Ligne) = Range("F12") 'F12 X pvc cde
            Sheets("Db").Range("Y" & Ligne) = Range("G12") 'G12Y pvc liv
            Sheets("Db").Range("Z" & Ligne) = Range("H12") 'H12 Z pvc Stock
            'ajout des nouvelles fonctions

            Sheets("Db").Range("C" & Ligne) = Range("H6") 'H6 C dossier
            Sheets("Db").Range("B" & Ligne) = Range("F6") 'F6 B Temps pose
            'verres
            Sheets("Db").Range("CP" & Ligne) = Range("C14") 'Verre 1
            Sheets("Db").Range("CQ" & Ligne) = Range("D14") 'Verre 2
            Sheets("Db").Range("CR" & Ligne) = Range("E14")
            Sheets("Db").Range("CS" & Ligne) = Range("F14") 'Verre 3
            Sheets("Db").Range("CT" & Ligne) = Range("G14")
            Sheets("Db").Range("CU" & Ligne) = Range("H14")

            'Bois alu
            Sheets("Db").Range("AA" & Ligne) = Range("C13")
            Sheets("Db").Range("AB" & Ligne) = Range("D13")
            Sheets("Db").Range("AC" & Ligne) = Range("E13")
            Sheets("Db").Range("AD" & Ligne) = Range("F13")
            Sheets("Db").Range("AE" & Ligne) = Range("G13")
            Sheets("Db").Range("AF" & Ligne) = Range("H13")
            'bloc Acier
            Sheets("Db").Range("AG" & Ligne) = Range("C15")
            Sheets("Db").Range("AH" & Ligne) = Range("D15")
            Sheets("Db").Range("AI" & Ligne) = Range("E15")
            Sheets("Db").Range("AJ" & Ligne) = Range("F15")
            Sheets("Db").Range("AK" & Ligne) = Range("G15")
            Sheets("Db").Range("AL" & Ligne) = Range("H15")
            'bloc VR
            Sheets("Db").Range("AM" & Ligne) = Range("C16")
            Sheets("Db").Range("AN" & Ligne) = Range("D16")
            Sheets("Db").Range("AO" & Ligne) = Range("E16")
            Sheets("Db").Range("AP" & Ligne) = Range("F16")
            Sheets("Db").Range("AQ" & Ligne) = Range("G16")
            Sheets("Db").Range("AR" & Ligne) = Range("H16")
            'bloc VB
            Sheets("Db").Range("AS" & Ligne) = Range("C17")
            Sheets("Db").Range("AT" & Ligne) = Range("D17")
            Sheets("Db").Range("AU" & Ligne) = Range("E17")
            Sheets("Db").Range("AV" & Ligne) = Range("F17")
            Sheets("Db").Range("AW" & Ligne) = Range("G17")
            Sheets("Db").Range("AX" & Ligne) = Range("H17")
            'bloc coffre
            Sheets("Db").Range("AY" & Ligne) = Range("C18")
            Sheets("Db").Range("AZ" & Ligne) = Range("D18")
            Sheets("Db").Range("BA" & Ligne) = Range("E18")
            Sheets("Db").Range("BB" & Ligne) = Range("F18")
            Sheets("Db").Range("BC" & Ligne) = Range("G18")
            Sheets("Db").Range("BD" & Ligne) = Range("H18")
            'bloc porte
            Sheets("Db").Range("BE" & Ligne) = Range("C19")
            Sheets("Db").Range("BF" & Ligne) = Range("D19")
            Sheets("Db").Range("BG" & Ligne) = Range("E19")
            Sheets("Db").Range("BH" & Ligne) = Range("F19")
            Sheets("Db").Range("BI" & Ligne) = Range("G19")
            Sheets("Db").Range("BJ" & Ligne) = Range("H19")
            'bloc store
            Sheets("Db").Range("BK" & Ligne) = Range("C20")
            Sheets("Db").Range("BL" & Ligne) = Range("D20")
            Sheets("Db").Range("BM" & Ligne) = Range("E20")
            Sheets("Db").Range("BN" & Ligne) = Range("F20")
            Sheets("Db").Range("BO" & Ligne) = Range("G20")
            Sheets("Db").Range("BP" & Ligne) = Range("H20")
            'bloc Moustiquaire
            Sheets("Db").Range("BQ" & Ligne) = Range("C21")
            Sheets("Db").Range("BR" & Ligne) = Range("D21")
            Sheets("Db").Range("BS" & Ligne) = Range("E21")
            Sheets("Db").Range("BT" & Ligne) = Range("F21")
            Sheets("Db").Range("BU" & Ligne) = Range("G21")
            Sheets("Db").Range("BV" & Ligne) = Range("H21")
            'bloc autre 1
            Sheets("Db").Range("BW" & Ligne) = Range("C22")
            Sheets("Db").Range("BX" & Ligne) = Range("D22")
            Sheets("Db").Range("BY" & Ligne) = Range("E22")
            Sheets("Db").Range("BZ" & Ligne) = Range("F22")
            Sheets("Db").Range("CA" & Ligne) = Range("G22")
            Sheets("Db").Range("CB" & Ligne) = Range("H22")
            'bloc autre 2
            Sheets("Db").Range("CC" & Ligne) = Range("C23")
            Sheets("Db").Range("CD" & Ligne) = Range("D23")
            Sheets("Db").Range("CE" & Ligne) = Range("E23")
            Sheets("Db").Range("CF" & Ligne) = Range("F23")
            Sheets("Db").Range("CG" & Ligne) = Range("G23")
            Sheets("Db").Range("CH" & Ligne) = Range("H23")
            'bloc autre 3
            Sheets("Db").Range("CI" & Ligne) = Range("C24")
            Sheets("Db").Range("CJ" & Ligne) = Range("D24")
            Sheets("Db").Range("CK" & Ligne) = Range("E24")
            Sheets("Db").Range("CL" & Ligne) = Range("F24")
            Sheets("Db").Range("CM" & Ligne) = Range("G24")
            Sheets("Db").Range("CN" & Ligne) = Range("H24")
            'commentaire
            Sheets("Db").Range("CO" & Ligne) = Range("C25")
            'Bloc facture 5.5%
            Sheets("Db").Range("CV" & Ligne) = Range("K11")
            Sheets("Db").Range("CW" & Ligne) = Range("L11")
            Sheets("Db").Range("CX" & Ligne) = Range("M11")
            Sheets("Db").Range("CY" & Ligne) = Range("K12")
            Sheets("Db").Range("CZ" & Ligne) = Range("L12")
            Sheets("Db").Range("DA" & Ligne) = Range("M12")
            Sheets("Db").Range("DB" & Ligne) = Range("K13")
            Sheets("Db").Range("DC" & Ligne) = Range("L13")
            Sheets("Db").Range("DD" & Ligne) = Range("M13")
            Sheets("Db").Range("DE" & Ligne) = Range("K14")
            Sheets("Db").Range("DF" & Ligne) = Range("L14")
            Sheets("Db").Range("DG" & Ligne) = Range("M14")
            Sheets("Db").Range("DH" & Ligne) = Range("K15")
            Sheets("Db").Range("DI" & Ligne) = Range("L15")
            Sheets("Db").Range("DJ" & Ligne) = Range("M15")
            'Bloc facture a 10%
            Sheets("Db").Range("DK" & Ligne) = Range("K18")
            Sheets("Db").Range("DL" & Ligne) = Range("L18")
            Sheets("Db").Range("DM" & Ligne) = Range("M18")
            Sheets("Db").Range("DN" & Ligne) = Range("K19")
            Sheets("Db").Range("DO" & Ligne) = Range("L19")
            Sheets("Db").Range("DP" & Ligne) = Range("M19")
            Sheets("Db").Range("DQ" & Ligne) = Range("K20")
            Sheets("Db").Range("DR" & Ligne) = Range("L20")
            Sheets("Db").Range("DS" & Ligne) = Range("M20")
            Sheets("Db").Range("DT" & Ligne) = Range("K21")
            Sheets("Db").Range("DU" & Ligne) = Range("L21")
            Sheets("Db").Range("DV" & Ligne) = Range("M21")
            Sheets("Db").Range("DW" & Ligne) = Range("K22")
            Sheets("Db").Range("DX" & Ligne) = Range("L22")
            Sheets("Db").Range("DY" & Ligne) = Range("M22")

            'bloc facture a 20%
            Sheets("Db").Range("DZ" & Ligne) = Range("K25")
            Sheets("Db").Range("EA" & Ligne) = Range("L25")
            Sheets("Db").Range("EB" & Ligne) = Range("M25")
            Sheets("Db").Range("EC" & Ligne) = Range("K26")
            Sheets("Db").Range("ED" & Ligne) = Range("L26")
            Sheets("Db").Range("EE" & Ligne) = Range("M26")
            Sheets("Db").Range("EF" & Ligne) = Range("K27")
            Sheets("Db").Range("EG" & Ligne) = Range("L27")
            Sheets("Db").Range("EH" & Ligne) = Range("M27")
            Sheets("Db").Range("EI" & Ligne) = Range("K28")
            Sheets("Db").Range("EJ" & Ligne) = Range("L28")
            Sheets("Db").Range("EK" & Ligne) = Range("M28")
            Sheets("Db").Range("EL" & Ligne) = Range("K29")
            Sheets("Db").Range("EM" & Ligne) = Range("L29")
            Sheets("Db").Range("EN" & Ligne) = Range("M29")

            Sheets("Db").Select
            Range("A2:ZZ" & Ligne).Sort Key1:=Range("A2"), Order1:=xlAscending 'Plage de selection a faire evoluer
            Sheets("fiche client").Select
            Range("C3") = Empty 'effacement du nom du client
            'réorganisation des cellules du dossier DB
    End If

il n y a pas forcément des valeurs dans chaque cellule a chaque fois (selon le client), donc je sais que je copie du vide mais est ce que faire une condition "if" pour chaque ligne serait optimisé ?.

Après , je peux fournir le fichier , mais je suis honnête , il est assez mal construit et un peu fouillis et comme dit plus haut , je ne suis pas un expert avec VBA :P

Bon , sur cette partie du code , je n ai pas encore fait le .with (ce que je vais faire aujourd'hui) et d'ailleurs est ce que je peux passer avec cette solution pour modifier tout ca ? (enfin est ce que ca serait la meilleure méthode?)

Merci du temps accordé

Bonjour,

Désolé, mais là c'est vraiment la feuille de calcul qu'il faut.

Le With c'est le minimum syndical quand on a vraiment rien à se mettre sous la dent : L'optimisation c'est une autre affaire (et le plus spectaculaire !)

est ce que faire une condition "if" pour chaque ligne serait optimisé ?

Surement pas !

A+

Re ,

J espère que vous n aurez pas une syncope ou une envie de vomir en voyant ca :P

c'est dans le module 1 , la partie de code que j ai montré

2fichier-sans-db.zip (363.69 Ko)

Merci ! :)

Re...

Juste une petite confirmation SVP Quel est le but de la macro :

Mettre à jour la BD à partir de l'archive ?

OK ?

A?

re ,

En fait sur la fiche client , je fais evoluer essentiellement les dates

en appuyant sur le bouton ajout/création , soit je mets a jour le client ou je le crée dans la feuille "Db"

En F7 , si je marque "oui" , alors l ensemble des valeurs du client est copiées vers la feuille "archive" et supprimées de la feuille "Db

Merci

Edit : voici le fichier avec la DB exacte , j ai juste effacé les noms , adresses , telephone et mail des clients

Arf...

Bon j'ai optimisé hein ! C'est juste pour que tu voies ce que ça donne...

En fait je n'ai testé que le mode ajout d'un nouveau client (Galopin !) mais la modif devrait passer de la même manière...

Pour l'instant j'ai supprimé le tri à la fin parce que avec ta sauce, la mayonnaise elle monte pas... Mais ç'est pas compliqué de modifier le bouzin pour que les sauvegardes et autres joyeuseté se passent bien.

Mais compte tenu de la situation je te réserve mes autres commentaires en MP (Messages privés) en haut à droite de l'écran...

A+

re ,

Wow ! Je crois avoir compris, vous copiez les valeurs en adressant les numeros de lignes et colonnes , je ne savais pas que l on pouvait faire ca comme ca !!

Mais, je ne veux pas vous faire perdre votre temps a éditer le fichier, j ai compris le principe et je préfère éditer les lignes moi meme , surtout que c'est tres chronophage !!

je prends contact demain !

merci beaucoup de prendre du temps !

Version 2 encore réduite de moitié...

Même observation je n'ai pas du tout travaillé les tris ni l'archivage après écriture mébon... ce n'est pas compliqué !

A+

Re ,

Honnêtement , je ne sais pas quoi dire , je suis même gêné , que vous réécriviez l ensemble du code !

merci infiniment !

Rechercher des sujets similaires à "optimisation solution"