Erreur d'exécution '9'

fester66 Messages postés 2 Statut Membre -  
lermite222 Messages postés 9042 Statut Contributeur -
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

  1. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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
    1. fester66 Messages postés 2 Statut Membre
       
      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
  2. lermite222 Messages postés 9042 Statut Contributeur 1 199
     
    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