VBA et EXCEL

Résolu
nesskh Messages postés 12 Statut Membre -  
pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   -
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. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  2. nesskh Messages postés 12 Statut Membre
     
    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
  3. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  4. nesskh Messages postés 12 Statut Membre
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  7. nesskh Messages postés 12 Statut Membre
     
    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
  8. via55 Messages postés 14393 Date d'inscription   Statut Membre Dernière intervention   2 759
     
    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
  9. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    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