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 Sub

Une 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 Sub

Exemple 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 !!

Rechercher des sujets similaires à "vba"