[Déplacé VB6 --> VBA] erreur 91 variable d'objet ou variable de bloc non défini

Signaler
Messages postés
114
Date d'inscription
vendredi 9 avril 2010
Statut
Membre
Dernière intervention
16 août 2011
-
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
-
Bonjour

j'ai écris la macro suivante
Private Sub CommandButton2_Click()
 'RAMPLACANTS
 
  'contrôle et ajout du nom et prénom dans cellule A2 et B2
    Sheets("avenant").cells(3, 1) = ""
    Sheets("avenant").cells(3, 1) = CommandButton2.Caption
    
   'recherche des données planning
Dim vclasseurprincipal As Worksheet
Dim vclasseurN1 As Worksheet
Dim vchemin As String
Dim salarie As String
Dim X As Integer
Dim v As Integer
 vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
 Set vclasseurprincipal = Workbooks("contrats.xls").Worksheets("avenant")
 salarie = UCase(vclasseurprincipal.cells(3, 1))
 Set vclasseurN1 = Workbooks("planning.xls").Worksheets("Feuil2")

    'effacer contenu feuil avenant
        vclasseurprincipal.cells(15, 1) = ""
        vclasseurprincipal.cells(15, 2) = ""
        vclasseurprincipal.cells(15, 3) = ""
        vclasseurprincipal.cells(16, 1) = ""
        vclasseurprincipal.cells(16, 2) = ""
        vclasseurprincipal.cells(16, 3) = ""
        vclasseurprincipal.cells(17, 1) = ""
        vclasseurprincipal.cells(17, 2) = ""
        vclasseurprincipal.cells(17, 3) = ""
        vclasseurprincipal.cells(18, 1) = ""
        vclasseurprincipal.cells(18, 2) = ""
        vclasseurprincipal.cells(18, 3) = ""
        vclasseurprincipal.cells(19, 1) = ""
        vclasseurprincipal.cells(19, 2) = ""
        vclasseurprincipal.cells(19, 3) = ""
        vclasseurprincipal.cells(20, 1) = ""
        vclasseurprincipal.cells(20, 2) = ""
        vclasseurprincipal.cells(20, 3) = ""

    X = 2
    While UCase(vclasseurN1.cells(X, 1)) <> salarie
    X = X + 1
    Wend

    While UCase(vclasseurN1.cells(X, 1)) = salarie
    v = 15
    While Not IsEmpty(vclasseurprincipal.cells(v, 1))
    v = v + 1
    Wend
    vclasseurprincipal.cells(v, 1) = vclasseurN1.cells(X, 3)
    vclasseurprincipal.cells(v, 2) = vclasseurN1.cells(X, 4)
    vclasseurprincipal.cells(v, 3) = vclasseurN1.cells(X, 5)
    X = X + 1
    v = v + 1
    Wend

    'vérifier date expiration titre de séjour
If Date = Sheets("données salariés").cells(v, 18) Then
    MsgBox ("titre de séjour expiré")


   'vérifier date fin de période et visite médicale
ElseIf Date Sheets("données salariés").cells(v, 34) And Sheets("données salariés").cells(v, 39) "" Then
    MsgBox ("Nous arrivons à terme de la période d'essai et visite médicale n'est toujours pas effectué")
End If

    'heure complémentaire ou avenant contrat
Dim nomfichier As String
Dim chemin As String
Dim dossier As String
Dim vnom As String
Dim t As Integer
Dim heure As Integer
Dim msg As String

t = 3
vnom = UCase(CommandButton2.Caption)
While UCase(Sheets("données salariés").cells(t, 1)) <> vnom
t = t + 1
Wend

    'creation CDD/CDI
If Sheets("données salariés").cells(t, 6) = "" Then
    MsgBox ("Le contrat que nous allons lui faire est un " & Sheets("données salariés").cells(t, 30))
    Sheets("avenant").cells(2, 31) = Sheets("données salariés").cells(t, 30)
    Sheets("données salariés").cells(t, 6) = Date
    Worksheets("cd").Copy
    dossier = Workbooks("contrats.xls").Sheets("avenant").cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").cells(2, 2)
    chemin = "C:\contrat" & dossier & ""
    nomfichier = Workbooks("contrats.xls").Sheets("avenant").cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").cells(2, 2) & " " & Workbooks("contrats.xls").Sheets("avenant").cells(2, 31)
    ActiveWorkbook.SaveAs (chemin & nomfichier & Format(Date, " dd-mm-yyyy") & ".xls")

    'Avenant ou heure complémentaire
Dim cheminN As String
Dim classeurN As Worksheet
Workbooks("contrats.xls").Activate

  cheminN = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
  Set classeurN = Workbooks("base de données chantiers.xls").Worksheets("Feuil1")

ElseIf Sheets("données salariés").cells(t, 37) >= 151.67 Then
        MsgBox ("le contrat de " & CommandButton2.Caption & " est un contrat à temps plein")
        
     'vérifier heure si < 1/3 mettre données dans heure complémentaire
ElseIf classeurN.cells(1, 33) <= (Sheets("données salariés").cells(t, 37) / 3) Then
        m = 1
        While Not IsEmpty(Sheets("heure").cells(m, 1))
        m = m + 1
        Wend
        n = 2
        While UCase(Sheets("feuil1").cells(n, 29)) = UCase(CommandButton2.Caption)
        Sheets("heure").cells(m, 1) = classeur.cells(n, 29)
        Sheets("heure").cells(m, 3) = classeur.cells(n, 31)
        Sheets("heure").cells(m, 5) = Date
        Sheets("heure").cells(m, 7) = classeur.cells(n, 32)
        Sheets("heure").cells(m, 8) = classeur.cells(n, 33)
        m = m + 1
        n = n + 1
        Wend
    
    '>1/3, avenant contrat augmentation temps de travail
ElseIf Sheets("avenant").cells(2, 18) >= (Sheets("données salariés").cells(t, 37) / 3) Then
              Worksheets("aug").Copy
              dossier = Workbooks("contrats.xls").Sheets("avenant").cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").cells(2, 2)
              chemin = "C:\contrat" & dossier & ""
              nomfichier = Workbooks("contrats.xls").Sheets("avenant").cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").cells(2, 2) & " " & "avenant n° " & Workbooks("contrats.xls").Sheets("avenant").cells(2, 15)
              ActiveWorkbook.SaveAs (chemin & nomfichier & Format(Date, " dd-mm-yyyy") & ".xls")
    
    'changement de nom dans base de données chantiers
 Dim vclasseur As Worksheet
 
   vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
   Set vclasseur = Workbooks("base de données chantiers.xls").Worksheets("feuil1")
    v = 2
    While Not IsEmpty(vclasseur.cells(v, 1)) And UCase(vclasseur.cells(v, 3) & " " & vclasseur.cells(v, 2) & " " & vclasseur.cells(v, 5) & " " & vclasseur.cells(v, 6) & " " & vclasseur.cells(v, 7)) <> UCase(vclasseur.cells(1, 28) & " " & vclasseur.cells(1, 30))
    v = v + 1
    Wend
    vclasseur.cells(v, 3) = vclasseur.cells(1, 29)
    
    'N° avenant change dans base de données
Dim vclasseur2 As Worksheet
Dim l As Integer

  vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
  Set vclasseur2 = Workbooks("contrats.xls").Worksheets("données salariés")
   
    l = 4
     While UCase(vclasseur2.cells(l, 1)) <> vnom
    l = l + 1
    Wend
    vclasseur2.cells(l, 7) = vclasseurprincipal.cells(2, 15)
  
    'Nombre heure contrat
    l = 4
    While UCase(vclasseur2.cells(l, 1)) <> vnom
    l = l + 1
    Wend
    vclasseur2.cells(l, 36) = vclasseurprincipal.cells(2, 19)
    vclasseur2.cells(l, 37) = vclasseurprincipal.cells(2, 18)
End If
    
  'trier planning
vclasseurN1.Activate
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("A2:A8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("C2:C8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("D2:D8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil2").Sort.SortFields.Add Key:=Range("E2:E8"), _
        SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil2").Sort
        .SetRange Range("A2:J8")
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With
CommandButton2.Enabled = False
End Sub


Mon erreur se trouve sur la ligne ElseIf classeurN.cells(1, 33) <= (Sheets("données salariés").cells(t, 37) / 3) Then. Cette ligne se situe après avoir indiqué le commentaire suivant 'vérifier heure si < 1/3 mettre données dans heure complémentaire
Quand je regarde la fenêtre des variables locales, je vois que le cheminN et classeurN, dans les valeurs il y a marqué nothing pour classeurN et "" pour cheminN.
pourtant ces 2 variables sont déclarés et le chemin d'accès au classeur est indiqué.
Pouvez vous m'aider svp ?

nanie

8 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

oui mais si tu regardes bien le deroulement de ta macro tu verras que si la condition :

If Sheets("données salariés").cells(t, 6) = "" Then


n'est pas rempli tu ne passera jamais par les lignes:

    'Avenant ou heure complémentaire
Dim cheminN As String
Dim classeurN As Worksheet
Workbooks("contrats.xls").Activate

  cheminN = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
  Set classeurN = Workbooks("base de données chantiers.xls").Worksheets("Feuil1")


A+
Messages postés
114
Date d'inscription
vendredi 9 avril 2010
Statut
Membre
Dernière intervention
16 août 2011

je ne comprends pas pourquoi tu dis ca
puisque je dis
If Sheets("données salariés").cells(t, 6) = "" Then
ElseIf Sheets("données salariés").cells(t, 37) >= 151.67 Then

ca veut bien dire que si la première condition n'est pas rempli, on passe à la deuxième

nanie
Messages postés
114
Date d'inscription
vendredi 9 avril 2010
Statut
Membre
Dernière intervention
16 août 2011

j'ai modifié ma macro et effectivement ca venait bien de ma condition
je ne comprends pas pourquoi ca ne pouvait pas passer à la deuxième condition

merci pour votre aide


nanie
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
oui justement !

les lignes:

Dim cheminN As String
Dim classeurN As Worksheet
Workbooks("contrats.xls").Activate

  cheminN = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
  Set classeurN = Workbooks("base de données chantiers.xls").Worksheets("Feuil1")

sont liées à la condition:

If Sheets("données salariés").cells(t, 6) = "" Then

essai comme ceci:

'creation CDD/CDI
If Sheets("données salariés").Cells(t, 6) = "" Then
    MsgBox ("Le contrat que nous allons lui faire est un " & Sheets("données salariés").Cells(t, 30))
    Sheets("avenant").Cells(2, 31) = Sheets("données salariés").Cells(t, 30)
    Sheets("données salariés").Cells(t, 6) = Date
    Worksheets("cd").Copy
    dossier = Workbooks("contrats.xls").Sheets("avenant").Cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").Cells(2, 2)
    chemin = "C:\contrat" & dossier & ""

    nomfichier = Workbooks("contrats.xls").Sheets("avenant").Cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").Cells(2, 2) & " " & Workbooks("contrats.xls").Sheets("avenant").Cells(2, 31)
    ActiveWorkbook.SaveAs (chemin & nomfichier & Format(Date, " dd-mm-yyyy") & ".xls")
End If

    'Avenant ou heure complémentaire
Dim cheminN As String
Dim classeurN As Worksheet
Workbooks("contrats.xls").Activate

  cheminN = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
  Set classeurN = Workbooks("base de données chantiers.xls").Worksheets("Feuil1")

If Sheets("données salariés").Cells(t, 37) >= 151.67 Then
        MsgBox ("le contrat de " & CommandButton2.Caption & " est un contrat à temps plein")
        
     'vérifier heure si < 1/3 mettre données dans heure complémentaire
ElseIf classeurN.Cells(1, 33) <= (Sheets("données salariés").Cells(t, 37) / 3) Then
        m = 1
        While Not IsEmpty(Sheets("heure").Cells(m, 1))
        m = m + 1
        Wend
        n = 2
        While UCase(Sheets("feuil1").Cells(n, 29)) = UCase(CommandButton2.Caption)
        Sheets("heure").Cells(m, 1) = classeur.Cells(n, 29)
        Sheets("heure").Cells(m, 3) = classeur.Cells(n, 31)
        Sheets("heure").Cells(m, 5) = Date
        Sheets("heure").Cells(m, 7) = classeur.Cells(n, 32)
        Sheets("heure").Cells(m, 8) = classeur.Cells(n, 33)
        m = m + 1
        n = n + 1
        Wend
    
    '>1/3, avenant contrat augmentation temps de travail
ElseIf Sheets("avenant").Cells(2, 18) >= (Sheets("données salariés").Cells(t, 37) / 3) Then
              Worksheets("aug").Copy
              dossier = Workbooks("contrats.xls").Sheets("avenant").Cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").Cells(2, 2)
              chemin = "C:\contrat" & dossier & ""

              nomfichier = Workbooks("contrats.xls").Sheets("avenant").Cells(2, 1) & " " & Workbooks("contrats.xls").Sheets("avenant").Cells(2, 2) & " " & "avenant n° " & Workbooks("contrats.xls").Sheets("avenant").Cells(2, 15)
              ActiveWorkbook.SaveAs (chemin & nomfichier & Format(Date, " dd-mm-yyyy") & ".xls")
    
    'changement de nom dans base de données chantiers
 Dim vclasseur As Worksheet
 
   vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
   Set vclasseur = Workbooks("base de données chantiers.xls").Worksheets("feuil1")
    v = 2
    While Not IsEmpty(vclasseur.Cells(v, 1)) And UCase(vclasseur.Cells(v, 3) & " " & vclasseur.Cells(v, 2) & " " & vclasseur.Cells(v, 5) & " " & vclasseur.Cells(v, 6) & " " & vclasseur.Cells(v, 7)) <> UCase(vclasseur.Cells(1, 28) & " " & vclasseur.Cells(1, 30))
    v = v + 1
    Wend
    vclasseur.Cells(v, 3) = vclasseur.Cells(1, 29)
    
    'N° avenant change dans base de données
Dim vclasseur2 As Worksheet
Dim l As Integer

  vchemin = "C:\Documents and Settings\Sabine\Bureau\Sandie\Suivi des salariés"
  Set vclasseur2 = Workbooks("contrats.xls").Worksheets("données salariés")
   
    l = 4
     While UCase(vclasseur2.Cells(l, 1)) <> vnom
    l = l + 1
    Wend
    vclasseur2.Cells(l, 7) = vclasseurprincipal.Cells(2, 15)
  
    'Nombre heure contrat
    l = 4
    While UCase(vclasseur2.Cells(l, 1)) <> vnom
    l = l + 1
    Wend
    vclasseur2.Cells(l, 36) = vclasseurprincipal.Cells(2, 19)
    vclasseur2.Cells(l, 37) = vclasseurprincipal.Cells(2, 18)
End If


j'en profite aussi pour simplifier une partie de ton code:

remplace cette partie:

'effacer contenu feuil avenant
        vclasseurprincipal.cells(15, 1) = ""
        vclasseurprincipal.cells(15, 2) = ""
        vclasseurprincipal.cells(15, 3) = ""
        vclasseurprincipal.cells(16, 1) = ""
        vclasseurprincipal.cells(16, 2) = ""
        vclasseurprincipal.cells(16, 3) = ""
        vclasseurprincipal.cells(17, 1) = ""
        vclasseurprincipal.cells(17, 2) = ""
        vclasseurprincipal.cells(17, 3) = ""
        vclasseurprincipal.cells(18, 1) = ""
        vclasseurprincipal.cells(18, 2) = ""
        vclasseurprincipal.cells(18, 3) = ""
        vclasseurprincipal.cells(19, 1) = ""
        vclasseurprincipal.cells(19, 2) = ""
        vclasseurprincipal.cells(19, 3) = ""
        vclasseurprincipal.cells(20, 1) = ""
        vclasseurprincipal.cells(20, 2) = ""
        vclasseurprincipal.cells(20, 3) = ""


par:

With vclasseurprincipal
   .Range(.Cells(15, 1),.Cells(20, 3)).ClearContent
End With


A+
Messages postés
114
Date d'inscription
vendredi 9 avril 2010
Statut
Membre
Dernière intervention
16 août 2011

ca ne marche malheureusement pas.
ca met erreur 438 Propriété ou méthode non gérée par cet objet
dommage c'était une bonne idée

nanie
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Salut,

sur quelle ligne l'erreur ?

A+
Messages postés
114
Date d'inscription
vendredi 9 avril 2010
Statut
Membre
Dernière intervention
16 août 2011

sur celle la
.Range(.Cells(15, 1),.Cells(20, 3)).ClearContent


nanie
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
9
Vu !

il manque un S

.Range(.Cells(15, 1),.Cells(20, 3)).ClearContents


A+