VBA: object variable or With block variable not set

SaraBilmem

XLDnaute Nouveau
Bonsoir,

Etant dans un fil dont le sujet n'est plus trop le même, je me permets de ré-ouvrir une discussion sur ce qui suit:

- A quoi est dû notification : object variable or With block variable not set?

Car dans mon cas, le "with" est précisé...

Merci d'avance pour votre aide.

Sara

Le code (qui se trouve déjà dans une autre discussion) est le suivant:

Code:
Sub Macro1()

Application.ScreenUpdating = False

Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim o As Object 'déclare la variable o (Onglet)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

With ThisWorkbook.Sheets("PENSIONERS") 'prend en compte l'onglet "Feuil1"

dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl de la colonne A (=1) (à adapter si besoin)
    Set pl = .Range("D2:D" & dl) 'définit la plage pl (à partir de la deuxième ligne, tu modifieras si besoin)
    For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
        Select Case cel.Value 'agit en fonction de la valeur de la cellule cel
            Case "IN" 'cas "Super"
                Set o = ThisWorkbook.Sheets("IN") 'définit l'onglet o
            Case "NORMAL" 'cas "Moyen"
                Set o = ThisWorkbook.Sheets("OUT") 'définit l'onglet o
        End Select 'fin de l'action en fonction de ...
    
        'définit la cellule de destination (A1 si A1 est vide, sinon la  première cellule vide de la colonne A)
    
    Set dest = IIf(o.Range("A3") = "", o.Range("A3"), o.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0)).Range(.Cells(cel.Row, 1), .Cells(cel.Row, 3)).Copy
    Next cel 'prochaine cellule de la boucle
    Set pl = Nothing 'libération des objets
    Set dest = Nothing
End With 'fin de la prise en compte de l;'onglet "Feuil1"

End Sub
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : VBA: object variable or With block variable not set

Bonsoir Sara, bonsoir le forum,

Si une cellule de la plage ne contient ni IN ni OUT, l'onglet o n'est pas défini et cela provoque un bug.
Essai comme ça :
Code:
Sub Macro1()
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim cel As Range 'déclare la variable cel (CELlule)
Dim o As Object 'déclare la variable o (Onglet)
Dim dest As Range 'déclare la variable dest (cellule de DESTination)

Application.ScreenUpdating = False 'masque les changements à l'écran
With Sheets("PENSIONERS") 'prend en compte l'onglet "PENSIONERS"
    dl = .Cells(Application.Rows.Count, 1).End(xlUp).Row 'définit la dernière ligne dl de la colonne A (=1) (à adapter si besoin)
    Set pl = .Range("D2:D" & dl) 'définit la plage pl (à partir de la deuxième ligne, tu modifieras si besoin)
    For Each cel In pl 'boucle sur toutes les cellules cel de la plage pl
        On Error Resume Next 'gestion des erreur (si erreur pass à la ligne suivante)
        Set o = Sheets(cel.Value) 'définit l'onglet o (génère une erreur si l'onglet n'existe pas)
        If Err <> 0 Then 'condition : si une erreur a été générée
            Err = 0 'annule l'erreur
            MsgBox "La cellule " & cel.Address(0, 0) & " ne contient pas un nom d'onglet valide !" 'message
            GoTo suite 'va à l'étiquette suite
        End If 'fin de la condition
        On Error GoTo 0 'annule la gestion des erreur
        'définit la cellule de destination
        Set dest = IIf(o.Range("A3") = "", o.Range("A3"), o.Cells(Application.Rows.Count, 1).End(xlUp).Offset(1, 0))
        'copie et colle les 3 lignes dans la dest
        .Range(.Cells(cel.Row, 1), .Cells(cel.Row, 3)).Copy dest
suite: 'étiquette
    Next cel 'prochaine cellule de la boucle
End With 'fin de la prise en compte de l'onglet "PENSIONERS"
Application.ScreenUpdating = True
End Sub 'affiche les changements à l'écran
 

SaraBilmem

XLDnaute Nouveau
Re : VBA: object variable or With block variable not set

"Il ne vous dit pas qu'il n'est pas précisé mais qu'il n'est pas initialisé, c'est différent. L'instance de l'objet est Nothing." Je ne comprends pas trop ce que cela implique?
 

Dranreb

XLDnaute Barbatruc
Re : VBA: object variable or With block variable not set

vous avez déclaré une variable objet par exemple et vous n'avez pas fait un Set dessus pour qu'elle corresponde à quelque chose avant d'essayer de l'utiliser. Ou bien vous avez mis une expression dans un With, mais son évaluation aboutit à Nothing. Pas défini. Correspond à rien. Existe pas. Nib...
Même en anglais il est pourtant clair ce message !
Object variable or With block variable not set.
Variable objet ou de bloc With non initialisée.
 

Wind

XLDnaute Nouveau
Bonjour,

Apres avoir pas mal cherché sur le net, je ne trouve pas la raison du message d'erreur dont ma macro fait l'objet.
La première partie de la macro fonctionne et je peux sélectionner le fichier à joindre sans problème. Mais ensuite apparaît le message d'erreur suivant: object variable or With block variable not set.

Ci-dessous le code:

Sub envoiMail()
Dim Fichier As Variant

Fichier = Application.GetOpenFilename("Tous les fichiers(*.*),*.*")

MsgBox Fichier

Dim MaMessagerie As Object
Dim MonMessage As Object
Set MaMeesagerie = CreateObject("Outlook.Application")
Set MonMessage = MaMessagerie.createitem(0)
MonMessage.To = "toto@xx.com"
MonMessage.CC = "tata@xx.com"
MonMessage.attachments.Add Fichier
MonMessage.Subject = "Test envoi PJ par VBA"
contenu = "Bonjour,"
contenu = contenu & Chr(10) & Chr(13)
contenu = contenu & "Ci-joint votre document."
MonMessage.Body = contenu
MonMessage.send
Set MaMessagerie = Nothing
End Sub

Merci par avance pour votre aide,
Cordialement,
 

Yurperqod

XLDnaute Occasionnel
Fais le test avec cette macro
Est-ce que tu recois bien un mail?
VB:
Sub testMail()
With CreateObject("Outlook.Application").CreateItem(0)
'.To = 'mettre ici une adresse email entre deux "
'exemple :.To="nom.prenom@domain.fr"
.To = "nom.prenom@domain.fr"
.Subject = "TEST"
.Body = "Ceci est un mail de test"
.Send
End With
End Sub
Sur mon ordinateur, ca marche bien. Je recois bien un email à partir d'une macro Excel.
 

Discussions similaires

Réponses
2
Affichages
303

Statistiques des forums

Discussions
312 492
Messages
2 088 895
Membres
103 982
dernier inscrit
krakencolas