De la VBA
Bonjour a tous, j'ai des cours d'informatique à l'université et nous étudions le VBA.
Suite a de nombreuses aide de la part de notre professeur, mon document marche enfin.
cependant pour reviser, j'ai voulu relire le VBA... celui ci me paraissait incomprehensible ! :/
J'aurais donc aimer avoir quelques aide et explication sur ce VBA
Merci d'avance..
Option Explicit
Sub chef()
Call recup(7, "profs", "enseignants")
Call recup(8, "groupes", "groupe")
Call recup(9, "types", "type")
Call recup(10, "salles", "salle")
End Sub
Sub recup(colonne As Integer, nom_f As String, titre As String)
Dim tab_prof() As String
Dim Nb_prof As Integer
Dim ligne As Long, nb As Long
Dim ilyé As Boolean, v As Variant, f As Integer, k As Integer, truc As String, machin As Boolean
ReDim tab_prof(0)
For nb = 1 To 3
Sheets(nb).Select
ligne = 2
Do While Cells(ligne, 3) <> ""
truc = Cells(ligne, colonne)
If truc <> "" Then
If InStr(1, truc, ",") = 0 Then
Call ajout_element(tab_prof, Nb_prof, truc)
Else
v = Split(truc, ", ")
For f = 0 To UBound(v)
truc = v(f)
Call ajout_element(tab_prof, Nb_prof, truc)
Next
End If
End If
ligne = ligne + 1
Loop
Next
Call ecrire(tab_prof, nom_f, titre)
End Sub
Sub ajout_element(tableau() As String, nb_elem As Integer, element As String)
Dim machin As Boolean, k As Integer
machin = False
For k = 1 To nb_elem
If element = tableau(k) Then
machin = True
End If
Next
If machin = False Then
nb_elem = nb_elem + 1
ReDim Preserve tableau(nb_elem)
tableau(nb_elem) = element
End If
End Sub
Sub ecrire(Table() As String, nom_f As String, titre As String)
Dim I
Sheets(nom_f).Select
Cells(1, 1) = titre: Cells(1, 2) = "numero"
For I = 1 To UBound(Table)
Cells(I + 1, 1) = Table(I): Cells(I + 1, 2) = I
Next
End Sub
Sub truc()
Dim np As Integer, nom As String, l As Integer, c As Integer
np = 1
Sheets("activités").Select
c = 2
'pour chaque prof
Do While Sheets("profs").Cells(np + 1, 1) <> ""
nom = Sheets("profs").Cells(np + 1, 1)
'parcourir les lignes activites
l = 2
Do While Cells(l, 3) <> ""
If InStr(1, Cells(l, 7), nom) Then
Sheets("r_prof_activ").Cells(c, 1) = Range("k" & l)
Sheets("r_prof_activ").Cells(c, 2) = np
Sheets("r_prof_activ").Cells(c, 3) = Range("l" & l)
Sheets("r_prof_activ").Cells(c, 4) = Range("i" & l)
Sheets("r_prof_activ").Cells(c, 5) = Range("m" & l)
c = c + 1
End If
l = l + 1
Loop
np = np + 1
Loop
End Sub
Sub trucs()
Dim na As Integer, salle As String, l As Integer, c As Integer
na = 1
Sheets("activités").Select
c = 2
'pour chaque activités
Do While Sheets("salles").Cells(na + 1, 1) <> ""
salle = Sheets("salles").Cells(na + 1, 1)
'parcourir les lignes salles
l = 2
Do While Cells(l, 3) <> ""
If InStr(1, Cells(l, 10), salle) Then
Sheets("r_activité_salle").Cells(c, 1) = Range("k" & l)
Sheets("r_activité_salle").Cells(c, 2) = na
Sheets("r_activité_salle").Cells(c, 3) = Range("l" & l)
Sheets("r_activité_salle").Cells(c, 4) = Range("i" & l)
Sheets("r_activité_salle").Cells(c, 5) = Range("m" & l)
c = c + 1
End If
l = l + 1
Loop
na = na + 1
Loop
End Sub
Sub truk()
Dim ng As Integer, groupe As String, l As Integer, c As Integer
ng = 1
Sheets("activités").Select
c = 2
'pour chaque activités
Do While Sheets("groupes").Cells(ng + 1, 1) <> ""
groupe = Sheets("groupes").Cells(ng + 1, 1)
'parcourir les lignes groupes
l = 2
Do While Cells(l, 3) <> ""
If InStr(1, Cells(l, 8), groupe) Then
Sheets("r_activité_groupe").Cells(c, 1) = Range("k" & l)
Sheets("r_activité_groupe").Cells(c, 2) = ng
Sheets("r_activité_groupe").Cells(c, 3) = Range("l" & l)
Sheets("r_activité_groupe").Cells(c, 4) = Range("i" & l)
Sheets("r_activité_groupe").Cells(c, 5) = Range("m" & l)
c = c + 1
End If
l = l + 1
Loop
ng = ng + 1
Loop
End Sub
Bonjour Megoner le forum
Bon alors en premier lieu tu aurais pu lire la charte du forum, en second tu balances du code sans utiliser les balises de code donc lecture fastidieuse, et en dernier tu ne penses pas que tu aurais joint je fichier avec les explications et toutes tes demandes , nous aurait aider à t'aider.
a+
papou
Salut megoner et le forum
Sub chef()
Call recup(7, "profs", "enseignants") '=> lancer la macro recup avec 6 arguments transmis : 1 nombre et 2 texte
Call recup(8, "groupes", "groupe")
Call recup(9, "types", "type")
Call recup(10, "salles", "salle")
End SubUne macro servant à en lancer plusieurs
Sub recup(colonne As Integer, nom_f As String, titre As String)
Dim tab_prof() As String
Dim Nb_prof As Integer
Dim ligne As Long, nb As Long
Dim ilyé As Boolean, v As Variant, f As Integer, k As Integer, truc As String, machin As Boolean
ReDim tab_prof(0) 'définir le tableau à un indice
For nb = 1 To 3 'pour nb de 1 à 3
Sheets(nb).Select 'sélectionner la feuille d'indice nb
ligne = 2 '
Do While Cells(ligne, 3) <> "" 'boucle la colonne C n'est pas vide
truc = Cells(ligne, colonne) 'truc=cellule de la colonne transmise, à la ligne ligne
If truc <> "" Then 'si truc non vide alors
If InStr(1, truc, ",") = 0 Then 's'il n'y a pas de virgule
Call ajout_element(tab_prof, Nb_prof, truc) 'lancer la macro
Else 'sinon
v = Split(truc, ", ") 'V= tableau représentant chacun des éléments de "truc", séparé par une virgule
For f = 0 To UBound(v) 'boucle du premier au dernier élément de v
truc = v(f) 'truc=chaque élément de V
Call ajout_element(tab_prof, Nb_prof, truc) 'lancer macro
Next 'suivant => fin boucle éléments de v
End If 'fin if
End If 'fin if
ligne = ligne + 1 'ligne suivante
Loop 'fin boucle
Next 'suivant => fin boucle feuille
Call ecrire(tab_prof, nom_f, titre)
End SubExemple typique d'un code dont on ne connaît pas le but et "mon document marche enfin" on est censé supposer qu'il remplit correctement sa fonction...
Donc, j'arrête là, ne l'ayant vraisemblablement pas compris, puisque d'après moi, il ne fonctionnerais pas :
Le but semble être de lancer la macro ajout_element avec 3 argument dont un seul (truc) me semble défini
Les autres macro me semblent de la même veine, mais c'est sans doute moi qui fait erreur.
Juste en passant :
- une variable n'existe que dans la macro où elle est définie (sauf quand elle est définie en global)
- Call macro(x,y) => la macro est lancée avec les arguments x et y qui sont "réceptionnés" avec des nouvelles variables totalement indépendantes une fois initialisées.
- sélectionner ne me semble pas une bonne méthode : ça limite grandement puisqu'on ne travaille plus que sur la feuille active (ou la cellule), avec perte de celle qui l'était avant.
Personnellement, je teste mes codes au fur et à mesure, même quand j'ai un long programme comportant moult macros. Ainsi, je vois mes erreurs pratiquement dès leurs apparitions, ce qui facilite grandement la recherche de la panne, puisque ce n'est que sur la dernière partie codée que j'ai une erreur.
Utiliser integer pour définir une variable ligne ne me semble pas une très bonne idée
A+
Merci
je vais essayer de poster le fichier excel en meme temps, mais je ne sais pas comment vous l'envoyer :/
Je vais tout de meme essayer
Le but de cet exercice est, à partir, d’une feuille de données sous excel (comportant les informations des différents cours d’université sur une année) de pouvoir en extraire les données intéressantes et pouvoir les utiliser à bon escient.
Pour le moment, ceci est impossible, le documents fait plusieurs milliers de lignes et n’est donc pas exploitable tel quel.
J'espere que je suis un peu plus clair :/
En tout cas merci beaucoup d'essayer de m'aider !!