Probleme d'exécution code vba macro

Fermé
macrro - 22 mai 2012 à 15:32
 Utilisateur anonyme - 22 mai 2012 à 21:31
Bonjour,

Mon macro ne s'exécute pas correctement, car une erreur s'affiche voila :

Erreur d'exécution '9' : L'indice n'appartient pas à la sélection.


Voici le code :

Option Explicit

' --------------------------------------------------------------------------
' Macros de gestion du planning formateurs...
' NE PAS CHANGER LE NOM DES FEUILLES "MICROS" et "PLANNING" DE CE CLASSEUR !
' --------------------------------------------------------------------------

' Cette macro doit être appelée uniquement en cliquant sur le bouton
' "MAJ Planning" situé sur la feuille "MICROS".
' Pour que la macro fonctionne, bien vérifier que les constantes définies
' sont conformes à la réalité...
' Cette macro fait le tour des prénoms indiqués dans la feuille "MICROS",
' et met à jour la feuille "PLANNING" au niveau des numéros d'ordinateurs
Sub AttribMachines()
' Cellule de la feuille "MICROS" contenant le premier 'numéro' de machine
' Les 5 cellules à droite de "PremierNum" doivent contenir les noms des
' personnes utilisant la machine, respectivement de lundi à dimanche.
Const LigPremierNum = 3 'Ligne 3
Const ColPremierNum = 3 'Colonne C
' Texte contenu dans la cellule située au dessous du dernier 'numéro'
' de machine. Toutes les cellules situées au dessus de celle-ci, jusqu'à
' la cellule définie par "LigPremierNum" et "ColPremierNum", doivent
' contenir un 'numéro' de machine.
Const DernCell = "TOTAUX"
' Nombre de lignes par formateur dans la feuilles "PLANNING"
Const NbLigForm = 5
' Ligne où se situe le 1er formateur, dans la colonne contenant le nom
' des formateurs (feuille "PLANNING").
Const LigPremierForm = 5 'Ligne 5
' Colonne de la feuille "PLANNING" où se situent les noms des formateurs
Const ColForms = 2 'Colonne B
' Nombre d'emplacements réservés pour les formateurs dans la
' feuille "PLANNING".
Const NbForms = 20
' N° de la colonne "Matériel" (contenant les références des machines),
' dans la feuille "PLANNING".
' Les 5 colonnes à droite de cette colonne "Matériel" doivent corres-
' pondre aux 5 jours de la semaine en cours (du lundi au dimanche).
' La colonne située à gauche de "Colmateriel" doit correspondre au nombre
' de micros pour chaque stage.
Const ColMateriel = 8 'Colonne H

Dim FPlan As Worksheet, FMic As Worksheet
Dim Lig As Integer
Dim i As Integer, j As Integer, k As Integer
Dim NomPers As String, NomMachine As String
Dim NomAbsent As Boolean, DejaDansListe As Boolean
Dim temp As String, NbOcc As Integer

Set FPlan = Sheets("PLANNING")
Set FMic = Sheets("MICROS")

' On vide la zone de liste de la boîte de dialogue des noms absents
Sheets("Rapport").ListBoxes("Liste1").List = ""

' On efface le contenu de la colonne "Matériel" et des 5 colonnes
' qui suivent...
FPlan.Range(FPlan.Cells(LigPremierForm, ColMateriel), _
FPlan.Cells(LigPremierForm + (NbForms * NbLigForm - 1), ColMateriel + 5)).ClearContents

' Initialisations pour le 1er passage dans la boucle "Faire TantQue"
Lig = LigPremierNum
NomMachine = FMic.Cells(Lig, ColPremierNum).Formula

' On boucle sur chaque numéro de machine...
Do While NomMachine <> DernCell
' Pour chaque machine, on boucle sur les 5 jours de la semaine...
For i = 1 To 5
' Nom de la personne (s'il y en a un)...
NomPers = Trim(UCase(FMic.Cells(Lig, ColPremierNum + i)))
If NomPers <> "" Then
' On boucle sur les noms des formateurs dans la feuille "PLANNING"
NomAbsent = True
For j = LigPremierForm To LigPremierForm + ((NbForms - 1) * NbLigForm) Step NbLigForm
If Trim(UCase(FPlan.Cells(j + 1, ColForms).Value)) = NomPers Then
NomAbsent = False
' On repère sur quelle ligne placer les n° de machines
For k = j To j + NbLigForm - 1
If FPlan.Cells(k, ColMateriel + i).Interior.PatternColor <> 0 And _
FPlan.Cells(k, ColMateriel + i - 1).Interior.PatternColor = 0 Then
Exit For
End If
Next k
' S'il y a une ligne correspondante...
If k <> j + NbLigForm Then
' Alors on rajoute le n° d'ordinateur ds la colonne "Materiel"
temp = FPlan.Cells(k, ColMateriel).Formula
If temp <> "" Then temp = temp & ", "
FPlan.Cells(k, ColMateriel).Formula = temp & NomMachine
End If
End If
Next j
' Si le nom est absent du tableau de planning, on le rajoute à la
' zone de liste de la boite de dialogue
If NomAbsent = True Then
DejaDansListe = False
For j = 1 To Sheets("Rapport").ListBoxes("Liste1").ListCount
If Sheets("Rapport").ListBoxes("Liste1").List(j) = NomPers Then
DejaDansListe = True
Exit For
End If
Next j
If DejaDansListe = False Then Sheets("Rapport").ListBoxes("Liste1").AddItem NomPers
End If
End If
Next i
Lig = Lig + 1
NomMachine = FMic.Cells(Lig, ColPremierNum).Formula
Loop

' On effectue un passage dans les cellules "grisées" du planning
' pour y inscrire le nombre d'ordinateurs prévus
For i = LigPremierForm To LigPremierForm + (NbForms * NbLigForm - 1)
If FPlan.Cells(i, ColMateriel).Formula <> "" Then
NbOcc = NbOccurDansChaine(FPlan.Cells(i, ColMateriel).Formula, ",") + 1
FPlan.Cells(i, ColMateriel - 1).Value = NbOcc
For j = ColMateriel + 1 To ColMateriel + 5
If FPlan.Cells(i, j).Interior.PatternColor <> 0 Then
FPlan.Cells(i, j).Value = NbOcc
End If
Next j
End If
Next i

Sheets("Rapport").Show
End Sub


' Cette fonction renvoie le nombre d'occurences du caractère "CarRef" dans
' la chaîne "ChaineRef".
' Si "CarRef" contient plusieurs caractères, seul le premier est pris en compte.
Function NbOccurDansChaine(ChaineRef As String, CarRef As String) As Integer
Dim i As Integer

NbOccurDansChaine = 0
For i = 1 To Len(ChaineRef)
If Mid(ChaineRef, i, 1) = Left$(CarRef, 1) Then
NbOccurDansChaine = NbOccurDansChaine + 1
End If
Next i
End Function

Sub AfficherMasquerModule()
Modules("Gest. planning").Visible = Not Modules("Gest. planning").Visible
End Sub
A voir également:

1 réponse

Utilisateur anonyme
22 mai 2012 à 21:31
Bonjour,

À première vue, il manque un End IF

dans ces lignes :
FPlan.Cells(k, ColMateriel).Formula = temp & NomMachine
End If
End If
Next j
' Si le nom est absent du tableau de planning, on le rajoute à la

Ajouter un End IF

FPlan.Cells(k, ColMateriel).Formula = temp & NomMachine
End If
End If
End If
Next j
' Si le nom est absent du tableau de planning, on le rajoute à la


Cdt

Lupin
0