VBA et EXCEL

Résolu
Bonjour,
voila mon responsable ma demandé de faire un travail le plutot possible j'ai besoin de votre aides SVP:
j'ai 11 mois, et 30 jours chaque mois, je veux prendre des informations de chaque feuille excel(numéro, identifiant, pannes, et description) que je met dans une autre feuille.
et cela pour les 30 feuilles de chaque mois et 11 mois(donc 30*11), j'ai touver des macros pour la concaténation, j'ai pas bien compris :(
le soucis c'est que le nombre de pannes est différents d'un jour à un autre comment pourrai-je faire?????? j'attends avce impatience vos réponse merci :)

8 réponses

  1. Bonjour,

    Une piste :

    Le code suivant

    lg= ActiveSheet.Cells.Find("*", [A1], , , , xlPrevious).Row

    te donnes le n° de la dernière ligne non vide de la colonne A de la feuille active
    En l'appliquant sur une feuille de données tu peux avec une boucle for n=3 to lg par exemple copier les données de la ligne 3 à la ligne lg de ta feuille

    La même formule appliquée à ta feuille de résultat te permets également de trouver la derniere ligne occupée et donc de coller les resultats à partir de b=lg+1 en dessous des précédents

    Cdlmnt
    0
    1. pour bien expliquer mon probleme, j'ai 11 fichiers excel avec 30 feuilles dans chacun d'eux:

      1- je veux extraire certaines informations de chaque feuille (panne, numéro, id)
      cepandant c'est feuilles ont la meme structure mais avec des contenus qui différent gnre dans une feuille on trouve 2 pannes et dans une autres 6.

      2-mettre c'est infos de toutes les feuilles et de tout les dossier sur une seule feuille

      je suis débutante en VBA et j'ai vraiment besoin d'aide, merci beaucoup.
      0
      1. Peutx tu poster un exemple de ton fichier allégé et anonymé en indiquant les informations à récupérer et sous quelle forme tu veux qu'elles soient présentées sur la feuille récapitulative ?
        Tu dis avoir 11 classeurs : ont ils la même structure de nom ?

        Pour joindre un fichier tu passes par cjoint.com puis tu indiques le lien dans ton prochain message
        0
        1. voila un exemple d'une feuille parmis les 30 de chaque chaque classeur
          https://www.cjoint.com/?CBomxFro7Oc
          il me faut le numéro de la colonne A et B mais que les pannes de la colonne G dans cette exemple y'en 2 et pas les autres et c'st comme ça pour toutes ls autres feuilles sauf que pannes peut changer de place elle peut etre dans la premiere, derniere ligne,...
          0
          1. Si je comprends bien la feuille recap ne doit avoir que 3 colonnes reprenant les N°s de A et B et le nombre de G si panne et tout cela à lasuite , c a dire que si feuille 1 a 2 pannes elles seront retrouveront ligne 1 et 2 du recap et si feuille 2 a 3 pannes elles se retrouveront lignes 3, 4 et 5 ?
            Me confirmer si c'est bien cela
            Je dois m'absenter mais je me penche sur le probleme ce soir
            Toutes les feuilles sont elles nommées de la meme maniere? par ex avec le nom du jour ou c'est seulmeent feuil 1, 2 etc?
            ET les classeurs de mois comment sont ils nommés
            Il faut le savoir car il va falloir passer par un codage en VBA
            0
            1. merci via55 pour ta réponse voila ce que je veux avoir:
              1- si dans ma feuille excle y'a pannes de cette ligne (qui contient pann) je prend quelqu colonnes pas toute genre la colonne A, B, E, G (il faut que j'extrait les pannes de ces feuilles)
              2-je fait ça avec toutes les feuilles du fichier(en faite une feuille qui contient des pannes c'est une journée, et le fichier qui contient 30 sont les 30 jours du mois et les 11 fichiers sont 11 mois de l'année)
              3-voila un exemple des noms des feuilles excel
              RJ 472012-12-01 - Version 201525(pour le premier)
              RJ 472012-12-02 - Version 202838 (pour le deuxieme)
              RJ 472012-12-03 - Version 202644(pour le t"ieme) ainsi de suite
              4-exemple de nomes des fichiers
              12 DEC2012-182(pour le premier)
              2 DEC 2012-47(pour le 2ieme)
              voila j'espere que je suis assez claire :)
              0
              1. Bonsoir

                Comme les noms de classeurs pour les mois n'ont pas apparement une denomination logique et suivie il est difficile de faire une automatisation globale
                Par contre on peut faire une automatisation pour les 30 pages du classeur

                Dans la fauille 1 du classeur Résultat mettre le code suivant

                Sub copiepannes()

                nom1 = InputBox("Quel est le nom du classeur à copier ?")
                nom2 = ActiveWorkbook.Name
                For p = 1 To 30 'va verifier les 30 premieres feuilles du classeur à copier
                For n = 2 To 201 'verifie 200 lignes à modifier s'il en a plus

                If Workbooks(nom1).Worksheets(p).Cells(n, 5).Value = "Pannes" Then 'verifie la présence de Pannes en colonne E

                Workbooks(nom2).Worksheets(1).Cells(1, 1).Select 'Selectionne la 1ere feuille du classeur resultat
                If IsEmpty(Workbooks(nom2).Worksheets(1).Cells(2, 1)) Then g = 2 Else F = Selection.End(xlDown).Row: g = F + 1 'se postionne 1ere ligne vide du classeur Résultat

                Workbooks(nom2).Worksheets(1).Cells(g, 1).Value = Workbooks(nom1).Worksheets(p).Cells(n, 1).Value 'copie colonne A feuille copie en colonne A feuille resultat
                Workbooks(nom2).Worksheets(1).Cells(g, 2).Value = Workbooks(nom1).Worksheets(p).Cells(n, 2).Value 'copie colonne B en colonne B
                Workbooks(nom2).Worksheets(1).Cells(g, 3).Value = Workbooks(nom1).Worksheets(p).Cells(n, 6).Value 'copie colonne F en colonne C
                Workbooks(nom2).Worksheets(1).Cells(g, 4).Value = Workbooks(nom1).Worksheets(p).Cells(n, 7).Value 'copie colonne G en colonne D

                End If
                Next n
                Next p

                End Sub

                Ouvrir le 1er classeur mensuel
                Revenir sur le Classeur Résultat et lancer la macro
                Indiquer le nom du classeur mensuel quand il est demandé
                Les infos des colonnes A, B, F et G concernant les pannes seront recopiées dans la feuille 1 du classeur Résultat

                Ouvrir le 2eme classeur mensuel et relancer la macro, les infos seront recopiées à la suite des autres
                etc

                A adapter selon tes besoins

                cdlmnt
                0
                1. Modérateur
                  Bonjour bonjour,

                  Ou une solution supplémentaire, placer au préalable tous vos classeurs excel (et rien que ceux la) dans un même répertorie, et boucler sur tous les fichiers excel de ce répertoire :
                  Sources

                      Dim Chemin As String, Fichier As String
                      
                      'Définit le répertoire contenant les fichiers
                      Chemin = "C:\dossier\"
                      
                      'Boucle sur tous les fichiers xls du répertoire.
                      Fichier = Dir(Chemin & "*.xls")
                      'Utilisez la syntaxe suivante pour boucler sur tous les types de fichiers:
                      'Fichier = Dir(Chemin & "*.*")
                      
                      Do While Len(Fichier) > 0
                          'écrit le résultat dans la fenêtre d'exécution (Ctrl+G).
                          Debug.Print Chemin & Fichier
                          Fichier = Dir()
                      Loop
                  0