0 votes

Aide macro Excel - vérifier si les cases à gauche ou à droite sont remplies

J'ai une application qui génère un rapport HTML qui peut être ouvert dans Excel. J'ai écrit des macros pour essayer de formater ce rapport de manière à ce qu'il puisse être trié et que des filtres puissent être appliqués. Il est impossible de deviner la longueur de ces rapports, qui peuvent être plus importants certaines semaines et plus petits d'autres.

J'essaie d'écrire une macro vba script afin de saisir du texte entre les slashs. Pour l'instant, le problème que je rencontre est que la taille du rapport (le nombre de lignes qu'il occupera) n'étant pas encore connue, je ne sais pas trop comment écrire ma macro.

La colonne A est vide. La colonne B contient le nom complet du chemin d'accès. SI la colonne a est remplie, la colonne c contient le texte entre les barres obliques. (Par exemple, la colonne B contient R:\testdocuments\test.html....i veulent que la colonne c contienne des documents de test).

Jusqu'à présent, le code que j'ai pour la colonne C est le suivant :

Range("C9").Select
ActiveCell.FormulaR1C1 = _
    "=MID(RC[-1], FIND(""\"",RC[-1])+1, FIND(""\"",RC[-1], FIND(""\"",RC[-1])+1)-FIND(""\"",RC[-1])-1)"
Range("C9").Select
    Selection.AutoFill Destination:=Range("C9:C65000"), Type:=xlFillDefault
Range("C9:C20000").Select

Comme vous pouvez le constater, cette méthode n'est pas efficace car il faut une éternité pour trier/filtrer quoi que ce soit.

Quelqu'un peut-il fournir le code qui vérifiera si la colonne b est remplie et, si et SEULEMENT si elle est remplie, qui remplira C avec le texte entre les barres obliques pour la possibilité de filtrer par répertoire ? Je suis totalement étranger à Excel-VBA et j'ai besoin de toute l'aide possible.

Merci d'avance.

3voto

devuxer Points 15633

Tout d'abord, quelques conseils généraux :

  1. Lors de l'écriture de macros, vous pouvez travailler avec des plages sans les sélectionner.

  2. Utilisez le code suivant au début de votre macro pour éviter que l'application ne s'anime (ce qui la ralentit) : Application.ScreenUpdating = False

    Editer : Veillez à rétablir la valeur "True" une fois que vous avez terminé.

  3. Au lieu de Range("C9:C65000") vous pouvez laisser Excel trouver la dernière ligne pour vous en utilisant la fonction Range("A1").SpecialCells(xlCellTypeLastCell).Row .

Ainsi, la macro pourrait ressembler à quelque chose comme ceci :

Sub FillFormulas()
    Dim row As Integer
    Application.ScreenUpdating = False
    row = Range("B9").SpecialCells(xlCellTypeLastCell).row
    Range("C9").Formula = "=MID(B9, FIND(""\"",B9)+1, FIND(""\"",B9, FIND(""\"",B9)+1)-FIND(""\"",B9)-1)"
    Range(Range("C9"), Range("C" & row)).FillDown
End Sub

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X