VBA et EXCEL
Résolu/Fermé
nesskh
Messages postés
8
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
4 septembre 2013
-
13 févr. 2013 à 11:51
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 15 févr. 2013 à 08:41
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 15 févr. 2013 à 08:41
A voir également:
- VBA et EXCEL
- Si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Mise en forme conditionnelle excel - Guide
8 réponses
via55
Messages postés
14474
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 septembre 2024
2 728
13 févr. 2013 à 14:04
13 févr. 2013 à 14:04
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
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
nesskh
Messages postés
8
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
4 septembre 2013
Modifié par nesskh le 14/02/2013 à 09:39
Modifié par nesskh le 14/02/2013 à 09:39
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.
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.
via55
Messages postés
14474
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 septembre 2024
2 728
14 févr. 2013 à 12:07
14 févr. 2013 à 12:07
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
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
nesskh
Messages postés
8
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
4 septembre 2013
14 févr. 2013 à 12:24
14 févr. 2013 à 12:24
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,...
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,...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
via55
Messages postés
14474
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 septembre 2024
2 728
14 févr. 2013 à 13:36
14 févr. 2013 à 13:36
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
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
nesskh
Messages postés
8
Date d'inscription
mercredi 13 février 2013
Statut
Membre
Dernière intervention
4 septembre 2013
14 févr. 2013 à 13:57
14 févr. 2013 à 13:57
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 :)
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 :)
via55
Messages postés
14474
Date d'inscription
mercredi 16 janvier 2013
Statut
Membre
Dernière intervention
19 septembre 2024
2 728
14 févr. 2013 à 23:21
14 févr. 2013 à 23:21
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
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 750
15 févr. 2013 à 08:41
15 févr. 2013 à 08:41
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 :
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