Cocktail de questions excel

hajorinette

XLDnaute Occasionnel
Bonjour

je suis débutante en excel et j'ai un ensemble de questions que j'ai pas pu résoudre

Question 1: pour une colonne avec des cellules en listes de données, les listes comprennent deux valeurs :cellule vide ou cellule avec un X
L'idée est de sommer les X quelque part...

Question 2 : est il possible d'ouvrir un fichier fermé dont on connait l'emplacement et le nom ( avec un lien hypertexte ou autre) juste en doublecliquant sur la cellule correspondante.
Exemple sur une colonne avec des N° incrémentés en double cliquant sur la cellule contenant le 5 j'aurai le fichier "toto_5" qui s'ouvre.
en double cliquant sur la cellule contenant le 6 (cellule juste en dessous) c'est "toto_6" qui s'ouvre.


Question 3:

Ce code en dessous contient 3 macros

la 1ere macro copie un de 3 fichiers selon la valeur de la variable flag.

La deuxieme macro le met dans un emplacement précis
je n'arrive pas à trouver le chemin qu'il faut pour mettre mon fichier excel tout simplement dans le dossier toto qui est sur le bureau, ça ne march epas avec ce chemin en tout cas

et la derniere macro est 'sensé' éditer un mail même si je ne vois rien de tout cela

en gros c'est la premiere macro qui fonctionne comme je le veux la deuxieme marche aussi mais ça me met le fichier dans mes documents !
la 3eme marche pas


Sub Archive()

Dim nomfichier As Workbook
With Application
.ScreenUpdating = False
.DisplayAlerts = False
End With
On Error Resume Next
If Flag = 1 Then
Sheets("Casse").Select
Sheets("Casse").Copy
Call Sauve
End If
If Flag = 2 Then
Sheets("Défaut d'aspect").Select
Sheets("Défaut d'aspect").Copy
Call Sauve
End If
If Flag = 3 Then
Sheets("Produit manquant").Select
Sheets("Produit manquant").Copy
Call Sauve
End If
Application.ScreenUpdating = True
Sheets("FICHE RECLAMATIONS").Select
Application.CutCopyMode = False
Range("D6").Select

End Sub

Sub Sauve()
Dim nomfichier
Dim numero
Dim chemin As String
With Application
.ScreenUpdating = False
.DisplayAlerts = False
chemin = "C:\Documents and Settings\hajorinette\Bureau\toto"
.DisplayAlerts = True
End With
numero = Range("I2").Value
nomfichier = "LITIGE" & numero
With ActiveWorkbook
.SaveAs Filename:=nomfichier
.Close
End With
Application.ScreenUpdating = True
call Envoi_mail
End Sub

'Sub Envoi_mail()
'Dim Ol As New Outlook.Application
'Dim Olmail As MailItem
'Dim CurrFile As String
'Set Ol = New Outlook.Application
'Set Olmail = Ol.CreateItem(olMailItem)
'With Olmail
'adresse = Range("C13:E13").Value

'.To = adresse
'.Subject = "Votre réclamation est enregistrée"
'.Body = "Bonjour," & vbNewLine & vbNewLine & _
"Suite à votre réclamation " & vbNewLine & _
"This is line 2" & vbNewLine & _
"This is line 3" & vbNewLine & _
"This is line 4"
'
'.Attachments.Add ActiveWorkbook.Path & "\nom du fichier"
'.Display'

'End With

'End Sub

Merci de votre aide!
 

keepcool183

XLDnaute Occasionnel
Re : Cocktail de questions excel

Bonjour Hajorinette,

Reponse Q.1 : formule nb.si avec comme critère =X.

pour le reste il y a tellement de texte pas eu la force de lire :p.

Essaye de poster questions par questions c'est plus simple pour nous et pour toi aussi ;)
 

hajorinette

XLDnaute Occasionnel
Re : Cocktail de questions excel

pas faux !

donc:D


Question 2 : est il possible d'ouvrir un fichier fermé dont on connait l'emplacement et le nom ( avec un lien hypertexte ou autre) juste en doublecliquant sur la cellule correspondante.
Exemple sur une colonne avec des N° incrémentés en double cliquant sur la cellule contenant le 5 j'aurai le fichier "toto_5" qui s'ouvre.
en double cliquant sur la cellule contenant le 6 (cellule juste en dessous) c'est "toto_6" qui s'ouvre.

;)
 

GIBI

XLDnaute Impliqué
Re : Cocktail de questions excel

Bonjour,

question 1

=NB.SI(X1:X50;"X")


question 2 :
tu peux associer l'ouverture à un événement (bouton droit sur l'onglet de la feuille/visualiser le code), si double clic tu récupères la valeur de la cellule (via la variable numéro) tu constitues le nom du fichier et tu ouvres
avec " If Numero.Column <> 3 Then Exit Sub" on sort si ce n'est pas la colonne 3

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Numero As Range, Cancel As Boolean)
     If Numero.Column <> 3 Then Exit Sub
     Workbooks.Open "d:\CHemin\TOTO_" & Numero
End Sub


Question 3 :

Il faut associer le chemin au fichier

.SaveAs Filename:=Chemin & "\" & nomfichier


Pour l'email donnes nous un exemple pour pouvoir tester

par exemple adresse = Range("C13:E13").Value (plage de cellule = curieux!)


NB : testes aen pas à pas (F8) pour déterminer où sont les erreurs
GIBI
 
Dernière édition:

ngogoisidore

XLDnaute Occasionnel
Re : Cocktail de questions excel

Bonjour hajorinette, keepcool183, GIBI

hajorinette,

Question 3 (macro Envoi_mail) :

  1. Ne pas oublier de mettre la librairie "Microsoft Outlook 12.0 Object Library" (pour Outlook 2007) en référence dans VBA (par le menu Tools/References...).

  2. Je suppose que les cellules C13 à E13 sont fusionnées et que c'est pour cela que tu vas chercher l'adresse de destination de ton email dans la plage C13:E13. Attention cependant, ce n'est pas parce que les cellules sont fusionnées qu'elles contiennent toutes la valeur que tu vois s'afficher à l'écran. Dans ce cas, la valeur est probablement contenue dans C13. D13 et E13 étant surement vides (tu peux le vérifier en supprimant la fusion). D'autre part, comme tu ne déclares pas ta variable adresse, par défaut son type est Variant, et quand tu écris adresse = Range("C13:E13").Value, tu affectes un tableau de trois valeurs à la variable adresse (car la plage C13:E13 contient trois cellules). Ca ne doit pas être exactement ce que tu veux faire :). Donc, mon conseil : si tu peux, ne fusionne pas les trois cellules C13 à E13, élargis plutôt la colonne C13, et sers toi uniquement de cette colonne pour ton adresse. Puis, dans ton code, écris : adresse = Range("C13").Value. Si tu péfères, malgré tout, fusionner les cellules, la commande précédente devrait, de toutes façons, aussi fonctionner.

Voir ci-dessous, une proposition de code :

Code:
Sub Envoi_mail()
    Dim oOl             As Outlook.Application
    Dim oOlmail         As Outlook.MailItem
    
    Dim bOlEtaitActif   As Boolean

    Dim sAdresse        As String
    Dim sSujet          As String
    Dim sCorps          As String
    Dim sChemAtt        As String
    Dim sNomAtt         As String

    Dim dDate0          As Date
    Dim dTimeMax        As Date
    
    dTimeMax = TimeSerial(0, 2, 0)
    bOlEtaitActif = True
    
    On Error Resume Next
    Set oOl = GetObject(, "Outlook.Application")
    
    If Err Then
        Set oOl = CreateObject("Outlook.Application")
        bOlEtaitActif = False
    End If
    On Error GoTo 0
    
    Set oOlmail = oOl.CreateItem(olMailItem)

    With oOlmail
        'With Application.WorksheetFunction
        '    sAdresse = Join(.Transpose(.Transpose(Sheets("Sheet1").Range("C13:D13"))), ";")
        'End With
        sAdresse = Sheets("Sheet1").Range("C13").Value
        sSujet = "Votre réclamation est enregistrée"
        sCorps = "Bonjour," & vbNewLine & vbNewLine & _
        "Suite à votre réclamation " & vbNewLine & _
        "This is line 2" & vbNewLine & _
        "This is line 3" & vbNewLine & _
        "This is line 4"
        
        sChemAtt = "MonCheminAttachement"
        sNomAtt = "MonNomAttachement"
       
        .Body = sCorps
        .To = sAdresse
        .Subject = sSujet
        .Attachments.Add sChemAtt & "\" & sNomAtt

        .Display
        
        'Si tu veux directement envoyer le courier à partir du code :
        '.Send
    End With

    'Ne pas oublier de terminer l'instance de l'application Outlook,
    'si tu n'as pas besoin de manipuler le courier avant de l'envoyer :
    'If Not bOlEtaitActif Then
    '    Set oOlmail = oOl.GetNamespace("MAPI").GetDefaultFolder(olFolderOutbox).Items.GetLast
    '    dDate0 = Now
    '    While Not oOlmail.Sent And dDate0 + dTimeMax - Now > 0
    '    Wend
    '    If oOlmail.Sent Then
    '        oOl.Quit
    '    Else
    '        MsgBox ("Erreur - Temps d'attente dépassé - Message : " & sSujet & " n'a peut-être pas pû être envoyé")
    '    End If
    'End If
    
    Set oOlmail = Nothing
    Set oOl = Nothing
End Sub '~Envoi_mail

Edition : J'ai pensé que tu avais peut-être l'intention (mais je n'y crois pas trop:)) d'ajouter plusieurs destinataires à ton mail, les adresses étant stockées dans les celules C13, D13, E13. Dans ce cas l'instruction VBA a utiliser serait plutôt :

Code:
With Application.WorksheetFunction
    sAdresse = Join(.Transpose(.Transpose(Sheets("Sheet1").Range("C13:E13"))), ";")
End With

@+
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 480
Messages
2 088 757
Membres
103 950
dernier inscrit
Thomas Solioz