VBA Ouverture classeur sous condition de date
Résolu
Clark...kent
Messages postés
44
Date d'inscription
Statut
Membre
Dernière intervention
-
Clark...kent Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
Clark...kent Messages postés 44 Date d'inscription Statut Membre Dernière intervention -
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 :|
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 :|
A voir également:
- VBA Ouverture classeur sous condition de date
- Excel cellule couleur si condition texte - Guide
- Page d'ouverture google - Guide
- Airpods 3 date de sortie - Guide
- Office 2024 date de sortie - Accueil - Bureautique
- Samsung a33 date de sortie - Guide
6 réponses
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
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
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
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
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 :)
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 :)