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 :

Récupération dans différentes feuilles pour créer un tableau


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Récupération dans différentes feuilles pour créer un tableau
    Bonjour,

    Je suis en train de réaliser une macro qui doit reconstruire un tableau à l'aide des différentes colonnes présentes dans les feuilles excel du classeur.

    Dans le code que je vous fourni je récupère les colonnes qui concerne l'echelon "P65T -A40" dans l'idée je pense que je suis bon mais il refuse de me le lancer il me met des erreur notamment pour l'association des valeurs ou des objet sur mes variable. Je pense que je ne les déclare pas correctement.
    Je suis totalement novice en VBA et j'aurais besoin d'aide pour débugger mon petit bout de programme.

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    Public P65TA40()
     
    Dim i As Integer
    Dim j As Integer
    Dim Col As Range
    Set Col = Sheets("Synthèse").Range("D1") 'defini l'emplacement D1 de la feuille synthèse cela sera moi point de départ pour copier mes différentes colonnes
    i = 1
    For i = 1 To Sheets.Count
    Sheets(i).Activate 'active la feuille
        j = 1 'reinitialise la boucle j
        t = Cells.Find(What:="P50T - A30", After:="V13", LookIn:=xlFormulas, _
            LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
            MatchCase:=False, SearchFormat:=False).Activate
        'recherche la première valeur dans la feuille séléctionnée je démarre à V13 pour ne pas prendre en compte une partie du tableau.
     
        For j = 1 To WorksheetFunction.CountIf("I1:BR150", "P65T - A40") * 0.5 'boucle de copie des echelons "P65T - A40". *0.5 car je copie 2 colonne a chaque fois et que la valeur recherchée apparait dans les deux colonnes
        ActiveCell.Column.Offset(0, 2).Select 'sectionne les deux colonnes
        Selection.Copy 'copie les deux colonnes
        Sheets("Synthèse").Select 'selectionne la feuille synthèse
        Range(Col).Select 'je me place sur "D1" cette valeur sera incrémenté plus tard et me permet de coller a la suite dans synthèse
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False 'je ne copie que la valeur
        Col = Col.Offset(0, 2) 'j'incrémente col en le déplaçant de deux colonnes sur la droite pour pouvoir copier la prochaine recherche à la suite
        Sheets(i).Select 'retour à la feuille initiale
        t = .Selection.FindNext(After:=t).Activate 'séléctionne la nouvelle valeur de la recherche si elle existe
     
        Next j
        Next i
     
        End Sub
    Voici le bout de code que j'ai fait. En dehors du fait qu'il me met un certain nombre d'erreur notamment sur le "D1" du début et je ne comprend pas pourquoi.
    Je voudrais faire plusieurs recherche de valeur à la suite mais je voudrais éviter de coller ce bout de code plusieurs fois. Je pense qu'en créant une liste avec mes valeurs et en les appelant dans une boucle j'aurais quelque chose de plus léger. Je n'ai rien pu trouver sur internet à ce sujet
    J'ai essayé de mettre des commentaires pour qu'il soit plus facile de s'y retrouver.
    Je n'ai également réussi qu'à copier les valeurs de mon tableau j'aurais souhaiter copier la mise en forme en même temps mais je ne sais pas si cela est possible. Par exemple affecter la mise en forme "fond jaune et couleur de police jaune dans les case avec un 1. Au pire pour cette partie je feinterais si cela n'est pas possible.
    Je vous remercie par avance pour vos conseils.

  2. #2
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut
    Je viens de lire ton message. Je n'ai pas compris ce que tu cherche à faire exactement. Il est difficile de s'imaginer ce que fera ton code sans fichier. J'ajoute qu'il est difficile de reprendre le code d'un autre. Surtout que si tu débutes, tu n'as pas dû utiliser la méthode la plus adéquate. Est ce que tu peux joindre un fichier à ton message et expliquer exactement le résultat que tu souhaites obtenir ? Je pense que ce sera plus facile pour nous de réécrire la macro directement.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Oui j'aurais du y penser mais j'ai laisser mon fichier au boulot :/

    Je viens de refaire le ficher enfin une vague idée de ce qu'il était au début en espérant que ca pourra t'éclairer

    Le but de la macro est de balayer les feuilles à la recherche de "P65T - A40" de copier les colonnes correspondante dans la feuille "synthèse"

    Je répèterais ensuite la procédure pour tout les type d'échelons "P65T - A40", P50T - A30, ...

    les cellules avec des "1" ont une mise en forme conditionnelle et prenne une couleur associé au type d'échelon qui est défini en haut de colonne. ca ne marche pas dans le fichier joint mais dans l'original si

    merci de ton aide
    Fichiers attachés Fichiers attachés

  4. #4
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut
    Je ne suis pas sûr d'avoir exactement saisi ce que tu souhaites faire, mais j'ai fait quelque chose qui va peut être nous permettre d'avancer. Voici le code :

    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
    Sub toto()
        Dim plage As Range
        Set plage = Range("I1:Z6")
     
        Dim celluleActive As Range
        Set celluleActive = Sheets("Synthèse").Range("D1")
     
        Dim cellule As Range
        Dim numeroColonne As Integer
        For Each cellule In plage
            If cellule.Value = "P65T - A40" Then
                numeroColonne = cellule.Column
                Columns(numeroColonne).Copy Destination:=Sheets("Synthèse").Range(celluleActive.Address)
                Set celluleActive = celluleActive.Offset(0, 1)
            End If
        Next cellule
    End Sub
    A lancer sur une feuille Lot i. Je ne sais pas si c'est quelque chose comme cela que tu souhaites, mais si ce que tu souhaites ressemble à cela, soit tu arrives à ton but en modifiant mon code, soit tu me dis ce qui ne va pas et on voit comment faire (mais demain parce que là il est tard). Mais ton code me semble bien compliqué pour faire des copier coller.

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Dans mon idée je balaye chaque feuille avec une recherche et dès que je trouve une colonne avec ma valeur je la colle à la suite dans ma feuille synthèse. Puis je recommence pour toute les valeurs possible d'échelon.

    Je pense pouvoir utiliser ton code pour arriver à mes fins pour balayer toutes les feuilles. La recherche que tu utilise est bien plus légère que la mienne je l'avoue pas de test pour vérifier que la recherche est finie ca alège déjà pas mal

    En tout cas la déclaration des variables et de légères modifications vont sans doute me permettre d'aboutir
    Je te remercie je vais tester ca faire les modifications nécessaires et je te mettrais le fichier original ainsi que le code modifié.

    Merci beaucoup en tout cas

    Bonjour,

    J'ai modifié ton code de départ pour qu'il corresponde à ce que je veux faire mais je me retrouve confronté à deux problèmes :

    Il me copie bien les colonnes mais les cellules fusionnées ne sont pas copiée je pense qu'il faudrait copier les colonne deux par deux pour ressoudre le pb mais j'ai essayé avec la command Offset mais ca ne marche pas:/
    J'aimerais également qu'il me fasse deux copie : une normal comme celle qui est faite puis une avec juste les valeurs dans les cellules et pas les formules. De cette manière je garde mes valeur et mes mises en forme conditionnelles

    J'ai également un petit pb je voudrais mettre un bouton sur la dernièere page pour lancer la macro mais le bouton ne marche que pour la page concernée

    Je te joint le fichier original pour que ca soit plus clair qu'avec l'exemple d'hier.
    Fichiers attachés Fichiers attachés

  6. #6
    Membre habitué
    Inscrit en
    Janvier 2004
    Messages
    173
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 173
    Points : 127
    Points
    127
    Par défaut
    Cela redevient un peu compliqué. J'ai beau lire et relire ton message, je ne vois pas ce que tu cherches à faire. Vu que tu comprends un peu VBA, est ce que tu peux décomposer ton problème compliqué en une multitude de problèmes simples.

    Du style, tu nous copie un bout de tableau et tu nous dis, j'aimerais qu'il me fasse ça. Même si c'est juste un exemple inventé, l'important c'est que ce soit pas compliqué à comprendre pour nous et qu'après, avec la solution qu'on t'apporte tu arrives à adapter ton code pour ton problème.

    J'ai fait un truc vite fait pour pouvoir copier les deux colonnes une fois que tu sais que ton texte se trouve dans la cellule E7. je te joins le fichier. Tu devrais pouvoir l'adapter pour ton problème ensuite. J'ai pris 10000 lignes dans l'offset, je pense qu'il y a moyen de faire plus propres, mais si tu es sûr qu'il n'y aura rien en dessous de ton tableau, ça peut être quelque chose d'acceptable.

    Sinon, pour le bouton, que veux tu exactement ? Tu veux qu'un bouton dans la Feuil1 fasse des calculs dans la Feuil2 ? Est ce que tu peux créer un petit exemple (presque un exercice scolaire) qui serait facile à résoudre pour nous sans se casser la tête et que tu pourrais ensuite adapter ?

    Pour le fichier que je te joins, c'est bien un fichier Excel il suffit de le charger et de modifier l'extension *.doc en *.xlsm pour récupérer un fichier ouvrable par Excel.
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. idée pour créer un tableau
    Par adriennoob dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/05/2010, 18h30
  2. Réponses: 0
    Dernier message: 27/04/2010, 16h40
  3. Réponses: 1
    Dernier message: 02/02/2009, 19h12
  4. Réponses: 8
    Dernier message: 04/01/2008, 08h28
  5. Réponses: 10
    Dernier message: 21/09/2006, 19h18

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