Erreur d'exécution '9'

Fermé
fester66 Messages postés 2 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 16 avril 2013 - 16 avril 2013 à 11:47
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 16 avril 2013 à 16:22
Bonjour,

J'ai un gros problème pour éditer les timesheets de la société. La macro que j'exécutais sans problème jusqu'à la semaine dernière ne fonctionne plus (erreur d'exécution 9).
Je n'avais pas conçu le programme et je suis une buse en vbasic.

Même en récupérant des sauvegardes plus anciennes, le problème persiste.

Merci de votre aide.



La ligne ci-dessous est la ligne qui apparaît surlignée en jaune


Workbooks("Bon.xlsm").Worksheets("bon").Activate 'active feuille heure par défaut,copie et renome en new

2 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
16 avril 2013 à 14:14
Bonjour,
La ligne que tu montre ne peu pas donner l'erreur 9 (erreur de dimensionnement)
Montre plutôt toute la procédure.
A+
0
fester66 Messages postés 2 Date d'inscription lundi 15 avril 2013 Statut Membre Dernière intervention 16 avril 2013
16 avril 2013 à 14:27
Hello,
Merci pour ta réponse rapide. Voici la procédure complète :
A+

Sub feuille_heures_vide()
'
' macro création feuille d'heures depuis planning complet

' variables pour feuille_heure
Dim l_f As Integer
l_f = 0
Dim c_f As Integer
c_f = 0
' variables pour planning
Dim l_p As Integer
l_p = 0
Dim c_p As Integer
c_p = 0
' variables pour nom ouvrier
Dim l_of As Integer
l_of = 0
Dim c_of As Integer
c_of = 0

' variables choix semaine
Dim semtrouve As Range
Dim semcherche As String
semcherche = 32

'variable pour trouver n° devis de planning a chantier
Dim devtrouve As Range
Dim devcherche As String

'variable pour localiser devis dans le planning
Dim devis As Range

'variables pour chantier
Dim chantier As String
Dim lieu As String
Dim architecte As String

' variables pour sortir de la boucle principale
Dim fin As String

' variables d'incrémentation pour le planning
Dim l_v As Integer
l_pv = 0
Dim c_pv As Integer
c_pv = 0

' var ouvriers
Dim name As String

' var bon fournisseurs
Dim c_b As Integer
c_b = 0
Dim l_b As Integer
l_b = 0

'nbr aléatoire
Dim random As Long

' var pour liste_id
Dim c_id As Integer
c_id = 1
Dim l_id As Integer
l_id = 1

Dim actuel As Variant
'début programme


Application.DisplayAlerts = False
ChDir "N:\"
Workbooks.Open Filename:="N:\Administration\Bon.xlsm"

' ouvier la feuille_d'heure
Application.DisplayAlerts = False
ChDir "n:\"
Workbooks.Open Filename:="N:\Administration\feuille_heure.xlsm"
Workbooks("planning.xlsm").Worksheets("planning").Activate 'active feuille planning

semcherche = InputBox("enter le n° de semaine:") ' boite de dialogue entrer n° semaine
Set semtrouve = ActiveSheet.Range("A3:DRR3").Cells.Find(what:=semcherche, LookIn:=xlValues) ' cherche n° semaine sur plage A3 a drr3

' test si var correct
If semcherche = vbNullString Then
End
ElseIf semcherche < 1 Or semcherche > 53 Then
End
Else
semtrouve.Select ' OK
End If

Selection.Copy 'copie n° semaine et colle dans feuille_heure.xlsm en b3
Windows("feuille_heure.xlsm").Activate
c_f = c_f + 2
l_f = l_f + 3
Cells(l_f, c_f).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

Workbooks("planning.xlsm").Activate ' selection vendredi semaine active
ActiveCell.Select
ActiveCell.Offset(1, 0).Range("A1").Select
Selection.Copy

Workbooks("feuille_heure.xlsm").Activate 'copie date lundi semaine et colle dans feuille_heure.xlsm en c3
c_f = 3
l_f = 3
Cells(l_f, c_f).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False

'active et copie bon de commande
Workbooks("Bon.xlsm").Worksheets("bon.xlsm").Activate 'active feuille heure par défaut,copie et renome en new
Worksheets("bon").Select
Worksheets("bon").Copy Before:=Worksheets(1)
ActiveSheet.name = "new"


Workbooks("planning.xlsm").Activate
l_of = 2
c_of = 7
l_p = 7
c_p = 1
l_f = 0
c_f = 0
l_pv = 4

If MsgBox("commencer le processus de création des feuilles d'heure pour le semaine " & semtrouve & " et les bon de commandes ?", vbYesNo) = vbYes Then
Cells(l_p, c_p).Select
Else
End
End If


'début boucle pour ouvrier

Do Until (Cells(l_p, c_p).Value = Empty) 'des que valeur = null alors stop boucle"

Cells(l_p, c_p).Select

ActiveCell.Copy 'active cellule premier nom
name = ActiveCell.Value
Workbooks("feuille_heure.xlsm").Activate
Worksheets("fe").Select 'active feuille heure par défaut,copie et renome en new
Worksheets("fe").Copy Before:=Worksheets(1)
ActiveSheet.name = "new"
Cells(l_of, c_of).Select 'selection cellule précise et colle nom ouvrier
Worksheets("new").Cells(l_of, c_of).Value = Workbooks("planning.xlsm").Worksheets("planning").Cells(l_p, c_p).Value



Workbooks("planning.xlsm").Worksheets("planning").Activate
Set semtrouve = ActiveSheet.Range("A3:DRR3").Cells.Find(what:=semcherche) ' cherche n° semaine sur plage A3 a drr
semtrouve.Select 'selectionne variable cellule
ActiveCell.Offset(l_pv, 0).Select 'retour en arrière pour vendredi


'boucle de vendredi à jeudi 1col

'vars
l_f = 10
c_f = 1

Do Until (l_f = 42) ' condition


' correction d'entrée sur feuille_heure
If l_f = 14 Or l_f = 21 Or l_f = 28 Or l_f = 35 Or l_f = 42 Then
l_f = l_f + 3
ElseIf l_f = 46 Then
Exit Do
End If

c_f = 1
Workbooks("planning.xlsm").Worksheets("planning").Activate
devcherche = ActiveCell.Offset(0, 0).Range("A1").Value ' prend valeur cellule dans var
' MsgBox devcherche
Workbooks("planning.xlsm").Worksheets("chantier").Activate
Set devtrouve = ActiveSheet.Range("A1:A300").Cells.Find(what:=devcherche) ' cherche n° devis sur plage A1 a a300

'valeur var devis
devtrouve.Select

' valeur var chantier
ActiveCell.Offset(0, 1).Select
chantier = ActiveCell.Offset(0, 0).Value
' MsgBox chantier
' valeur var lieu
ActiveCell.Offset(0, 1).Select
lieu = ActiveCell.Offset(0, 0).Value
' MsgBox lieu
' valeur var architecte
ActiveCell.Offset(0, 1).Select
architecte = ActiveCell.Offset(0, 0).Value
' MsgBox architecte

' insertion vars dans feuille_heure ("new")

Workbooks("feuille_heure.xlsm").Worksheets("new").Cells(l_f, c_f).Value = devtrouve
c_f = c_f + 1
Workbooks("feuille_heure.xlsm").Worksheets("new").Cells(l_f, c_f).Value = chantier
c_f = c_f + 4
Workbooks("feuille_heure.xlsm").Worksheets("new").Cells(l_f, c_f).Value = lieu
c_f = c_f + 1
Workbooks("feuille_heure.xlsm").Worksheets("new").Cells(l_f, c_f).Value = architecte

'insertion vars planning
Workbooks("planning.xlsm").Worksheets("planning").Select
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, 0).Value = chantier
ActiveCell.Offset(0, 1).Select
ActiveCell.Offset(0, 0).Value = lieu

ActiveCell.Offset(0, 1).Select



' si il y un devis, alors il fait un bon de commande sinon suivant

'debut devis
If devtrouve = Empty Then ' if
Else

Workbooks("Bon.xlsm").Worksheets("new").Activate

l_b = 8
c_b = 2

Cells(l_b, c_b).Value = name ' ajout nom ouvrier dans le bon de commandes


Randomize ' Initialise le générateur de nombres aléatoires.
' Renvoie une valeur aléatoire comprise entre 1 et 6.
random = Int((100000 * Rnd) + 1)
c_b = 6
Cells(l_b, c_b).Value = (semcherche & "." & random) ' id
Workbooks("planning.xlsm").Worksheets("id_bon").Activate

c_id = 1

' search la dernière ligne non vide
Range("A1").Select
Selection.End(xlDown).Select
ActiveCell.Offset(1, 0).Value = name
ActiveCell.Offset(1, 1).Value = (semcherche & "." & random)

Workbooks("Bon.xlsm").Worksheets("new").Activate
' info chantier

c_b = 2
l_b = 12

Cells(l_b, c_b).Value = devtrouve
c_b = c_b + 2
Cells(l_b, c_b).Value = chantier
c_b = c_b + 2
Cells(l_b, c_b).Value = lieu


Workbooks("Bon.xlsm").Worksheets("new").name = (name & " " & devtrouve & " " & nbrbon) 'renomme feuille new avec nom ouvrier
nbrbon = nbrbon + 1
'recrer f new
Worksheets("bon").Select
Worksheets("bon").Copy Before:=Worksheets(1)
ActiveSheet.name = "new"
End If ' fin du bon




l_f = l_f + 1 ' incrementation
Loop 'fin boucle


' verification des beugs avec la feuille new

fin = ("new")

Workbooks("feuille_heure.xlsm").Worksheets("new").name = Workbooks("planning.xlsm").Worksheets("Planning").Cells(l_p, c_p).Value 'renomme feuille new avec nom ouvrier

If Workbooks("feuille_heure.xlsm").Worksheets(1).name = fin Then
End
End If

Workbooks("planning.xlsm").Worksheets("planning").Activate



l_pv = l_pv + 1 ' incrémentation ligne + 1 pour semaine
l_p = l_p + 1 ' incrémentation ligne + 1 pour ouvrier
Loop 'fin boucle
'sauvegarde dans ( C:\....sauvegarde avec la variable semcherche ( n° de semaine active)

Workbooks("feuille_heure.xlsm").Activate

Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:="N:\Administration\sauvegarde\" & semcherche, FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False



MsgBox ("remplissage des feuilles d'heures OK, prêt pour imprimer")

Workbooks("bon.xlsm").SaveAs Filename:="N:\Administration\bon_ouvrier\" & "bon_ouvrier" & semtrouve, FileFormat:= _
xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False

MsgBox ("bon de commandes OK, prêt pour imprimer")
End Sub
Sub chantier_en_cours_copie()
' copie de chantier dans le commun
Application.DisplayAlerts = False
ChDir "\\SERVEUR01\Production"
Workbooks.Open Filename:="\\SERVEUR01\production\chantiers_en_cours.xlsm"


Workbooks("planning.xlsm").Worksheets("chantier").Activate
ActiveSheet.Select
Sheets("chantier").Copy Before:=Workbooks("chantiers_en_cours.xlsm").Sheets(1)
Sheets(2).Delete

Workbooks("chantiers_en_cours.xlsm").Save

MsgBox ("une copie des chantiers en cours à été effectuer dans : chantiers_en_cours.xlsm")



End Sub


Sub feuille_heures_plein()

' variables pour feuille_heure
Dim l_f As Integer
l_f = 0
Dim c_f As Integer
c_f = 0

' variables pour nom ouvrier
Dim l_of As Integer
l_of = 0
Dim c_of As Integer
c_of = 0

' var heure
Dim l_h As Integer
Dim c_h As Integer
Dim heure As Variant
Dim heure_chantier As Variant


' var cvs

Dim c As String
Dim v As String
Dim s As String


'variables pour chantier
Dim chantier As String
Dim lieu As String
Dim architecte As String

'variable cherche devis ds f. chantier
Dim devcherche As String
Dim devtrouve As Range

Dim semaine As String
Dim ouvrier As String

Dim sheet As Integer
sheet = 1

' début du programme

semaine = InputBox("entre le nom du document ( exemple 44.xlsm")
If semaine = vbNullString Then
End
Else
Workbooks(semaine).Worksheets(sheet).Activate ' active feuille heure
End If




'var départ
l_of = 2
c_of = 7
l_f = 10

' premier boucle feuille avec nom des ouvriers

Do While Cells(l_of, c_of) <> Empty 'condition

ouvrier = Cells(l_of, c_of).Value
l_f = 10

Do Until (l_f = 44) ' condition
c_f = 1


' correction d'entrée sur feuille_heure
If l_f = 15 Or l_f = 22 Or l_f = 29 Or l_f = 36 Then
l_f = l_f + 2
ElseIf l_f = 44 Then
Exit Do
End If

Workbooks(semaine).Worksheets(ouvrier).Activate
devcherche = Cells(l_f, c_f).Value ' prend valeur cellule dans var
' MsgBox devcherche
Workbooks("planning.xlsm").Worksheets("chantier").Activate
Set devtrouve = ActiveSheet.Range("A1:A300").Cells.Find(what:=devcherche) ' cherche n° devis sur plage A1 a a300

'valeur var devis
devtrouve.Select

' valeur var chantier
ActiveCell.Offset(0, 1).Select
chantier = ActiveCell.Offset(0, 0).Value
' MsgBox chantier
' valeur var lieu
ActiveCell.Offset(0, 1).Select
lieu = ActiveCell.Offset(0, 0).Value
' MsgBox lieu
' valeur var architecte
ActiveCell.Offset(0, 1).Select
architecte = ActiveCell.Offset(0, 0).Value
' MsgBox architecte

' insertion vars dans feuille_heure ("new")

Workbooks(semaine).Worksheets(ouvrier).Cells(l_f, c_f).Value = devtrouve
c_f = c_f + 1
Workbooks(semaine).Worksheets(ouvrier).Cells(l_f, c_f).Value = chantier
c_f = c_f + 4
Workbooks(semaine).Worksheets(ouvrier).Cells(l_f, c_f).Value = lieu
c_f = c_f + 1
Workbooks(semaine).Worksheets(ouvrier).Cells(l_f, c_f).Value = architecte
c_f = c_f + 1

Workbooks(semaine).Worksheets(ouvrier).Activate
' colone heure
c_h = 11
l_h = l_f


'heure -> var

heure = Cells(l_h, c_h).Value

If (Cells(l_f, c_f) = "c") Then

Workbooks("planning.xlsm").Worksheets("chantier").Activate
ActiveCell.Offset(0, 1).Select
heure_chantier = ActiveCell.Offset(0, 0).Value
heure_chantier = heure_chantier + heure
ActiveCell.Offset(0, 0).Value = heure_chantier

End If
c_f = c_f + 1

If (Cells(l_f, c_f) = "v") Then

Workbooks("planning.xlsm").Worksheets("chantier").Activate
ActiveCell.Offset(0, 2).Select
heure_chantier = ActiveCell.Offset(0, 0).Value
heure_chantier = heure_chantier + heure
ActiveCell.Offset(0, 0).Value = heure_chantier
End If
c_f = c_f + 1

If (Cells(l_f, c_f) = "s") Then

Workbooks("planning.xlsm").Worksheets("chantier").Activate
ActiveCell.Offset(0, 3).Select
heure_chantier = ActiveCell.Offset(0, 0).Value
heure_chantier = heure_chantier + heure
ActiveCell.Offset(0, 0).Value = heure_chantier
End If

Workbooks(semaine).Worksheets(ouvrier).Activate


l_f = l_f + 1 ' incr
l_h = l_h + 1 'incr


Loop
sheet = sheet + 1
Workbooks(semaine).Worksheets(sheet).Activate
Loop


MsgBox ("fin pour la semaine " & semtrouve)
'sauvegarde dans ( C:\....sauvegarde avec la variable semcherche ( n° de semaine active)

End Sub

Sub bon()





End Sub
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
16 avril 2013 à 16:22
Bon.. ont va commencer par le début..
Tu a une erreur de dénomination de variable.
Ton code est dans quel module ?
En haut du module (tout en haut) colle
 Option Explicit

Ça va déjà te permettre de trouver des erreurs dans tes variables.
Je verrais pour la suite en fonction de tes réponses.

0