Recherche formule

B

Biquette

Guest
Bonjour à tous,

Je voudrais savoir s'il existe une formule qui à une certaine date transcrit des données d'une cellule Alpha vers une cellule Béta.

Je souhaite que le 25 de chaque mois, les données des cellules de la ligne 16 soient transcrites dans la ligne 20 (pour le 25/09), ligne 21 (pour le 25/10), ... ligne 31 (25/08).

J'espère avoir été claire.

Merci d'avance.

Biquette
 
R

Robert

Guest
Salut Biquette, salut le forum,

Je suis nul en formules mais je te propose ça avec un code VBA à placer dans la feuille qui contient tes données. Comme le 15 septembre est passé j'ai fait commencé en ligne 21 pour le mois d'octobre. Cette macro ne s'exécute pas automatiquement. Il te faudra ouvrir le classeur et déplacer le curseur au moins une fois n'importe où pour qu'elle s'exécute. J'espère que cela te conviendra.

Pour placer ce code au bon endroit fais comme indiqué :
Copie les lignes du code ci-dessous.
Clique du bouton droite de la souris sur l'onglet contenant les données.
Choisis l'option Visualiser le code. Tu es maintenant dans Visual Basic Editor.
Clique dans la grand cadre blanc à droite.
Colle le code.
Alt+F11 pour revenir à Excel.
Sauve le fichier.

'début du code :

Option Explicit
Private test As Byte 'déclare la variable test
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'à chaque changement de sélection
Dim j As Byte 'déclare la variable j
Dim m As Byte 'déclare la variable m
Dim plage As Range 'déclare la variable plage
j = Day(Date) 'définit la variable j (jour de la date en cours)
m = Month(Date) 'définit la variable m (mois de la date en cours)
Set plage = Rows(16) 'définit la variable plage (ligne 16)
If m = test Then Exit Sub 'si le mois = test, sort de la procédure
If j = 25 Then 'condition1 : j=25
If Range("A21").Value = "" Then 'condition2 : A20 vide
test = m 'définit la variable test (=mois en cours)
plage.Copy Destination:=Range("A21") 'copy la ligne 16 en 20
Else 'condition2 A20 non vide
test = m 'définit la variable test (=mois en cours)
plage.Copy Destination:=Range("A65536").End(xlUp).Offset(1, 0) 'copy la ligne 16 dans la première ligne non vide
End If 'fin condition2
End If 'fin condition1
End Sub


'fin du code

À plus,

Robert
 
B

balamore

Guest
Re...

Le nouveau code... qui fonctionne :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'à chaque changement de sélection
Dim j As Byte 'déclare la variable j
Dim m As Byte 'déclare la variable m
Dim plage As Range 'déclare la variable plage
Dim test As Range 'déclare la variable test
Set test = Range("IV1") 'définit la variable test (=IV1)
'j 'ai pris IV1 (dernière cellule de la ligne 1)au hasard,à adapter...
'il faut que ce soit une cellule que tu n'utilises pas dans tes données
j = Day(Date) 'définit la variable j (jour de la date en cours)
m = Month(Date) 'définit la variable m (mois de la date en cours)
Set plage = Rows(16) 'définit la variable plage (ligne 16)
If m = test.Value Then Exit Sub 'si le mois = test, sort de la procédure
If j = 25 Then 'condition1 : j=25
If Range("A21").Value = "" Then 'condition2 : A20 vide
test.Value = m 'définit la variable test (=mois en cours)
plage.Copy Destination:=Range("A21") 'copy la ligne 16 en 20
Else 'condition2 A20 non vide
test.Value = m 'définit la variable test (=mois en cours)
plage.Copy Destination:=Range("A65536").End(xlUp).Offset(1, 0) 'copy la ligne 16 dans la première ligne non vide
End If 'fin condition2
End If 'fin condition1
End Sub

À plus,

Robert
 
B

Biquette

Guest
Bonjour Robert, Bonjour à tous,

J'ai essayé ton programme et cela fonctionne bien comme je le souhaitais.

J'ai une petite réclamation à faire quand même.
Dans ma cellule A16, j'ai écrit 'Total'. Est il possible en lançant ton programme de remplacer la valeur de la cellule A16 par la date d'éxécution ou le mois de l'éxécution? Le plus intéressant se serait le mois.

Merci quand même pour ce que tu as fait.

Biquette.
 
B

Biquette

Guest
Bonjour ChS,

J'ai regardé ton programme et cela me plaît bien tout comme celui de Robert.
Je ne sais pas encore le quel je vais prendre.

Par contre, je ne sais pas comment faire pour cette recommandation que tu me fais :
"Pour que la procédure se lance seule à l'ouverture de ton fichier, copie les 3 lignes du centre dans l'évènement "Open" "
Qu'est ce que l'événement "Open"?

Merci pour ta réponse.

Biquette
 
C

ChristianS

Guest
Re bonjour à tous,
une procédure évènementielle est une action que Excel va réaliser quand un évènement tel que :
- ouverture du fichier
- création d'une feuille
- activation d'une cellule etc.....
se produit.
Pour accéder à l'évènement Open tu fait :
Outils-->Macro-->Visual Basic Editor
puis tu doublecliques sur ThisWorkbook de MicroSoft Excel Object de la fenêtre de gauche. Sur la fenêtre de droite s'affichent les procédures évènementielles déjà écrites (dans notre cas c'est SheetSelectionChange)
Si la procédure ci-dessous

Private Sub Workbook_Open()

End Sub

n'est pas visible, tu cliques sur le menu déroulant face à SheetSelectionChange (contrôle en haut à droite) et tu choisis Open (c'est par ordre alphabétique)et tu y écris pour avoir

Private Sub Workbook_Open()
If Day(Date) = 25 Then
Range("a1").Copy Range("a5")
End If
End Sub

Tu sauvegardes ton fichier. Quand tu l'ouvriras à nouveau un 25 du mois la copie A5 vers A5 se fera AUTOMATIQUEMENT dès l'ouverture du fichier.

A +
Chs
 

Discussions similaires

Statistiques des forums

Discussions
312 559
Messages
2 089 604
Membres
104 225
dernier inscrit
Misterpat63