Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

[Résolu] Placer une date (cellule en déroulant) à l'extérieur d'une feuille

Webperegrino

XLDnaute Impliqué
Supporter XLD
Bonjour,

J'en appelle à vos connaissances car je bloque depuis trois jours sur ce qui suit.
Avec le fichier ci-annexé je n’arrive pas à créer les deux bonnes macros.

1ère macro commencée mais bloquante :
Rappeler des valeurs d’une feuille BD (archive) vers une feuille SAISIE.
Les saisies se font en plusieurs phases. Je dois donc parvenir à les rappeler, les corriger ou les compléter pour les replacer en archives.

En feuille SAISIE vous voyez un bouton « Rappeler un jour & Compl » devant rappeler ces valeurs archivées pour une date choisie en cellule E3 de la feuille SAISIE.

2ème macro qui ne fonctionne pas non plus :
Jeu de date sur deux cellules spécifiques en feuilles SAISIE et feuille FICHE.
Faire en sorte qu’une date placée en feuille SAISIE dans la cellule E3 (un déroulant de dates y figure), se place d’elle-même dans la feuille FICHE en cellule E2.
Je saurai alors comment faire, par effet inverse, pour qu’une date placée dans FICHE se mette aussi dans SAISIE.

Merci à l'avance pour vos éclaircissement et vos éventuelles solutions ou rectifications de mes macros commencées.
Webperegrino
 

Pièces jointes

  • Essai Rappel données.xls
    70.5 KB · Affichages: 57
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Bonjour,

procédons par etapes:

1) les événements que tu utilises ne sont pas les bons: il faut prendre worksheet_Change

si tu gardes tes macros telles quelles.. tu imagines que ca va planter:
je suis en feuille saisie, je change la date, l'événement se déclenche pour modifier la date dans la feuille FICHE
et hop.. l'evenement de FICHE se déclenche à son tour. et .. et .. boucle..
il faut donc ajouter un test pour verifier d'ou vient la modif:

sur la feuille SAISIE
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Name = "SAISIE" Then
    If Target.Address = "$E$3" Then
        Sheets("FICHE").Range("E2").Value = Sheets("SAISIE").Range("E3").Value
    End If
End If
End Sub

sur la feuille FICHE
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If ActiveSheet.Name = "FICHE" Then
    If Target.Address = "$E$2" Then
        Sheets("SAISIE").Range("E3").Value = Sheets("FICHE").Range("E2").Value
    End If
End If
End Sub

j'en ai profité pour corriger les range E3 et E2...

etape suivante: prochain post ;-)
 

vgendron

XLDnaute Barbatruc
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

ensuite,
dans ta macro de rappel:
cette ligne
Code:
col = b.Rows(3).Find(s.Range("E3").Value, , xlValues, xlWhole).Column

bugge.... problème de compatibilité de type??
je n'arrive pas à voir..
quand je vais une comparaison "manuelle" de la date cherchée avec le contenu de la ligne 3.. il me trouve bien la valeur..
mais le .find.. n'en veut pas..

Ha.. quand le format personnalisé de ta feuille BD est modifié en format Date Courte.
la fonction .find trouve quelque chose..
à creuser donc
 
Dernière édition:

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Bonsoir VGendron,
Grand merci pour tes propositions de corrections.
J'expérimente tout cela et te fais part du résultat :
- dans le fichier exemple (du #1),
- puis si c'est concluant, dans mon vrai fichier "usine à gaz' rempli de macros diverses pour le faire fonctionner : il sait par contre très bien y placer les valeurs de la feuille SAISIE à la bonne date dans la feuille BD.

Pour l'affaire du 'Find' en effet ça bloque à cet endroit.
Peut-être nous faudrait-il aborder la recherche des valeurs selon un autre procédé ? je cherche donc aussi de mon côté.
A bientôt pour la suite,
Webperegrino
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Le Forum,
VGendron,
Ta formulation "SAISIE" Then... "$E$3" et "SAISIE" Then ... "$E$3" fonctionne parfaitement !
C'est absolument parfait.
Bravo à toi.

Je continue à chercher pour l'objectif 1,
Webperegrino
 

vgendron

XLDnaute Barbatruc
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Salut,

Voici une petite mise à jour de la macro RappelJ()

Code:
Sub RappelJ()
' RAPPELER pour une date précise les valeurs de Feuille BD et les placer en Feuille SAISIE
'(pour correction ou complément de saisie en feuille SAISIE)
Application.ScreenUpdating = False
Dim dt, c, col1, col2
Dim col As Integer, f As Object, s As Object, b As Object, p As Object
Dim plgAdresse As Range
Set f = Sheets("FICHE")
Set s = Sheets("SAISIE")
Set b = Sheets("BD")
Set p = Sheets("Paramètres")

'f.Unprotect ("")
's.Unprotect ("")
'b.Unprotect ("")
'p.Unprotect ("")
b.Activate 'pour éviter que le set plgAdresse plante, malgré le with b....
'Si la date n'existe pas dans paramètres on sort
With s
    Set dt = Sheets("Paramètres").Range("Date").Find(What:=s.[E3].Value)
    If Not dt Is Nothing Then
        With b
            'on recherche dans BD la colonne où se trouve la DATE RECHERCHÉE 'Sheets("SAISIE").Range("E3").Value
            'Aller recherche la position de la DATE dans la Feuille BD en ligne n° 3
    
            'sur la ligne 3 dans la Feuille BD on trouve la Date
            col = b.Rows(3).Find(s.Range("E3").Value, , xlValues, xlWhole).Column
            col1 = col - 2
            col2 = col - 1
    
            ' Récupérer les données de la ligne 7 à la ligne 45 dans les deux colonnes précédant celle de cette date
            'Plage Feuil SAISIE et Feiuil BD à adapter selon le besoin.
            Set plgAdresse = .Range(Cells(7, col1), Cells(45, col2))
            plgAdresse.Select
            plgAdresse.Copy Destination:=s.Range("C7")
            's.Range("C7").PasteSpecial (xlPasteValues) 'colle les valeurs dans SAISIES
        End With
    End If
End With
         
s.Activate 'pour revenir à la feuille saisie
'f.Protect ("")
's.Protect ("")
'b.Protect ("")
'p.Protect ("")
Application.ScreenUpdating = True
End Sub

Nota: il faut modifier le format de la ligne 3 de la "BD"
j'ai tout mis en format Date Courte.
ensuite, pour les deux colonnes contenant la date, tu peux fusionner. meme si VBA n'aime pas trop ca en général, ici, ca semble fonctionner quand meme...
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

et la.. la macro SvBD

Code:
Sub SvBD()
'Placer à la bonne date dans Feuille BD les valeurs saisies ou corrigées de SAISIE
Application.ScreenUpdating = False
Dim obj, plgAdresse$
'Sheets("SAISIE").Unprotect ("")
'Sheets("BD").Unprotect ("")

With Sheets("SAISIE")
    'on recherche la position de la date indiquée dans la feuille SAISIE en cellule E3
    Set obj = Sheets("Paramètres").Range("Date").Find(What:=.[E3].Value)
    If Not obj Is Nothing Then
        plgAdresse = "C7:E45" 'Plage Feuil SAISIE à adapter selon le besoin.
        'With .Range(plgAdresse)
            '  Sheets("BD").Range(plgAdresse).Offset(0, obj.Row * 5 - 5).Value = .Value
        'End With
        
        .Range(plgAdresse).Copy Destination:=Sheets("BD").Range(plgAdresse).Offset(0, obj.Row * 5 - 5)
        '   Sheets("FICHE").Select
        Sheets("SAISIE").Unprotect ("")
        Sheets("SAISIE").Range("C7:D45").ClearContents 'Plage à adapter si besoin
        Sheets("SAISIE").Range("E3").Select
    End If
End With
'Sheets("SAISIE").Protect ("")
'Sheets("BD").Protect ("")
Application.ScreenUpdating = True
MsgBox "Valeurs transférées en archive", vbInformation, "VALEURS ARCHIVÉES"
End Sub
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Le Forum et VGendron,
Bonjour et merci encore pour ta patience à vouloir m’aider.

J’ai fusionné les cellules E3 :F3 , etc et leur ai donné le format 03/06/14, etc, et pareil dans SAISIE (03/06/14) ou essayé aussi sous forme 3/6, etc
J’ai aussi corrigé SvBD()

J’étais enchanté, à l'essai n°1, de ta rectification proposée dans le Code RappelJ.
Depuis un deuxième essai, la macro a bloqué à nouveau dans le code RappelJ() et toujours sur la ligne
col = b.Rows(3).Find(s.Range("E3").Value, , xlValues, xlWhole).Column

Peux-tu voir le fichier évolué Version2 ci-joint et vérifier de ton côté sur ton ordi : c’est peut-être un problème ne venant pas de ta macro-commande mais de mon ordi ?
Je serais curieux d’en connaître les raisons. On est si près de la réussite... (je vais aussi essayer avec d'autres formats de date 'courte').
Merci encore,
Webperegrino
 

Pièces jointes

  • Essai Rappel données(vers2).xls
    74 KB · Affichages: 33

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Le Forum, VGendron,
Bonjour,
J'ai planché toute la soirée avec les propositions que tu donnais.
Quand je les transpose dans mon fichier original ça coince.
Le fichier doit rester en .xls et continuer à fonctionner sous Excel2003.
Je m'aperçois que la bascule de la date saisie ne se fait pas entre les deux feuilles SAISIE et FICHE.
J'ai amélioré mes feuilles pour une meilleure cohérence : les codes devraient donc maintenant transférer la valeur de cellule E3 d'une feuille vers la cellule E3 de l'autre - et non plus Cellule E3 vers Cellule E2 - et inversement.

En module 1, le beau code RappelJ() est bloquant.

VGendron, je te fais une proposition :
Accepterais-tu de recevoir sur ta correspondance privée mon fichier original avec tes corrections pour étudier le problème ?
Ce serait peut-être plus simple ; nous mettrions ensuite sur le Forum les raisons pour lesquelles les macros plantent ou sont inopérantes.
Webperegrino
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Bonjour,

Je veux bien, mais à mon avis, ca ne va rien donner de plus.; surtout que moi, je suis en Xl2007..
je pense que tu as plus intérêt à rester ici sur ce forum.. il y a beaucoup plus de monde

Je viens de refaire un essai et tout fonctionne bien chez moi: le report de la date de SAISIE vers FICHE et vice versa.
et la macro "RappelJ" également: lancée plusieurs fois de suite.

ce que j'ai quand meme fait pour etre sur, juste avant: c'est:
Selection E3 feuille Saisie: Format "Date Courte" la date apparait sous la forme 04/06/2014 (pas de mercredi ni de 04/06)
selection E2 feuille FICHE: Format "Date Courte"
selection de toute la ligne 3 feuille BD: format date courte: et les cellules de dates sont fusionnées 2 à 2..
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Bonjour VGendron,
D'accord pour continuer ici et ne pas te transmettre l'original.

Pas plus de résultat avec ceci :
J'ai tout placé en format de ces cellules en "Date" + "Type" + "*14/03/2001".
Sur la ligne 3 en feuille BD, j'ai simplifié : uniquement une cellule à chaque fois : E3 pour 1er jour, J3 pour 2ème, ... jusqu'à AX3 pour la dernière (et sur la cellule adjacente du dessus (E2, J2,... AX2) paraît le jour correspondant affiché en 'Lundi'...etc
Ainsi je n'ai plus le problème de fusionnement de deux cellules.
Merci
Webperegrino
 
Dernière édition:

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Le Forum, VGendron,
Bonsoir,
Vgendron, j'ai trouvé le moyen de faire fonctionner la 1ère macro RappelJ() !

Il me suffisait de neutraliser les deux lignes suivantes et le End If correspondant :
'Set dt = p.Range("Date").Find(What:=s.[E3].Value)
'If Not dt Is Nothing Then
.../...
'End If

Il ne reste donc plus qu'à trouver pourquoi la bascule de date E3-SAISIE / E3-FICHE ne s'actualise pas (2ème Code adapté dans Feuille FICHE et Feuille SAISIE.

Cette discussion est donc satisfaite à 50 % !
Cordialement à vous,
Webperegrino
 

vgendron

XLDnaute Barbatruc
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Bonjour

Je ne comprend pas. dans ton post #5 tu disais que ca marchait parfaitement, et maintenant non?
 

Webperegrino

XLDnaute Impliqué
Supporter XLD
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Le Forum, VGendron,
Bonjour,
Oui j'ai trouvé cela étrange également.
Lors d'un premier essai concluant j'avais été trop rapide dans mon jugement.
Puis en ayant fermé et réouvert l'application, c'est à ce moment-là que j'ai constaté que la macro ne fonctionnait plus, tant en version 2007 qu'en version 2003 de Excel.
Je ne désespère pas et je continue à faire des recherches pour que la codification soit infaillible dans son fonctionnement.
Merci de t'être inquiété de ce problème.
A bientôt pour la suite des événements.
Webperegrino
 

Docmarti

XLDnaute Occasionnel
Re : Rappeler par macro des valeurs d'une autre feuille en fonction d'une date en cri

Bonjour Webperegrino, vgendron, Le forum

Deux solutions pour chercher et trouver une valeur de type DATE avec FIND:

1) Utiliser xlFormulas au lieu de xlValues. xlFormulas reconnait tous les formats de type DATE dans le champ de recherche:

Code:
col = b.Rows(3).Find(s.Range("E3").Value, , xlFormulas, xlWhole).Column

2) Ou utiliser xlValues, mais transformer d'abord le format de toutes les dates du champ de recherche en "m/d/yyyy" car c'est le seul format que reconnait FIND avec xlValues quand la valeur recherchée est de type DATE:

Code:
 b.Rows(3).NumberFormat = "m/d/yyyy"
            col = b.Rows(3).Find(s.Range("E3").Value, , xlValues, xlWhole).Column


Cordialement
Docmarti
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…