Rechercher une une date dans une plage en fonction d'un msgbox
Résolu/Fermé
Hayat92
Messages postés
3
Date d'inscription
jeudi 9 juin 2016
Statut
Membre
Dernière intervention
14 juin 2016
-
12 juin 2016 à 14:03
Hayat92 Messages postés 3 Date d'inscription jeudi 9 juin 2016 Statut Membre Dernière intervention 14 juin 2016 - 14 juin 2016 à 20:21
Hayat92 Messages postés 3 Date d'inscription jeudi 9 juin 2016 Statut Membre Dernière intervention 14 juin 2016 - 14 juin 2016 à 20:21
A voir également:
- Rechercher une une date dans une plage en fonction d'un msgbox
- Fonction si et - Guide
- Rechercher ou entrer l'adresse - Guide
- Rechercher une chanson - Guide
- Rechercher une adresse - Guide
- Comment rechercher une image sur google - Guide
3 réponses
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
12 juin 2016 à 15:07
12 juin 2016 à 15:07
Bonjour Hayat, bonjour le forum,
Explications claires mais pas suffisantes. Manquent :
• Nom et chemin d'accès du premier fichier, Destination (celui qui contient normalement la macro avec la MsgBox)
• Nom et chemin d'accès du second fichier, Source des donnés à coller
• Nom de l'onglet de la recherche du second fichier
• Nom de l'onglet du collage dans le premier fichier
• Cellule où tu veux coller...
L'idéal c'est de joindre les deux fichiers... Tu comprends bien que ce n'est pas à nous de recréer ton environnement (surtout avec si peu d'explication).
Explications claires mais pas suffisantes. Manquent :
• Nom et chemin d'accès du premier fichier, Destination (celui qui contient normalement la macro avec la MsgBox)
• Nom et chemin d'accès du second fichier, Source des donnés à coller
• Nom de l'onglet de la recherche du second fichier
• Nom de l'onglet du collage dans le premier fichier
• Cellule où tu veux coller...
L'idéal c'est de joindre les deux fichiers... Tu comprends bien que ce n'est pas à nous de recréer ton environnement (surtout avec si peu d'explication).
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
12 juin 2016 à 20:32
12 juin 2016 à 20:32
Bonsoir Hayat,
Essaie ce code à placer dans le classeur : macro perf immo.xlsm. Attention le code considère que les autres classeurs se trouvent dans le même dossier que le classeur de cette macro. Si ce n'est pas le cas, il faudra soit modifier le code, soit ouvrir au préalablement tous les classeurs.
J'ai considéré que les données qui contiennent les dates dans l'onglet Données trimestrielles perf SCI du classeur Données trimestrielles de perf SCI.xls, commençaient à partir de la ligne 2, la première ligne étant réservé pour les étiquettes. Si ce n'est pas le cas il faut, dans la boucle For I = 2..., remplacer 2 par 1 :
Le code commenté :
Essaie ce code à placer dans le classeur : macro perf immo.xlsm. Attention le code considère que les autres classeurs se trouvent dans le même dossier que le classeur de cette macro. Si ce n'est pas le cas, il faudra soit modifier le code, soit ouvrir au préalablement tous les classeurs.
J'ai considéré que les données qui contiennent les dates dans l'onglet Données trimestrielles perf SCI du classeur Données trimestrielles de perf SCI.xls, commençaient à partir de la ligne 2, la première ligne étant réservé pour les étiquettes. Si ce n'est pas le cas il faut, dans la boucle For I = 2..., remplacer 2 par 1 :
Le code commenté :
Sub Macro1() Dim D As Variant 'déclare la variable D (Date) Dim DR As Long 'déclare la variable DR (Date Recherchée) Dim CH As String 'déclare la variable CH (CHemin d'accès) Dim CS As Workbook 'déclare la variable CS (Classeur Source) Dim OS As Worksheet 'déclare la variable OS (Onglet Source) Dim CD As Workbook 'déclare la variable CD (Classeur Destination) Dim OD As Worksheet 'déclare la variable OD (Onglet Destination) Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs) Dim I As Integer 'déclare la variable I (Incrément) Dim J As Byte 'déclare la variable J (incrément) Dim K As Integer 'déclare la variable K (incrément) Dim DEST As Range 'déclare la variable DEST (cellule de DESTination) Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes) deb: 'étiquette D = Application.InputBox("Veuillez taper la date !", "DATE", Type:=2) 'définit la date D If D = False Then Exit Sub 'si bouton [Annuler], sort de la procédure 'si non renseignée, message puis retourne à D via l'étiquette "deb" If D = "" Then MsgBox "Vous devez renseigner la date !": GoTo deb 'si date non valide, message puis retourne à D via l'étiquette "deb" If Not IsDate(D) Then MsgBox "date non valide !": GoTo deb DR = CLng(CDate(D)) 'définit la date recherchée DR (cela parmet de passer outre les formats de date) CH = ThisWorkbook.Path & "\" 'définit le chemin CH On Error Resume Next 'gestion des erreurs (en cas d'erreur passe à la ligne suivante) 'définit le classeur source CS (génère une erreur si ce classeur n'est pas ouvert) Set CS = Workbooks("Données trimestrielles de perf SCI.xls") If Err <> 0 Then 'condition : si une erreur a été générée Err.Clear 'supprime l'erreur Workbooks.Open (CH & "Données trimestrielles de perf SCI.xls") 'ouvre le classeur CS (c'est pour cela que CH est important !) Set CS = ActiveWorkbook 'définit le classeur source CS End If 'fin de la condition On Error GoTo 0 'annule la gestion des erreurs Set OS = CS.Sheets("Données trimestrielles perf SCI") 'définit l'onglet source OS TV = OS.Range("D1:M" & OS.Range("D" & Application.Rows.Count).End(xlUp).Row) 'définit le tableau des valeurs TV K = 1 'initialise la variable K For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV 'si la valeur ligne I colonne 10 (=> colonne M) convertie en entier long est égale à DR et n'est pas vide If TV(I, 10) <> "" And CLng(CDate(TV(I, 10))) = DR Then ReDim Preserve TL(1 To 10, 1 To K) 'redimensionne le tableau des lignes TL (10 lignes , K colonnes) For J = 1 To 10 'boucle 2 : sur toutes colonne J du tableau des valeurs TV TL(J, K) = TV(I, J) 'récupère en ligne J de TL la valeur colonne J de TV (= transposition) Next J 'prochaine colonne de la boujcle 2 K = K + 1 'incrémente K (ajoute une colonne à TL) End If 'fin de la condition Next I 'prochaine ligne de la boucle 1 CS.Close False 'ferme le classeur source CS sans enregistrer If K > 1 Then 'si K est supérieure à 1 (au moins une occurrence trouvée) If K = 2 Then ReDim Preserve TL(1 To 10, 1 To 2) 'si Kest égale à deux (une seule occurrence trouvée) permet l'affichage en ligne On Error Resume Next 'définit le classeur destination CD (génère une erreur si ce classeur n'est pas ouvert) Set CD = Workbooks("Performance immobilier.xls") If Err <> 0 Then 'condition : si une erreur a été générée Err.Clear 'supprime l'erreur Workbooks.Open (CH & "Performance immobilier.xls") 'ouvre le classeur CD (c'est pour cela que CH est important !) Set CD = ActiveWorkbook 'définit le classeur source CD End If 'fin de la condition On Error GoTo 0 'annule la gestion des erreurs Set OD = CD.Sheets("données performance") 'définit l'onglet OD 'définit la celllule de destination DEST Set DEST = IIf(OD.Range("A1").Value = "", OD.Range("A1"), OD.Range("A" & Application.Rows.Count).End(xlUp).Offset(1, 0)) 'renvoie dans DEST redimensionnée le tableau TL transposé DEST.Resize(UBound(TL, 2), UBound(TL, 1)) = Application.Transpose(TL) End If End Sub
ThauTheme
Messages postés
1442
Date d'inscription
mardi 21 octobre 2014
Statut
Membre
Dernière intervention
29 juillet 2022
160
14 juin 2016 à 09:29
14 juin 2016 à 09:29
Bonjour,
Remplace la ligne 54 du code :
par :
Ça devrait fonctionner correctement...
Remplace la ligne 54 du code :
TL(J, K) = TV(I, J) 'récupère en ligne J de TL la valeur colonne J de TV (= transposition)
par :
If J = 10 Then TL(J, K) = Format(TV(I, J), "yyyy/mm/dd") Else TL(J, K) = TV(I, J) 'récupère en ligne J de TL la valeur colonne J de TV (= transposition)
Ça devrait fonctionner correctement...
Hayat92
Messages postés
3
Date d'inscription
jeudi 9 juin 2016
Statut
Membre
Dernière intervention
14 juin 2016
14 juin 2016 à 20:21
14 juin 2016 à 20:21
Bonjour,
Ça fonctionne. Merci pour ton aide
À plus.
Ça fonctionne. Merci pour ton aide
À plus.
12 juin 2016 à 16:39
je suis débutante en programmation vba.
j'espère être claire.
Le nom du fichier qui contient la macro msg box (date à saisir) est : "macro perf immo.xlsm"
Le nom du fichier et l'onglet de la recherche est : fichier : "Données trimestrielles de perf SCI.xls"
onglet : "Données trimestrielles perf SCI"
Dans cette onglet, les dates sont en colonne M
je souhaites copier les colonnes D à M contenant la date saisie dans le msgbox.
Le nom du fichier et l'onglet du collage est :
fichier : "Performance immobilier.xls"
onglet : "données performance"
les données sont à coller dans les colonnes A à J ( à la suite des données)
Je n'ai pas la possibilité de vous transmettre les fichiers dsl.
Merci pour votre aide.
12 juin 2016 à 17:06
Là au moins c'est clair. je vais regarder ça...
12 juin 2016 à 17:09