VBA Ouverture classeur sous condition de date

Résolu/Fermé
Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 - Modifié par Clark...kent le 25/07/2012 à 15:52
Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 - 26 juil. 2012 à 10:58
Bonjour,
Merci de prendre un peu de temps à lire ce post.

J'ai un classeur qui se charge en fonction de la date contenue dans une cellule.

Le chargement du classeur se fait soit sur "C:/" et si il ne le trouve pas alors dans "C:/" & le mois inclus dans la cellule A3 & \ & le Nom du fichier (date sélectionnée dans calendar).

Voici mon code :
Private Sub Charger_Click()
Dim Ligne As Long
Dim valeur As Date
Dim lig As Long
Dim Lige As Long
Dim Rege As Long


With Sheets("Donnees")
'Positionnement sur la première ligne vide de la feuille "donnees"
Ligne = .Range("C" & Rows.Count).End(xlUp).Row + 1

'application non visible pour l'utilisateur
'Application.ScreenUpdating = False


'vérification de la présence du fichier source
valeur = Worksheets("Chargement").Range("A3").Value
mois = Worksheets("Chargement").Range("A5").Value

'Vérification si les données ont déjà été charger
Set resultat = Worksheets("Donnees").Columns("A:A").Find(valeur)
If resultat Is Nothing Then
MsgBox "Recherche des données à charger"
Else
MsgBox "Les données sont déjà présentes"
Exit Sub
End If

Chemin = "C:\"
Fichier = Format(valeur, "dd mm yyyy") & ".xls"
Special = Format(mois, "mmmm")

'Si Aucun fichier source disponible
If Dir(Chemin & Fichier) = "" And Dir(Chemin & Special & "\" & Fichier) = "" Then
MsgBox "Le fichier " & Fichier & " est introuvable!"

Exit sub

ElseIf Dir(Chemin & Fichier) = "" Then
With Workbooks.Open(Chemin & Special & "\" & Fichier)
GoTo sélection

ElseIf Dir(Chemin & Special & "\" & Fichier) = "" Then
With Workbooks.Open(Chemin & Fichier)
End If


sélection:
'Ouverture du fichier source selon la date sélectionnée en A3
.Sheets("Temps").Select
On Error Resume Next
Rege = Sheets("Temps").Range("A100000").End(xlUp).Row - 1
.Sheets("Temps Conseillers").Range("A3:K" & Rege).Select
Selection.Copy

'Copier les données de la feuille "Temps" dans la première ligne vide de la feuille "Données"
ThisWorkbook.Worksheets("Donnees").Range("C" & Ligne).PasteSpecial xlValues
.Close savechanges:=False
End With

'Insertion de la date dans la colonne A dans la feuille Donnees
Range("A" & Ligne & ":A" & .Range("C" & Rows.Count).End(xlUp).Row) = Format(Sheets("Chargement").Range("A3"), "mm/dd/yyyy")

'Insertion de la date dans la colonne N
Sheets("Donnees").Select
Columns("N:N").Value = Columns("A:A").Value
Columns("N:N").NumberFormat = "General"

'Insertion de la semaine dans la colonne O de la feuille Donnees
Range("O" & Ligne & ":O" & .Range("C" & Rows.Count).End(xlUp).Row) = Format(Sheets("Chargement").Range("A3"), "ww")


'Calcul si le taux d'enregistrement est égal à 100% dans la feuille resultats
With Sheets("Donnees")
With .Range("B" & Ligne & ":B" & .Range("C" & Rows.Count).End(xlUp).Row)
.Formula = "=IF(RC[6]="""","""",IF(RC[6]=100%,""Oui"",""Non""))"
.Value = .Value
End With
End With

'Sauvegarde du classeur actif
ActiveWorkbook.Save
MsgBox "Vos données ont été chargé et sauvegardé"


Sheets("Chargement").Select

'Arrière plan visible
Application.ScreenUpdating = True

End With
End Sub

J'ai une erreur dans la première zones en gras, il me dis bloc else sans if :s
Dans la deuxième zone en gras, je tente de faire apparaitre le numéro de semaine, mais ça ne fonctionne pas.

Merci de votre aide et bonnes vacances pour ceux qui le sont :|

6 réponses

f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
25 juil. 2012 à 20:22
Bonjour Clarck

Mettre des with a la suite de test if ou elseif, c'est pas top, l'interpreteur VBA se melange les pinceaux.

'Insertion de la semaine dans la colonne O de la feuille Donnees
Range("O" & Ligne & ":O" & .Range("C" & Rows.Count).End(xlUp).Row) = Format(Sheets("Chargement").Range("A3"), "ww")


Range("O" pas du meme onglet que .Range("C". Vous voulez copier une cellule dans plusieurs ou ......


Bonne suite
1
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
26 juil. 2012 à 10:14
Bonjour,

Range ("B" & Ligne & ":B" & Range("C" & Rows.Count).End(xlUp).Row)
Formula = "=IF(RC[6]="""","""",IF(RC[6]=100%,""Oui"",""Non""))"
Value = Value

Si formula est rattache a Range......, Il faut mettre .formula....... au bout de la ligne Range.....

Value = Value ???? quoi-t-est-ce

Workbook(Fichier).Activacte
Close savechanges = False


Workbooks(Fichier).Activacte
Workbooks(Fichier).Close savechanges := False

Bonne continuation
1
f894009 Messages postés 17205 Date d'inscription dimanche 25 novembre 2007 Statut Membre Dernière intervention 19 octobre 2024 1 709
26 juil. 2012 à 10:37
Re,

Application.DisplayAlertes=false devrait aller.
1
Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 2
Modifié par Clark...kent le 26/07/2012 à 10:17
En effet, je ne connaissais pas ce problème, j'ai un dernier soucis maintenant, une petite ligne rebelle :

Private Sub Charger_Click()
Dim Ligne As Long
Dim valeur As Date
Dim lig As Long
Dim Lige As Long
Dim Rege As Long

valeur = Worksheets("Chargement").Range("A3").Value
mois = Worksheets("Chargement").Range("A5").Value
Chemin = "C:\"

Fichier = Format(valeur, "dd mm yyyy") & ".xls"
Special = Format(mois, "mmmm")


Sheets("Donnees").Select
'Positionnement sur la première ligne vide de la feuille "donnees"
Ligne = Range("C" & Rows.Count).End(xlUp).Row + 1

'application non visible pour l'utilisateur
'Application.ScreenUpdating = False

'vérification de la présence du fichier source
Set resultat = Worksheets("Donnees").Columns("A:A").Find(valeur)

If resultat Is Nothing Then
MsgBox "Recherche des données à charger"

Else
MsgBox "Les données sont déjà présentes"
Exit Sub

End If


'Aucun fichier source disponible
If Dir(Chemin & Fichier) = "" And Dir(Chemin & Special & "\" & Fichier) = "" Then
MsgBox "Le fichier " & Fichier & " est introuvable!"
Exit Sub

ElseIf Dir(Chemin & Fichier) = "" Then
Workbooks.Open(Chemin & Special & "\" & Fichier).Activate
GoTo sélection

ElseIf Dir(Chemin & Special & "\" & Fichier) = "" Then
Workbooks.Open(Chemin & Fichier).Activate
End If

sélection:
'Ouverture du fichier source selon la date sélectionnée en A3

Sheets("Temps").Select
On Error Resume Next
Rege = Sheets("Temps").Range("A100000").End(xlUp).Row - 1
Sheets("Temps").Range("A3:K" & Rege).Select
Selection.Copy

'Copier les données de la feuille "Temps" dans la première ligne vide de la feuille "Données"
ThisWorkbook.Worksheets("Donnees").Range("C" & Ligne).PasteSpecial xlValues
Workbook(Fichier).Activacte
Close savechanges = False


ThisWorkbook.Activate
'Insertion de la date dans la colonne A dans la feuille Donnees
Range("A" & Ligne & ":A" & Range("C" & Rows.Count).End(xlUp).Row) = Format(Sheets("Chargement").Range("A3"), "mm/dd/yyyy")

'Insertion de la date dans la colonne N
Sheets("Donnees").Select
Columns("N:N").Value = Columns("A:A").Value
Columns("N:N").NumberFormat = "General"

'Insertion de la semaine dans la colonne O de la feuille Donnees
Range("O" & Ligne & ":O" & Range("C" & Rows.Count).End(xlUp).Row) = Format(Sheets("Chargement").Range("A3"), "ww")

'Calcul si le taux d'enregistrement est égal à 100% dans la feuille resultats
Range("B" & Ligne & ":B" & Range("C" & Rows.Count).End(xlUp).Row) = Formula = "=IF(RC[6]="""","""",IF(RC[6]=100%,""Oui"",""Non""))"
Value = Value


'Sauvegarde du classeur actif
ActiveWorkbook.Save
MsgBox "Vos données ont été chargé et sauvegardé"


Sheets("Chargement").Select

'Arrière plan visible
Application.ScreenUpdating = True

End Sub
Il ne veux pas me fermer le fichier source.

Ensuite, le calcul ne fonctionne pas, il m'inscrit 'FAUX' partout


Merci de ton aide.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 2
Modifié par Clark...kent le 26/07/2012 à 10:28
Ton message et ma modification du précédent se sont croisés.

Value = Value c'est une sorte de mémo pour me rappeler à moi même de ne pas faire de VBA le matin dès 8h ;)

Non, sans rire, tout fonctionne, merci à toi f894009, est ce que par hasard tu sais si il existe un bout de code pour qu'il évite de conserver les grandes quantités de données copiées.

C'est à dire quand je ferme mon fichier excel, et que je lui demande de ne pas sauvegardé par vba, il me demande si je veux conservé le contenu du presse papier, il existe un moyen VBA pour que cela ne s'affiche plus, du genre : vide.pressepapier = true :)
0
Clark...kent Messages postés 44 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 mars 2020 2
26 juil. 2012 à 10:58
merci!
0