Je viens de lire que l’enregistreur de macro va fonctionner de nouveau pour les graphiques ! Ouf !
J’espère que ca fonctionnera aussi pour la création des “shapes”
A bientot
Gaetan
Je viens de lire que l’enregistreur de macro va fonctionner de nouveau pour les graphiques ! Ouf !
J’espère que ca fonctionnera aussi pour la création des “shapes”
A bientot
Gaetan
Cette question provient d’un de mes utilisateurs, et comme elle est suffisament générale, voici ma réponse !
L’objectif consiste à suivre les changements effectuées sur une feuille de calcul (ici la feuil1 uniquement), en mettant en rouge les cellules concernées.
Vous pouvez consulter un exemple ici
L’idée générale est de capturer l’événement de modification de la feuille et de changer ensuite le format de la cellule concernée.
Voici la procédure en vidéo, et en dessous, la procédure en texte et image.
Sous Excel 2000 à 2003, la seule différence se trouve au niveau de l’insertion des cases à cocher. Cette fonction se trouve dans la barre d’outils formulaire (menu afficahge – barres d’outils – Formulaires).
|
|
Pour cela, clic droit sur le nom de la feuille contenant les données, puis choisir visualiser code.

On va ensuite ajouter le code suivant :
Private Sub Worksheet_Change(ByVal Target As Range)
Target.Font.ColorIndex = 3
End Sub
Le 3 correspond à la couleur rouge.
Et donc pour tout changement dans la feuille, la cellule concernée est maintenant en rouge.
On peut améliorer le système en ajoutant une case à cocher activant ou désactivant le suivi des modifications.
Sous 2003 : Affichage – Barres d’outils – Formulaires et dessiner une case à cocher.
Sous 2007 : Afficher le menu développeur (dans les options d’excel), puis insérer une case à cocher :

Pour bien faire les choses, nous allons ajouter une feuille paramètres
Nommer une cellule “suivi_des_modifications” sur cette feuille
Puis on retourne sur la feuille initiale pour lier la case à cocher à cette cellule (clic droit sur la case à cocher pour la sélectionner, puis dans la barre de formule, taper : =suivi_des_modifications )
Il ne reste plus qu’à modifier le code pour que le suivi soit actif uniquement lorsque la case à cocher est coché :
Private Sub Worksheet_Change(ByVal Target As Range)
if sheets(“Paramètres”).range(“suivi_des_modifications”) then
Target.Font.ColorIndex = 3
end if
End Sub
Cette petit démonstration devrait vous ouvrir la porte sur pas mal de possibilités !
Note : pour avoir excel en noir, voir ce post précédent
A bientôt.
Gaetan
Suite à la question d’une lectrice, voici un début de solution en vba à cette question, en vidéo et plus bas avec le texte (cliquer ici pour le fichier).
|
|
On va donc scanner l’ensemble des feuilles, puis des cellules de chaque feuille.
Pour chaque cellule, on va ensuite rechercher la présence de la chaine de caractère (le mot) et comptabiliser cette présence.
On met ceci dans une fonction, pour pouvoir l’utiliser facilement par la suite, par exemple si on veut faire des statistiques à partir d’une liste de mots à chercher.
Ca donne donc ceci.
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 | Sub recherche() MsgBox "Ce mot apparaît " & compte_occurence_mot(InputBox("Que recherchez vous ?", "Occurence")) & " fois." End Sub Function compte_occurence_mot(mot_que_l_on_recherche As String) Dim sh As Worksheet Dim cellule As Range Dim t As Integer Dim longueur_du_mot_que_l_on_cherche As Integer longueur_du_mot_que_l_on_cherche = Len(mot_que_l_on_recherche) 'on scanne toutes les feuilles For Each sh In ThisWorkbook.Worksheets 'On scanne toutes les cellules de la plage utilisé de la feuille For Each cellule In sh.UsedRange 'On scanne toutes les lettres de la cellule If Not (IsError(cellule.Value)) Then For t = 1 To Len(cellule.Value) 'Si on trouve le mot recherché, on incrémente l'occurence If Mid(cellule.Value, t, longueur_du_mot_que_l_on_cherche) = mot_que_l_on_recherche Then compte_occurence_mot = compte_occurence_mot + 1 End If Next t End If Next cellule Next sh End Function |
Note : en utilisant la fonction application.find, on doit aussi y arriver, ca fera l’objet d’un prochain post
Note 2 : à la place de faire une recherche par cellule, on peut aussi créer un tableau en VBA (array), ce qui évite de devoir lire chaque cellule et donc on accélère la vitesse de la macro, là encore, ce sera pour une autre fois
Si vous voyez d’autres manières d’améliorer ce code, n’hésitez pas !
A bientôt
Gaëtan
Dans le genre, ca fait 10 ans que j’aurais du y penser…
Pour réduire la taille des gros fichiers, notamment ceux qui contiennent des milliers de lignes de formules identiques :
1/ repérer les plages contenant ces formules, mais SURTOUT PAS les données
2/ écrire une macro qui supprime le contenu de ces plages SAUF les formules de référence (voir 3) : suppression_formules
3/ écrire une macro qui rajoute ces formules de référence dans toute la plage : ajout_formules
4/ appeler suppression_formules juste avant la fermeture du classeur et enregistrer le classeur (procédure événementielle)
5/ appeler ajout_formules à l’ouverture du classeur (procédure événementielle)
C’est théorique, donc je donnerai un exemple un peu plus tard, mais pour ceux qui ont des gros fichiers à réduire, ca vaut très largement le coup de se pencher sur la question.
J’ai ainsi réduit un fichier de 7 000 ko à 3 000 ko…
A bientôt
Gaetan
Suite à des échanges fructueux avec un lecteur de mon site, voici une autre astuces en VBA assez sympathique.
L’objectif est de déplacer la feuille qui vient d’être modifiée pour l’avoir toujours en première position.
Le code de la procédure événementielle à ajouter à ThisWorkbook (voir vidéo) est le suivant :
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name <> Worksheets(1).Name Then
Sh.Move Before:=Sheets(1)
End If
End Sub
Voici la procédure en vidéo
|
|
A bientôt.
Gaetan Mourmant
Bonjour,
J’avais démarré ce cours sur PolyKromy et je viens d’ajouter 3 nouvelles vidéos à la quatrième et dernière partie.
Si vous voulez savoir comment naviguer à travers une base de données à l’aide d’un double clic, ou encore comment actualiser un tableau croisé dynamique à la sélection d’une feuille, je vous invite à y faire un tour.
A bientôt.
Gaetan Mourmant