VBA – Ajouter un outil de recherche d’erreur

Bonjour à tous,

Vous connaissez certainement la fonction de recherche (CTRL+F), qui permet notamment de naviguer dans l'ensemble d'un classeur.
recherche

Je vous propose ici de créer un formulaire reprenant le même principe, mais pouvant servir directement dans vos applications, ou pour des recherches plus particulières.

Voici une série de 3 vidéos qui expliquent comment ajouter très rapidement cet outil de recherche dans un fichier.
Cliquez ici pour le fichier.
erreurs

On va tout d'abord ajouter un formulaire :
userform

Puis dans un module, le code qui permet de lancer le formulaire :

Sub AfficherUF_Erreur()

 Dim wksFeuille As Worksheet
 Dim rgeCellule As Range

 For Each wksFeuille In ActiveWorkbook.Worksheets
     For Each rgeCellule In wksFeuille.UsedRange
         If rgeCellule.Value = "Erreur" Then
             UF_Erreurs.ListBoxErreurs.AddItem rgeCellule.Value
             UF_Erreurs.ListBoxErreurs.List(UF_Erreurs.ListBoxErreurs.ListCount - 1, 1) = _
                          wksFeuille.Name
             UF_Erreurs.ListBoxErreurs.List(UF_Erreurs.ListBoxErreurs.ListCount - 1, 2) = _
                          rgeCellule.Address
         End If
     Next
 Next

 UF_Erreurs.Show 0
End Sub

Et finalement, le code lié au double-clic sur le formulaire:

Private Sub ListBoxErreurs_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
    Worksheets(Me.ListBoxErreurs.List(Me.ListBoxErreurs.ListIndex, 1)).Select
    Range(Me.ListBoxErreurs.List(Me.ListBoxErreurs.ListIndex, 2)).Select
End Sub

En vidéo, ca nous donne ceci :

Puis:

Note : Afin de pouvoir sélectionner les cellules posant problème, on va utiliser la propriété Modal en ajoutant un zéro : UF_Erreurs.Show 0
Et finalement :

Si vous voulez améliorer ce code en utilisant des variables tableaux (array) ou en jouant avec les propriétés des Listbox, n'hésitez pas à commander l'une de mes deux dernières formations :

PS : Ne manquez aucune nouvelle astuce sur Excel, abonnez-vous à notre newsletter gratuite !

Verrouiller une cellule après la saisie

Bonjour à tous,

Voici la question d'un lecteur :

"J'ai un tableau Excel protégé avec des cellules verrouillées et des cellules non verrouillées pour la saisie de plusieurs utilisateurs. Je voudrais que les cellules non verrouillées se verrouillent automatiquement après les saisies pour que les utilisateurs ne puissent plus les modifier, sauf moi."

Il existe probablement plusieurs solutions, mais en voici une possible en vidéo. Vous pouvez télécharger le fichier ici.

L'idée est de capturer l'événement Change de la feuille pour ensuite déprotéger la feuille, verrouiller la cellule, puis reprotéger la feuille.

Le code ajouté au clic droit sur la feuille est celui-ci :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("MontantsASaisir")) Is Nothing Then
        Me.Unprotect
        Target.Locked = True
        Me.Protect
    End If
End Sub

Et en vidéo :

A bientôt.

Gaetan

PS : Ne manquez aucune nouvelle astuce sur Excel, abonnez-vous à notre newsletter gratuite !

XLSM vs. XLSB – Revue de littérature

Bonjour à tous,

Voici une petite revue de littérature des différences qui existent entre les formats XLSB et XLSM.
xl-en-bref 1 1En synthèse, XLSB semble être idéal pour des fichiers lourds et permet d'accélérer l'ouverture, tout en réduisant la taille des fichiers. La récupération de fichiers corrompus pourrait être moins facile, donc bien s'assurer que les outils de backup soient bien en place.

Rapidité (ici avec XLSX) :
Voici un test effectué sur un fichier de 10 000 lignes par 1 000 colonnes
test-rapidite-1-1
Source : http://stackoverflow.com/questions/7821632/when-should-the-xlsm-or-xlsb-formats-be-used

Avantages et inconvénients
- Le format XLSB semble être moins facilement récupérable en cas de corruption de données.
- Le format XLSB ne semble pas permettre la personnalisation directe du ruban (source). Il faut passer par un xlsm, puis reconvertir en xlsb. Je n'ai pas testé cette fonctionnalité.
- Le format XLSB ne fonctionne pas aussi bien avec des logiciels autres qu'Excel (comme OpenOffice).

Sources:
Analyst Cave

A bientôt.

Gaëtan

PS : Ne manquez aucune nouvelle astuce sur Excel, abonnez-vous à notre newsletter gratuite !

VBA – Quelques retours.

Bonjour à tous,

Désolé pour ce long silence, j'étais en "immersion" d'enseignement avec plus d'une centaine d'étudiants formés à Excel et VBA :-).

De ces quelques semaines, voici une synthèse qui devrait vous plaire si vous faîtes un peu de programmation en VBA :

- Adoptez une nomenclature pour les noms de vos variables. Par exemple, j'essaie de toujours commencer par une abréviation du type de variable (str pour String, rge pour Range, txb pour TextBox, etc.).

- De fait, utilisez CTRL + ESPACE lorsque vous commencez à taper des instructions. Ceci permet d'afficher automatiquement la liste des valeurs possibles.

vba-ctrl-space-1

- N'oubliez pas d'utiliser les espions (clic droit sur le nom de la variable et choisir ajoutez un espion).
espions-vba

- N'oubliez pas d’arrêter l'enregistrement d'une macro. Un classique 🙂
vba-enregistrement-1

- Utilisez autant que possible des références à des noms définis plutôt que des références statiques comme A1.
Par exemple, utilisez Range("Nom") au lieu de Range("B5"), ainsi, si vous insérez des nouvelles colonnes ou lignes, la référence reste valide.

- Finalement, utilisez le "CodeName" de VBA ((Name) dans la fenêtre "propriété" pour faire référence aux noms de feuille. Ainsi, si vous renommez les feuilles dans Excel, le codename reste le même et votre code est plus robuste !
nom-feuilles-vba-1-1

Si vous voulez aller plus loin, je vous recommande mes formations VBA :

Il y a encore beaucoup de choses à apprendre et vous aurez le plaisir de les voir bientôt dans un nouveau CD 🙂

A bientôt.

Gaëtan Mourmant

PS : Ne manquez aucune nouvelle astuce sur Excel, abonnez-vous à notre newsletter gratuite !

Faire une recherche dans un segment (la solution)

Suite à ce précédent post, voici une solution possible en 3 points :
1/ Ajouter un deuxième tableau croisé dynamique (TCD) via un copier-coller.
2/ Si nécessaire, lier le segment à ce TCD :
tcd-segment-recherche
3/ Mettre uniquement un filtre dans le TCD et l'utiliser pour chercher dans le segment :
connexion tcd segments recherche 1

Vous pouvez télécharger le fichier ici.

Et comme disent les anglophones : "et voilà" 🙂

A bientôt.

Gaetan

PS : Ne manquez aucune nouvelle astuce sur Excel, abonnez-vous à notre newsletter gratuite !