cs_MPi
Messages postés3877Date d'inscriptionmardi 19 mars 2002StatutMembreDernière intervention17 août 201823 1 sept. 2007 à 03:15
Salut Avyrex,
Lorsque tu utilises l'enregistreur de macro, il y a plein de choses que tu peux modifier ou améliorer.
Par exemple, les "Select"
Aussi, les Formula R1C1 peuvent être remplacés par des Formula.
Personnellement, je n'y comprend rien à ces R1C1 et je préfère utiliser le même format que si je les écrivais dans la cellule directement.
Le seule différence est de les écrire en anglais et de mettre des virgules plutôt que des points-virgules.
Pour un début:
' ActiveWindow.SmallScroll Down:=-21 'inutile
' Range("H7").Select 'inutile
ActiveCell.FormulaR1C1 = "=VLOOKUP(R6C1,'Fruits master2'!R4C2:R6165C13,4,0)" ' peut être remplacé par ce qui suit
' Range("H7").Select 'inutile
' Selection.AutoFill Destination:=Range("H7:T7"), Type:=xlFillDefault 'inutile
' Range("H7:T7").Select 'inutile
Range("H7:H" & nbLignes).Formula = "=VLOOKUP(A6,'Fruits master2'!B:M,4,0)"
*** nbLignes étant le nombre de lignes où copier la formule (que tu peux remplacer par 6165, si je comprends bien)
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 3 sept. 2007 à 11:07
Salut,
Ca n'est valable que si la plage de recherche ne varie jamais ... Ce qui est quand même extrêmement rare dans une base de données !
Pour bien faire il faudrait définir la plage de données avant d'affecter la formule ...
Le problème c'est quid des formules déjà existantes lorsque la plage de données va évoluer ...
Evolution en nombre de lignes mais aussi en 'Colonne ajoutée ou supprimée
En fait une solution serait non pas d'affecter une formule dans une cellule
- Ce qui en fonction de la taille de la base peut faire un fichier très lourd
mais de n'affecter que le résultat d'une boucle qui pacourerait la plage de donnée sur "Sub Worksheet_Change(ByVal Target As Range)" ou sur le clic d'un bouton
JML
Partageons notre savoir et nos acquis
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 3 sept. 2007 à 13:46
Ou alors, pour s'éviter les pbs de zone de recherche, il suffit d'affecter ta formule de RecehrcheV sur une zone de Nom (Menu Insertion\Nom\définir).
Tu n'as pas qu'à gérer la taille de la zone de nom à la modification de ta base de données (recréer la zone à l'initialisation de la procédure par ex., etc ...)
Molenn
Vous n’avez pas trouvé la réponse que vous recherchez ?
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 3 sept. 2007 à 14:25
Et bien, en parlant EXCEL, la première formule que tu as posé, si je ne me trompe pas, c'est
H7: = RECHERCHEV(I13,'Fruits master2'!J11:U6172,4,0)
(au passage, ton dernier 0 en argument me semble étrange, ça devrait TRUE ou FALSE dans ton code, et VRAI ou FAUX dans EXCEL normalement, non ?
Enfin, ça ne change rien à mon cas.
Au lieu de désigner la plage par ses références, tu peux créer une zone de nom.
Dans ta feuille 'Fruits master2', tu sélectionnes la zone J11:U6172 et tu fais Menu Insertion\Nom\Définir. Tu donnes un nom (Fruits par exemple) et tu fais ajouter.
Maintenant, quand tu sélectionneras la plage complète, dans la zone d'information (juste au dessus de A1 quand tu es dans EXCEL), au lieu d'avoir le nom d'une cellule, tu as le nom de la plage.
Et si tu sélectionnes avec la combo le nom, ta plage sera automatiquement sélectionnée.
Tu peux utiliser ce nom pour faire référence à ta plage, ta formule deviendrait :
H7: = RECHERCHEV(I13,Fruits,4,FAUX)
Plus besoin de s'occuper de savoir quelle est ta base de données, c'est toujours Fruits.
Et quand la base change, il te suffit d'aller redéfinir la zone de nom avec les nouvelles coordonnées (manuellement ou via un code VBA, c'est toi qui sait ce dont tu as besoin ^^).
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 3 sept. 2007 à 14:33
Les risques sont : D'oublier le redimensionnement de la plage
et aussi d'avoir un fichier lourd de formule ... à partir du moment ou on utilise VBA il est plus léger de programmer
Concernat le 0 en fin de formule il indique que l'on recherche une valeur exacte en opposition à 1 et -1
JML
Partageons notre savoir et nos acquis
Molenn
Messages postés797Date d'inscriptionmardi 7 juin 2005StatutMembreDernière intervention23 février 20117 3 sept. 2007 à 16:58
Deux choses que je ne comprends pas :
926087 avyrex1926 : je me retrouve avec des formules dans le fichier EXCEL et sur toutes les 3 lignes.
Ben, c'est aussi ce que tu fais non ? Parce que ce code :
ActiveCell.FormulaR1C1 = "=VLOOKUP(R6C1,'Fruits master2'!R4C2:R6165C13,4,0)"
Range("H7").Select
Selection.AutoFill Destination:=Range("H7:T7"), Type:=xlFillDefault
place une formule dans une cellule et la copie partout.
J'ai marqué la formule en EXCEL parce que c'était plus court que le VBA, je n'ai jamais dit qu'il valait mieux le faire en formule qu'en VBA. Si tu écris :
ActiveCell.FormulaR1C1 = "=VLOOKUP(R6C1,Fruits,4,0)"
Range("H7").Select
Selection.AutoFill Destination:=Range("H7:T7"), Type:=xlFillDefault
Ca revient exactement au même.
JM247L : Les risques sont : D'oublier le redimensionnement de la plage
Ben, pas plus que dans sa macro, dans laquelle il faudrait penser à remettre à jour "R4C2:R6165C13" dans chaque formule. Alors qu'avec la zone de nom, on ne touche jamais aux formules une fois écrite. Et on remet à jour la zone de nom au début, toujours pas macro VBA, rien de bien compliqué là non plus.
Personnellement, je préfère remettre à jour dans mon code VBA que 4-5 lignes que prévoir une modification sur 10 ou 15 lignes.
Pour le 0, je ne savais pas ... J'utilise toujours VRAI ou FAUX ce qui revient exactement au même à priori ^^
JM247L
Messages postés443Date d'inscriptionmardi 27 mars 2007StatutMembreDernière intervention 1 mars 20112 3 sept. 2007 à 17:38
Molenn, Pas de souci, mon commentaire sur les riques d'oubli était lié à la possibilité de faire le redimensionnement manuellement
Ma proposition était de faire une boucle sur les données afin de systématiquement mettre à jour les résultats équivalents à la formule de RECHERCHEV
Ce qui évite le dimenstionnement de plage et la lourdeur d'un fichier plein de formules
En fait utilisant depuis longtemps RECHERCHEV et je viens de constater dans l'écran d'aide qu'effectivement il préconisait VRAI ou FAUX
alors que j'en était encore à 0 et 1 ou -1 suivant l'ordre de tri du fichier ... Mais tout cela remonte à la première version d'excel
JML
Partageons notre savoir et nos acquis