Bonjour,
Je dois proceder a une mise en forme a partir d'une série de classeurs excels.
Le but du jeu est de préparer une insertion automatique dans un logiciel de stock
Actuellement, j'ai une page avec des données, et une page ou j'extrais les infos dont j'ai besoin et ou je les formatte comme il faut.
Cette page de résultat commence par identifier toutes les lignes de ma page de données dont j'ai besoin (la colonne A de l'onglet résultat ne comporte que des chiffres, qui correspondent aux n° lignes dont j'ai besoin de mon onglet donnée)
La problématique du moment est qu'il y a parfois des commentaires sur la page de donnée (dans deux colonnes précise) et que je voudrais rapatrier le contenu dans ma page de résultat, dans une cellule (pas en tant que commentaires), sur la ligne qui correspond (donc si le commentaire était dans l'onglet donnée sur la ligne 25, il faut qu'il atterisse dans la page de résultat sur la ligne qui dans la colonne A a le n° 25) et que je lui fasse un peu de toilettage.
Apparement, je ne peux pas récuperer les commentaires avec une fonction qui existerait de base dans Excel. Donc, je regarde du coté du VBA
J'ai une petite base qui peut fonctionner mais qui est moche, qui est longue a mettre en oeuvre et qui m'oblige à passer par une page intermédaire
Et apres, comme c'est exactement le meme n° de ligne que sur la page donnée, je vais rechercher via des fonctions les infos sur ma page provisoire et je les met en page comme il faut
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 Sub comments() Dim i As Long, k As Long, DerLigne As Long 'va chercher le nombre de lignes sur la page de donnée Sheets("données").Select DerLigne = Cells(Columns(1).Cells.Count, 1).End(xlUp).Row 'retourne sur la page provisoire Sheets("Sheet1").Select Range("A1").Select k = 1 For i = 1 To DerLigne 'range dans les colonne A et B de la page provisoir le commentaire de la meme ligne de la page de donnée. N'écrit rien et passe a la ligne suivante s'il n'y a pas de commentaire On Error Resume Next Sheets("sheet1").Cells(k, 1) = Sheets("données").Cells(i, 7).Comment.Text On Error Resume Next Sheets("sheet1").Cells(k, 2) = Sheets("données").Cells(i, 6).Comment.Text k = k + 1 Next i End Sub
Donc j'ai une solution. Mais je la trouve minable
Outre que c'est du bricolage et que ca se voit, c'est vraiment tres peu optimisé. Lancer la macro prend déja 2 minutes pour 250 malheureuses lignes, hors je vais avoir un certain nombre de classeurs a faire, certains beaucoup plus longs.
Donc je viens voir si quelqu'un a une meilleure idée a proposer (a priori, vu mon niveau en VBA, ca ne va pas etre dur de trouver mieux)
Est-ce que je gagnerais en vitesse d'exécution en cherchant comment fabriquer une fonction qui fasse un truc du genre
=commentaire(cellule)
et qui restiturait le commentaire de la cellule?
Outre que ca me semble plus élégant, ca permettrait de ne plus devoir s'occuper de toute les lignes mais uniquement des celles dont j'ai besoin.
Mais, en plus de ne pas avoir la moindre idée de comment on fait une fonction, je ne suis pas sur que ca possible ni que ca soit plus léger a utiliser ensuite
Partager