[Excel] Macro pour compléter automatiquement une liste ?

Répondre
Partager Rechercher
bonjour,
Des amateurs d'excel ici ?


Je n'arrive pas à résoudre mon problème suivant :

J'ai un tableau dans lequel on place une croix selon le prof qui va prendre telle classe pour l'année prochaine ( ), ce tableau calcule les heures etc et marche très bien.

J'aimerai à partir de ce tableau, et c'est là mon problème, générer un onglet par prof dans le fichier excel avec la liste de ses classes

un exemple :

23282-1649945390-4863.png

Voilà quoi ressemble le tableau

Je veux qu'Excel, après appui sur un bouton "générer" me crée :

23282-1649945458-7093.png


Pourriez vous m'aiguiller ?

Grosso modo il faut en algo quand on clique sur le bouton "générer les onglets" que excel fasse :
- cree un onglet au nom du prof de la case B1
- parcourir la colonne du prof, (colonne B)
- si une croix alors on recopie la valeur de la colonne A correspondant dans une case de l'onglet créé au point 1
- quand la colonne B n'a plus de match dans la colonne A (c'est à dire qu'on a fini de parcourir le tableau) on passe à la colonne C,
- on recommence depuis le début

Je pense que j'arriverai à le faire en Python si c'était dans des listes ou autre mais je ne maîtrise pas le VBA d'excel
C'est possible techniquement ?
Citation :
Publié par Fugo
Je pense que j'arriverai à le faire en Python si c'était dans des listes ou autre mais je ne maîtrise pas le VBA d'excel
C'est possible techniquement ?
Oui c'est possible, mais il faut effectivement toucher aux macros VBA.

Par contre si tu sais le faire en python tu as deux solutions:
- Enregistrer en CSV et utiliser la lib csv incluse dans python
- Installer une librairie tierce pour ouvrir les XLSX comme pandas ou openpyxl
Citation :
Publié par Hakkai
Oui c'est possible, mais il faut effectivement toucher aux macros VBA.

Par contre si tu sais le faire en python tu as deux solutions:
- Enregistrer en CSV et utiliser la lib csv incluse dans python
- Installer une librairie tierce pour ouvrir les XLSX comme pandas ou openpyxl
Dans l'idéal ce doc serait partagé à des "neophytes" donc c'est pour ça que j'aimerai rester sur Excel en VBA.

Quelqu'un aurait des pistes ou de la doc pour m'aiguiller ?
Citation :
Publié par Fugo
Dans l'idéal ce doc serait partagé à des "neophytes" donc c'est pour ça que j'aimerai rester sur Excel en VBA.

Quelqu'un aurait des pistes ou de la doc pour m'aiguiller ?
J imagine que le nombre ou nom de prof change chaque année.
Dommage j'ai pzs bcp de temps, mais j 'essayerai de voir.
Mais il y a une solution, sans meme connaitre le vba, excel permet de creer des macros avec le systeme d enregistrement.
En gros tu fais la manip et excel la retranscrie en code.
Il te suffit de rajouter ta boucle ou ton for sur la bonne ligne (en checkant sur le net, tu devrais trouver l'exemple qu'il te faut)
Citation :
Publié par Fugo
Dans l'idéal ce doc serait partagé à des "neophytes" donc c'est pour ça que j'aimerai rester sur Excel en VBA.

Quelqu'un aurait des pistes ou de la doc pour m'aiguiller ?
Code:
Sub parse_col()
Dim last_col As Long, i As Integer, ws As Worksheet
Application.ScreenUpdating = False 'On ne met pas a jour l'affichage en temps reel
With ActiveSheet
    last_col = .Cells(1, Columns.Count).End(xlToLeft).Column 'On recupere le nombre de colonne
    For i = 2 To last_col 'On ignore la première colonne et on boucle sur le nombre de colonnes
        Set ws = Sheets.Add(after:=Sheets(Sheets.Count)) 'Creation de la nouvelle feuille
        .Columns(1).Copy Destination:=ws.Range("A1") 'On copie la première colonne (noms des lignes)
        .Columns(i).Copy Destination:=ws.Range("B1") 'On copie la colonne actuelle (valeurs)
        ws.Name = .Cells(1, i) 'On renomme la feuille avec le nom de la colonne
    Next i
End With
End Sub
C'est relativement lent pour ce que c'est censé faire, mais Excel est lent donc bon...
Citation :
Publié par Hakkai
Code:
Sub parse_col()
Dim last_col As Long, i As Integer, ws As Worksheet
Application.ScreenUpdating = False 'On ne met pas a jour l'affichage en temps reel
With ActiveSheet
    last_col = .Cells(1, Columns.Count).End(xlToLeft).Column 'On recupere le nombre de colonne
    For i = 2 To last_col 'On ignore la première colonne et on boucle sur le nombre de colonnes
        Set ws = Sheets.Add(after:=Sheets(Sheets.Count)) 'Creation de la nouvelle feuille
        .Columns(1).Copy Destination:=ws.Range("A1") 'On copie la première colonne (noms des lignes)
        .Columns(i).Copy Destination:=ws.Range("B1") 'On copie la colonne actuelle (valeurs)
        ws.Name = .Cells(1, i) 'On renomme la feuille avec le nom de la colonne
    Next i
End With
End Sub
C'est relativement lent pour ce que c'est censé faire, mais Excel est lent donc bon...
un grand merci !
Je comprend mieux comment créer les feuilles du coup merci
Citation :
Publié par Fugo
un grand merci !
Je comprend mieux comment créer les feuilles du coup merci
Je viens de voir que je n'ai pas fait exactement ce que tu demandais, mais il suffit de rajouter un filtre dans la boucle pour n'afficher que les formations dans lesquels il y a une croix.
Code:
ws.Range("B1").AutoFilter Field:=2, Criteria1:="x"
Citation :
Publié par Hakkai
Je viens de voir que je n'ai pas fait exactement ce que tu demandais, mais il suffit de rajouter un filtre dans la boucle pour n'afficher que les formations dans lesquels il y a une croix.
Code:
ws.Range("B1").AutoFilter Field:=2, Criteria1:="x"
edit : c'est bon, nickel, merci
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés