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 dossierSur 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:=xlAscendingou mieux (optimisé :
With Sheets("Archive")
.Range("A2:ZZ" & lastline).Sort Key1:=.Range("A2"), Order1:=xlAscending
End withNota : 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 ,
Pourtant c'est juste ce bout de code qui s exécute, il n y a plus rien derrière :POn peut penser que si "ça rame" ça ne vient certainement pas du code que vous citez.
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 Ifil 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é
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 !