Microsoft 365 Excel [VBA]. Erreur d’exécution 424 Objet requis sur une concaténation

orval34

XLDnaute Nouveau
Bonjour
J'ai créé une macro permettant à partir un fichier excel de créé des tache dans outlook.
Elle fonctionne, sauf quand je veux mettre deux textes de deux deux cellules (du fichier source) dans une variable pour avoir l'objet de la tache (ligne 38 du code) cela déclenche une erreur d'execution 424 objet requis.

VB:
Option Explicit
    Dim i As Integer
    Dim date_tâche As Range, lib_tâche As Range, type_tâche As Range, Personne_BE As Range, date_tâche_fin As Range, Avancement As Range
    
    Dim Objet_Tache As Range
        
    Dim olApp As Object, tâche As Object
    Dim périodicité As Object
    Dim destinataire As String
    
        ' Déclarer les variables
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wbTravail As Workbook
    Dim wsTravail As Worksheet

Sub créa_tâche()
    
    Dim derl As Long
    
    ' Initialiser Outlook
    destinataire = "xxxx@xxxx.fr"
    Set olApp = CreateObject("Outlook.Application")
    'Set olApp = Outlook.Application
    
     ' Définir le classeur source
    
    
    Set wbSource = Workbooks.Open("\\SDC18-VM-DC\general\5-Services\05-BUREAU D'ETUDES\Organisation du BE Plannification des tâches V2.xlsx") ' fichier dans le reseau Organisation du BE Plannification des tâches V2.xlsx
    ' Définir la feuille source
    Set wsSource = wbSource.Sheets("Tâches BE")
    
    derl = wsSource.Range("A" & Rows.Count).End(xlUp).Row 'derniere ligne du fichier source
    
      For i = 2 To derl
            '-- affectation des champs
            'Objet de la tache
            Set Objet_Tache = wsSource.Cells(i, "D") & " " & wsSource.Cells(i, "G")
            
            
            Set type_tâche = Objet_Tache 'wsSource.Cells(i, "D") '& " " & wsSource.Cells(i, "G") 'type_tache= Objet de la tache wsSource.Cells(i,colonne).Value verifier la position dans le classeur organisation BE + feuille tache
                'Objet de la tache = N°affaire(D) + Client(F) + Machine(E) + Tache(G)
            'Corps de la tache
            Set lib_tâche = wsSource.Cells(i, "N") '& " Nombre d'heures à passer : " & wsSource.Cells(i, "H") 'lib_tache=Corps de la tache
                'Corps de la tache = Commentaire(N) + nb heure à passer(H)
            'date de debut de la tache
            Set date_tâche_fin = wsSource.Cells(i, "I")  'Jour debut
                'date de debut = date d'enregistrement
                'date de fin (echéance .dueDATE) = Date Objectif
            'Personne qui fait la tache
            Set Personne_BE = wsSource.Cells(i, "B")
            
            Set Avancement = wsSource.Cells(i, "J")
                
            'faire un test sur "xxxxx" dans la colonne Personne BE pour pour générer la tache then
            
            '-- génération d'une tâche selon conditions
            If lib_tâche.Value <> Empty _
            And Avancement.Value < 100 _
            And IsDate(date_tâche_fin.Value) _
            And Personne_BE.Value = "xxxxxxx" _
            And Personne_BE.Comment Is Nothing Then 'verifie qu'il n'y a pas de commentaire sue la celulle du nom
              
                '-- génération tâche avec rappel
                Set tâche = olApp.CreateItem(3) '3 représente une tâche
                With tâche
                    .Subject = type_tâche
                    .Body = lib_tâche
                    
                    .DueDate = date_tâche_fin.Value
                    '.DueDate = DateAdd("ww", 1, .StartDate)             'échéance = date de début + 1 semaine
                    .StartDate = DateAdd("ww", -2, .DueDate)            'date début de la tâche date de fin - 2 semaines
                    .Status = 1                                         '0 = non démarré, 1 = en cours, 2 = terminé, 3 = en attente, 4 = différé
                    '.DateCompleted                                     'date de fin force status à 2
                    .Importance = 1                                     '0 = basse, 1 = normal, 2 = haute
                    '.contactNames
                    .ReminderSet = True                                 'activation rappel
                    .ReminderTime = .StartDate - 7 + TimeValue("9:00AM")   'date de rappel si activé
                    Set périodicité = .GetRecurrencePattern()   'récurrence tâche par défaut toutes les semaines
                    périodicité.NoEndDate = False              'fin de la tâche après répétitions
                    périodicité.Occurrences = 1                 'nombre de répétitions de la tâche
                    .Save
                 End With
                
                '-- ajout commentaire date de création de la tâche
                Personne_BE.AddComment "tâche crée le " & Date
            End If 'lib_tache.value ....
          
        Next i
        
        Set olApp = Nothing
        
End Sub

si j’écris que : Set type_tâche = Objet_Tache 'wsSource.Cells(i, "D"), la macro fonctionne correctement. sauf que je n'ai pas toute les informations de l'objet de la tache
.
si vous avez une idée du problème ..... merci d'avance

cordialement
 

Oneida

XLDnaute Impliqué
Bonjour,

Quand vous faites un set d'une variable range, vous devez avoir soit une cellule ou une plage de cellule pas des valeurs de cellule
Vous avez besoin des valeurs de cellules donc les set de variables range cellule unique ne servent a rien et pour les concatenations y erreur
Pour moi, y a pas besoin de variables intermediaires vu ce que vous en faites
 

orval34

XLDnaute Nouveau
Bonjour
@Oneida merci pour ta réponse

dans mon fichier de base, l’objet de la tache est décomposé dans plusieurs cellules. d’où le besoin d'assemblé (concaténer) les textes de ces cellules.

J'ai bien compris que les set de variables range n'acceptent que des variables range

dans ce cas comment concaténer du texte et l'associer à une variable range ?

cordialement
 

Oneida

XLDnaute Impliqué
Bonjour,

Ben, vous ne faites pas de set!
Simple, nom!
Vous définissez vos variables as String
VB:
'Objet de la tache
Objet_Tache = wsSource.Cells(i, "D") & " " & wsSource.Cells(i, "G")
Perso, Vous n'avez pas besoin de variables intermédiaires puisque vous utilisez les infos une seule fois
 

Discussions similaires

Réponses
2
Affichages
114
Réponses
17
Affichages
1 K
Réponses
14
Affichages
654

Statistiques des forums

Discussions
312 206
Messages
2 086 223
Membres
103 159
dernier inscrit
FBallea