Dimanche 28 octobre 2007
Le code VBA ne demande qu’à être optimisé pour rendre une base Access efficace. Bien sûr, mais l’optimisation est-elle réelle lorsque vous optez pour un code à la place d’un autre ? Le mieux n’est-il pas l’ennemi du bien ? Avez-vous mesuré l’impact de votre optimisation en terme de délai d’exécution ?
Jouons à l’optimisation VBA :
La ligne      If Not (X Or Y) Then
Est-elle plus efficace que
La ligne:     If (Not X) And (Not Y) Then
A première vue, oui, car on économise un test Not à chaque exécution et si on se trouve dans un millier de boucles, on va gagner énormément de temps. Erreur !
Exemple :
Private Sub Commande1_Click()
    Dim X As Boolean, Y As Boolean, I As Long
    X = False
    Y = False
    For I = 1 To 100000000
        If (Not X) And (Not Y) Then
        Else
        End If
    Next I
End Sub
Temps économisé : 1,5 seconde ! pour 100.000.000 de boucles ! soit une économie de 1,5/100 de seconde pour 1.000.000 de boucles.
La solution 1 est-elle plus lisible que la solution 2 pour le développeur ? Non !  La solution 2 est beaucoup plus claire lors de la maintenance de votre code.
Méfiez-vous des fausses optimisations.
 
Une optimisation réelle :
Un exemple d’optimisation sur lequel il faut se pencher, chaque fois que des boucles imbriquées sont en jeu. Vous voulez placer des valeurs dans des colonnes et des lignes  et bien sûr vous faîtes une boucle sur les lignes et dans cette boucle une boucle pour les colonnes. Faut-il opter pour la boucle des colonnes dans la boucle des lignes ou la boucle des lignes dans la boucle des colonnes ? Le nombre de boucles est-il identique ?
    For I = 1 To 2
        For J = 1 To 100000000
        Next J
    Next I


Est-elle identique à :
    For I = 1 To  100000000
        For J = 1 To 2 
        Next J
    Next I
Dans le résultat obtenu, oui , mais dans le nombre de boucles ?
Dans le 1er cas, on exécute 100000000 x 2 de boucles J , plus 2 boucles I soit 200000002 de boucles.
Dans le 2e cas , on exécute 2 x 100000000 de boucles J , plus 100000000 de boucles I, soit 300000000 de boucles, soit 1/3 de plus d’instructions de boucles.
En temps d’exécution, la 2e boucle demandera 13 secondes alors que la 1ere boucle ne demandera que 3 secondes.
Ce type de procédure demande que le développeur se penche sérieusement dessus et l’optimise au maximum. Dans le principe, et si c’est réalisable, il faut partir de la boucle la plus petite à la boucle la plus grande, autrement dit, la boucle la plus petite doit être à l’extérieur et la boucle la plus grande à l’intérieur. 

Select…case   vs   If…Else
De même, le remplacement d’une instruction Select case par un IF permet de gagner 35% du temps d’exécution.
        If I <= 20 Then
            A = 1
        ElseIf I < 100 Then
            B = 1
        Else
            C = 1
        End If
permet de gagner 35% sur :
        Select Case I
            Case Is <= 20
                A = 1
            Case Is >= 21 < 100
                B = 1
            Case Else
                C = 1
        End Select

Optimisation emblématique :
Parmi les optimisations les plus nécessaires il est le test de valeur nulle et de chaîne vide d’un contrôle de formulaire ou d’une variable variant.
La ligne :
If IsNull(Me.ClientNom) Or Me.ClientNom = "" Then
Est utilisée à de maintes reprises dans une application. Cette instruction peut être remplacée par :
If Nz(Me.ClientNom, "") = "" Then
Qui donnera le même résultat avec un gain de temps d’exécution de 40%.
A vous de présenter des cas d’optimisations ludiques dans les commentaires.

 
Par Raymond - Publié dans : Astuces
Ecrire un commentaire - Voir les commentaires - Recommander
Jeudi 25 octobre 2007
Hier, votre poste de travail était un simple outil de bureautique. Aujourd’hui, il est devenu un environnement de production, de recherche, de collaboration, de communication, et même un poste de pilotage décisionnel.

Mais qu’est-ce que cela peut apporter à votre entreprise ? On peut se demander, par exemple, quel est l’intérêt financier de la mise en place d’un tableau croisé dynamique, quel est l’apport de la mise en œuvre d’une messagerie électronique, ou encore l’économie réalisée avec le mode « révision par auteur » sur un document collaboratif ?

Ces solutions vous permettent tout simplement d’améliorer votre efficacité. Vous diminuez les coûts et les temps de travail en améliorant votre réactivité. Les décisions sont plus rapides et plus pertinentes car vous avez les bonnes informations au bon moment, et le travail collaboratif devient plus efficace.  

Téléchargez le livre blanc Microsoft en cliquant ici ou sur le bandeau d'entête.

Par Raymond - Publié dans : Annonces
Ecrire un commentaire - Voir les commentaires - Recommander
Jeudi 18 octobre 2007
Affichez, imprimez et copiez des documents Word, même si Word n'est pas installé sur votre ordinateur. Ce téléchargement remplace Word Viewer 2003 et toutes les versions précédentes de Word Viewer.
Word Viewer permet d'ouvrir des documents Word enregistrés aux formats suivants :
  • Document Word
  • Document Word avec macros activées (*.docm)
  • Format RTF (.rtf)
  • Format Texte (.txt)
  • Formats Page Web (.htm, .html, .mht, .mhtml)
  • WordPerfect 5.x (.wpd)
  • WordPerfect 6.x (.doc, .wpd)
  • Works 6.0 (.wps)
  • Works 7.0 (.wps)
  • XML (.xml)

Word Viewer permet d'afficher, d'imprimer et de copier le contenu de documents dans un autre programme. Il est toutefois impossible d'éditer un document ouvert, d'enregistrer un document ou d'en créer un. 

Fiche technique et téléchargement à :
Par Raymond - Publié dans : Téléchargements
Ecrire un commentaire - Voir les commentaires - Recommander
Jeudi 11 octobre 2007
Des retours d'informations importants ont été écrits en commentaires par les lecteurs concernant les articles PDF sous runtime et Access SP3.
Vous trouverez ces commentaires aux adresses:
http://officesystem.access.over-blog.com/article-12513536-6.html#anchorComment 

http://officesystem.access.over-blog.com/article-11959868-6.html#anchorComment

Par Raymond - Publié dans : Annonces
Ecrire un commentaire - Voir les commentaires - Recommander
Samedi 6 octobre 2007
Tout le monde a diffusé l’information selon laquelle Access 2007 fonctionnait indifféremment avec des bases 2000, 2003 ou 2007 sans conversion. C’est vrai c’est écrit.
Seulement j’ai fait des tests comparatifs sur une base 2000 avec Access 2000 SP3 et Access 2007 et les résultats ne sont pas tout à fait à la hauteur des affirmations. Ces tests sont faits actuellement sur base 2000 en exploitation qui fonctionne normalement depuis des mois.
Structure de la base locale :
119 tables attachées à une base principale sur serveur.
963 requêtes enregistrées
499 formulaires dont 436 avec modules vba
280 états dont 165 avec modules vba
3 modules standards vba
1 macro
Spécifications du PC : windows XP pro SP2, RAM 1Go, Pentium 3.2 GHz, DD 7200 tours.
A/   Ouverture de la base 2000 sans problème. Ouverture de la fenêtre Editeur VB par alt+F11 : 35 secondes pour  Access 2007 contre 1 seconde pour Access 2000.
B/   Compilation de la base : Access 2000 : moins de 10 secondes sans erreurs. Access 2007 n’a jamais pu compiler entièrement pour cause de noms de contrôles de formulaires non trouvés.
C/   Analyse des performances : Access 2000 propose de supprimer les modules vierges ce qui est fait effectivement. Access 2007 propose lui-aussi de supprimer les modules vierges, ce qu’il fait, mais les modules sont toujours présents dans l’éditeur VB alors que la propriété « avec module » est indiquée non. Ceci provoque une erreur de l’éditeur qui refuse de compiler pour « fichier non trouvé ». De même, toute importation du formulaire est refusé pour cause de « fichier non trouvé ».
D/   La taille de la base 2000, qui était de 39 Mo sous Access 2000 est passée à 53 Mo sous Access 2007.
E/   La base 2000 montée sous 2007 est devenue inexploitable sous Access 2000 et une ré-importation de tous les objets a été  obligatoire.
F/   La base 2000 a été convertie en base 2007 et Access 2007 respire beaucoup mieux sans toutefois égaler les performances Access 2000. La taille de la base est passée de 53 Mo à 65 Mo immédiatement. Est-ce la faute à unicode ? La compilation n’est pas parfaite et il y a toujours des erreurs « erronées » de temps en temps.
G/   La base 2007 convertie en base 2000 est inexploitable sous Access 2000 et une ré-importation de tous les objets a été obligatoire.
 
Première conclusion :  L’utilisation intensive en développement  d’une grosse base locale version 2000 sous Access 2007 doit faire l’objet de soins attentifs et de tests complets de développement. Il semblerait que Access 2007 soit gourmand en mémoire RAM et que 2Go pour un développeur soit un minimum. Une conversion définitive en 2007 semble préférable mais assujettie à l’installation de cette version sur tous les postes utilisateurs.

Une petite base de quelques dizaines d'objets ne semble pas poser de problème particulier.

Par Raymond - Publié dans : Conversions
Ecrire un commentaire - Voir les commentaires - Recommander

Syndication

  • Flux RSS des articles

Calendrier

Novembre 2009
L M M J V S D
            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            
<< < > >>

Rechercher

Créer un blog sur over-blog.com - Contact - C.G.U. - Rémunération en droits d'auteur - Signaler un abus