IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Récupérer la valeur d'une cellule spécifique d'une plage filtrée [Toutes versions]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Par défaut Récupérer la valeur d'une cellule spécifique d'une plage filtrée
    Bonsoir à tous,

    Après multiples recherches et pleins d'exemples intéressant, je reste coincé sur ma procédure suivante.

    1-Je cherche à récupérer la valeur (adresse mail) correspondant à la cellule de la première ligne et de la colonne "O" dans ma plage filtrée.
    2-Je cherche à entrer la date du jour (sans heure) dans toutes les cellules de la colonne "U" de ma plage filtrée.

    A savoir que le code suivant me renvoie systématiquement une erreur (14, 13, ou 9) et qu'après des heures de modifications et de recherches sur internet, je reste loin du résultat escompté.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
     
    Sub EnvoiMailRelanceTvx()
     
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim adresse As String
    Dim message As String
    Dim sujet As String
     
    Dim appOutlook As Outlook.Application
     
    Dim TCD As Range, Cell As Range
    Dim Plage As Range
    Dim Var As String
     
    'Si une erreur survient, on va à la ligne "errorHandler"
    On Error GoTo errorHandler
     
        If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
        Set TCD = Range("B3:V" & Range("B65536").End(xlUp).Row)
        TCD.AutoFilter Field:=14, Criteria1:="=CTM" 'Tri sur destinataire = CTM
        TCD.AutoFilter Field:=13, Criteria1:="=" 'Tri sur date de réalisation non renseignée
        TCD.AutoFilter Field:=12, Criteria1:="<" & Format(Date, "mm/dd/yy") 'Tri sur date de fin d'exécution prévisionnelle dépassée
     
        Set Plage = Range("a3:v" & Range("a65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
     
        For i = 3 To Plage("a" & Rows.Count).End(xlUp).Row
        'Définition de la plage de test (de la 3ème ligne jusqu'à première cellule vide de la colonne b)
            Range("u" & i).Value = Format(Now(), "dd/mm/yyyy")
            'lorsqu 'un mail a été envoyé, la cellule en u est remplie avec la date d'envoi du mail afin d'éviter l'envoi de plusieurs mails
            Var = Range("o" & i).Value
        Next i
     
     
    Set appOutlook = CreateObject("Outlook.Application")
     
    If Not (appOutlook Is Nothing) Then
     
        sujet = "URGENT : dates prévisionnelles d'interventions dépassées !" 'Définition du sujet du mail
        adresse = Var 'Recherche l'adresse mail du destinataire
     
     
        'Définition du message
        message = "Bonjour, " & vbCrLf & vbCrLf & _
            "Nous vous informons que blablabla ... " & vbCrLf & _
            "Le sécrétariat."
     
        'Paramètres de l'application mail
        Set OutlookApp = CreateObject("outlook.application")
        Set OutlookMail = OutlookApp.CreateItem(0)
                With OutlookMail
                .Subject = sujet
                .To = adresse
                .body = message
                .send 'Envoi du mail
                End With
    End If
     
    errorHandler:
                If Err.Number <> 0 Then
                    MsgBox "Envoi msg : " & Err.Number
                    '"Impossible d'effectuer cette opération !" & vbCrLf & "Merci de vérifier que Microsoft Outlook est bien ouvert !" & vbCrLf & _
                    '"Aucun mail n'a été envoyé !", vbCritical, "Attention !"
                End If
     
    End Sub
    En vous remerciant de votre aide par avance,

    Cordialement.

  2. #2
    Membre averti
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Par défaut Récuperer la valeur d'une cellule spécifique d'une plage filtrée
    Re-bonsoir,

    Pour le premier point, je viens de réussir avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Dim TCD As Range, Cel As Range
    Dim Plage As Range
    Dim Var As String
     
        If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
        Set TCD = Range("A3:V" & Range("A65536").End(xlUp).Row)
        TCD.AutoFilter Field:=14, Criteria1:="=CTM" 'Tri sur destinataire = CTM
        TCD.AutoFilter Field:=13, Criteria1:="=" 'Tri sur date de réalisation non renseignée
        TCD.AutoFilter Field:=12, Criteria1:="<" & Format(Date, "mm/dd/yy") 'Tri sur date de fin d'exécution prévisionnelle dépassée
     
        Set Plage = Range("a2:a" & Range("a65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
     
        For Each Cel In Plage
            Cells(Cel.Row, "u") = Format(Now(), "dd/mm/yyyy")
        Next Cel
    Par contre, je ne vois toujours pas commentrécupérer l'adresse email située dans la cellule de la colonne "O" de la première ligne de ma plage filtrée.

    Auriez-vous une piste pour sortir cette variable ? Dois-je refaire une autre boucle ou puis-je utiliser celle déjà créée ?

    Merci de votre aide.

    Cordialement.

  3. #3
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Teste ça après avoir remplacé le nom de la feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MsgBox Sheets("Feuil1").UsedRange.Offset(1, 0).SpecialCells(xlCellTypeVisible).Cells(1, 15).Address
    Si c'est ok, utilises la propriété .Value pour récupérer le contenu de la cellule


    EDIT : si la ligne 1 n'est pas vide alors c'est .Offset(2,0)

  4. #4
    Membre averti
    Homme Profil pro
    Responsable technique
    Inscrit en
    Juillet 2015
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Responsable technique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2015
    Messages : 29
    Par défaut
    Bonsoir joe.levrai,

    Merci pour ta réponse; mais je viens de trouver tout simplement en rajoutant dans ma boucle ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var = Cells(Cel.Row, "o")
    Le code complet est donc le suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Dim OutlookApp As Object
    Dim OutlookMail As Object
    Dim adresse As String
    Dim message As String
    Dim sujet As String
     
    Dim i As Variant
    Dim appOutlook As Outlook.Application
     
    Dim TCD As Range, Cel As Range
    Dim Plage As Range
    Dim Var As String
     
    'Si une erreur survient, on va à la ligne "errorHandler"
    On Error GoTo errorHandler
     
        If ActiveSheet.FilterMode Then ActiveSheet.ShowAllData
        Set TCD = Range("A3:V" & Range("A65536").End(xlUp).Row)
        TCD.AutoFilter Field:=14, Criteria1:="=CTM" 'Tri sur destinataire = CTM
        TCD.AutoFilter Field:=13, Criteria1:="=" 'Tri sur date de réalisation non renseignée
        TCD.AutoFilter Field:=12, Criteria1:="<" & Format(Date, "mm/dd/yy") 'Tri sur date de fin d'exécution prévisionnelle dépassée
     
        Set Plage = Range("a2:a" & Range("a65536").End(xlUp).Row).SpecialCells(xlCellTypeVisible)
     
        For Each Cel In Plage
            Cells(Cel.Row, "u") = Format(Now(), "dd/mm/yyyy")
            Var = Cells(Cel.Row, "o")
        Next Cel
     
    Set appOutlook = CreateObject("Outlook.Application")
     
    If Not (appOutlook Is Nothing) Then
     
        sujet = "URGENT : dates prévisionnelles d'interventions dépassées !" 'Définition du sujet du mail
        adresse = Var 'Recherche l'adresse mail du destinataire
     
     
        'Définition du message
        message = "Bonjour, " & vbCrLf & vbCrLf & _
            "Nous vous informons que blablabla ... " & vbCrLf & _
            "Le sécrétariat."
     
        'Paramètres de l'application mail
        Set OutlookApp = CreateObject("outlook.application")
        Set OutlookMail = OutlookApp.CreateItem(0)
                With OutlookMail
                .Subject = sujet
                .To = adresse
                .body = message
                .send 'Envoi du mail
                End With
    End If
     
    errorHandler:
                If Err.Number <> 0 Then
                    MsgBox "Envoi msg : " & Err.Number
                End If
     
    End Sub
    Merci.

    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date d'aujourd'hui dans un champ
    Par 13GIBE59 dans le forum WinDev
    Réponses: 8
    Dernier message: 11/02/2013, 18h56
  2. [XL-2010] reprendre les dates d'aujourd'hui dans un tableau
    Par Naoned005 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 27/06/2012, 13h06
  3. [AC-2007] Affichage dans les cellules d'une feuille de données
    Par reims87 dans le forum IHM
    Réponses: 2
    Dernier message: 03/11/2011, 09h15
  4. Afficher la date d'aujourd'hui dans USF
    Par logiclogic dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 29/03/2011, 11h53
  5. [AC-2007] Insérer la date d'aujourd'hui dans un état
    Par glooping dans le forum IHM
    Réponses: 1
    Dernier message: 29/09/2009, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo