IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[débutante VBA] Aller chercher des commentaires


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut [débutante VBA] Aller chercher des commentaires
    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

    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
    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

    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

  2. #2
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Bonjour,
    Ce sera certainement plus rapide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
       Sheets("sheet1").Select
        With Sheets("Donnée")
            .Range("G1:G" & .Range(G65536).End(xlUp).Row).Copy
            Range("A1").Select
            Selection.PasteSpecial Paste:=xlPasteComments, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
            .Range("F1:F" & .Range(F65536).End(xlUp).Row).Copy
            Range("B1").Select
            Selection.PasteSpecial Paste:=xlPasteComments, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
         End With
    Je n'ai pas tester et je pense que le PasteSpecial ne peut pas être appliquer directement sur le Range mais tu peu essayer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Range("A1").PasteSpecial Paste:=xlPasteComments, Operation:=xlNone, _
                SkipBlanks:=False, Transpose:=False
    A+

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut


    il me fait une erreur 1004 sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("G1:G" & .Range(G65536).End(xlUp).Row).Copy
    je présume que j'ai du mal faire quelque chose, mais je ne comprend pas quoi

  4. #4
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Non, c'est moi.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("G1:G" & .Range("G65536").End(xlUp).Row).Copy
    idem pour l'autre ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range("F1:F" & .Range("F65536").End(xlUp).Row).Copy
    A+

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    791
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2008
    Messages : 791
    Par défaut
    Ah, ca marche (désolée, j'essaye d'aprendre au fur et a mesure, mais du coup, si quelqu'un chos ene marche pas, j'ai vraiment du mal a trouver toute seule d'ou vient le probleme Ca ira mieux a l'usage )
    Et ca va super vite
    Par contre ca me les remets en commentaire ca. J'essaye de les avoir en corps de cellule

  6. #6
    Inactif  
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 054
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 054
    Par défaut
    Tu veux donc avoir le contenu des commentaires en texte dans des cellules
    Là je pense que tu n'auras pas d'autre solution que ton 1ér exemple.
    A+

Discussions similaires

  1. aller chercher des variables
    Par jero12 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 20/09/2013, 08h02
  2. Aller chercher des données automatiquement dans un répertoire
    Par zazrun dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 11/01/2013, 11h43
  3. Aller chercher des données dans la BDD
    Par zooffy dans le forum Silverlight
    Réponses: 9
    Dernier message: 14/06/2011, 09h35
  4. Aller chercher des données dans un stringgrid
    Par cre3000 dans le forum Langage
    Réponses: 2
    Dernier message: 29/02/2008, 13h27
  5. Réponses: 15
    Dernier message: 27/08/2006, 18h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo