adapter macro

christine854

XLDnaute Junior
bonjour a tous

j'ai une macro que je souhaite adapter pour un fichier

j'ai commencé a l'adapté mais je coince sur certains point
voici la macro
Option Explicit

Dim tablo, fb As Worksheet, ft As Worksheet, cell As Range, dte As Date, i&

Sub CONDITION ()
'on defini les variables
Dim Valeur_Test As String
Dim DerniereLigne As Integer
Dim Lig

Set ft = Sheets("TEST_VALIDATION")
Set fb = Sheets("STOCKAGE_DES_DONNEES")
'pour une lecture plus rapide des données dans le tableau résultat
tablo = ft.Range("Q2:Y" & ft.Range("Q" & Rows.Count).End(xlUp).Row)


For i = 2 To UBound(tablo, 1)
Set cell = fb.Range("A2:A" & fb.Range("A" & Rows.Count).End(xlUp).Row).Find(tablo(i, 1), LookAt:=xlWhole)
If Not cell Is Nothing Then
If IsDate(cell.Offset(0, 1)) Then
'Si le test est ok alors on test la Premières condition
If tablo(i, 25) = "L" Or "J" _
And Month(cell.Offset(0, 1)) = Month(Date) _
And Year(cell.Offset(0, 1)) = Year(Date) Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(cell.Offset(0, 1)), Month(cell.Offset(0, 1)) + 5, 1)

'puis la Deuxièmes conditions
ElseIf tablo(i, 25) = "K" And Month(cell.Offset(0, 1)) = Month(Date) _
And Year(cell.Offset(0, 1)) = Year(Date) Then
ft.Range("Q" & i & ":Y" & i).Copy ft.Range("AD" & i)
cell.Offset(0, 1) = "cumule " & cell.Offset(0, 1)

End If

'puis la Troisièmes conditions
ElseIf tablo(i, 19) > 80 And cell.Offset(0, 1) Like "cumule*" Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(Date), Month(Date) + 5, 1)



End If
'on test si l'identifiant existe Sinon, on l'ajoute à la liste avec la date de fin
Else
Cells(DerniereLigne + 1, 1).Value = Valeur_Test
End If

Next i

End Sub


je coince sur : (j'ai mis des commentaire a coté des ligne ou je coince)


For i = 2 To UBound(tablo, 1)
Set cell = fb.Range("A2:A" & fb.Range("A" & Rows.Count).End(xlUp).Row).Find(tablo(i, 1), LookAt:=xlWhole)
If Not cell Is Nothing Then
If IsDate(cell.Offset(0, 1)) Then


If tablo(i, 25) = "L" Or "J" _
And Month(cell.Offset(0, 1)) = Month(Date) _ 'doit tester dans la feuille fb
And Year(cell.Offset(0, 1)) = Year(Date) Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(cell.Offset(0, 1)), Month(cell.Offset(0, 1)) + 5, 1) 'doit saisir dans la feuille fb


ElseIf tablo(i, 25) = "K" And Month(cell.Offset(0, 1)) = Month(Date) _
And Year(cell.Offset(0, 1)) = Year(Date) Then 'la date est dans la feuille fb
ft.Range("Q" & i & ":Y" & i).Copy ft.Range("AD" & i)
cell.Offset(0, 1) = "cumule " & cell.Offset(0, 1) 'doit être saisie dans la feuille fb


ElseIf tablo(i, 19) > 80 And cell.Offset(0, 1) Like "cumule*" Then 'cumule est dans la feuille fb
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(Date), Month(Date) + 5, 1) 'saisie de la date dans la feuille fb

la ou j'ai mis des commentaires c'est là ou j'ai mes données mais je ne suis pas sur que dans les conditions ça correspond bien
 

christine854

XLDnaute Junior
Bon j'ai réussi a corriger une partie de mes erreurs mais je coince sur deux choses:

la premiere et que j'ai rajoutée une condition mais j'ai pas du le faire correctement

la deuxieme et que je souhaite que si l'identifiant n'existe pas dans la colonne A feuille stockage des données on le rajoute avec saisie de la date (mm/yyyy) mois en cours + 5 dans la colonne B mais je ne sais pas trop comment faire j'ai plein de message d'erreur a chaque fois

voila le code
Code:
Option Explicit

Dim tablo, fb As Worksheet, ft As Worksheet, cell As Range, dte As Date, i&

Sub CONDITION ()
'on defini les variables
Dim Valeur_Test As String
Dim DerniereLigne As Integer
Dim Lig

Set ft = Sheets("TEST_VALIDATION")
Set fb = Sheets("STOCKAGE_DES_DONNEES")

tablo = ft.Range("Q2:Y" & ft.Range("Q" & Rows.Count).End(xlUp).Row)


For i = 2 To UBound(tablo, 1)
Set cell = fb.Range("A2:A" & fb.Range("A" & Rows.Count).End(xlUp).Row).Find(tablo(i, 1), lookat:=xlWhole)
If Not cell Is Nothing Then
If IsDate(cell.Offset(0, 1)) Then

If tablo(i, 9) = "L" _
And Month(cell.Offset(0, 1)) = Month(Date) - 1 _
And Year(cell.Offset(0, 1)) = Year(Date) Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(cell.Offset(0, 1)), Month(cell.Offset(0, 1)) + 5, 1)


ElseIf tablo(i, 9) = "J" _
And Month(cell.Offset(0, 1)) = Month(Date) - 1 _
And Year(cell.Offset(0, 1)) = Year(Date) Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(cell.Offset(0, 1)), Month(cell.Offset(0, 1)) + 5, 1)
End If


ElseIf tablo(i, 9) = "K" And Month(cell.Offset(0, 1)) = Month(Date) - 1 _
And Year(cell.Offset(0, 1)) = Year(Date) Then
ft.Range("Q" & i & ":Y" & i).Copy ft.Range("AD" & i)
cell.Offset(0, 1) = "cumule " & cell.Offset(0, 1)
End If


ElseIf tablo(i, 3) > 80 And cell.Offset(0, 1) Like "cumule*" Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(Date), Month(Date) + 5, 1)

Else
'j'aimerai je souhaite que  si l'identifiant n'existe pas dans la colonne A feuille stockage des données on le rajoute avec saisie de la date (mm/yyyy) mois en cours + 5 dans la colonne B
Next i
  
End Sub

Besoin d'un coup de pouce svp
 

christine854

XLDnaute Junior
j'ai retrouvée excel pratique le forum l'auteur s'appel gmb j'ai adapté mon fichier a ça macro a quelque chose pret la finalité est quasi identique mais la personne qui a fait la demande initial n'a pas donné suite on dirais

j'ai réussi a comprendre le "tablo" je m'étais trompé dans l'adresse des colonnes (c'est a partir de la première colonne du tableau)
par contre j'ai voulu rajouté une condition mais je mis suis mal pris je pense, j'ai un message d'erreur

et le fait de rajouter un identifiant qui n'est pas dans la liste en fin de colonnes m'arrangerai (pour moi c'est des code produit)

je sais pas si mes explications sont compréhensibles :)

ps: le fichier n'est ni plus ni moins que celui qui a été posté sur l'autre discussion j'ai trop de données sur mon fichier que je ne pas posté

j'aurais juste a changer pour mon fichier au boulot
 

christine854

XLDnaute Junior
j'ai réussi a corriger mes erreurs mais je coince toujours sur le fait que si l'identifiant n'existe pas dans la colonne A feuille stockage des données on le rajoute dans cette même colonne avec saisie de la date (mm/yyyy) mois en cours + 5 dans la colonne B (a la suite des données existante)

Code:
Option Explicit

Dim tablo, fb As Worksheet, ft As Worksheet, cell As Range, dte As Date, i&

Sub CONDITION ()
'on defini les variables
Dim Valeur_Test As String
Dim DerniereLigne As Integer
Dim Lig

Set ft = Sheets("TEST_VALIDATION")
Set fb = Sheets("STOCKAGE_DES_DONNEES")

tablo = ft.Range("Q2:Y" & ft.Range("Q" & Rows.Count).End(xlUp).Row)


For i = 2 To UBound(tablo, 1)
Set cell = fb.Range("A2:A" & fb.Range("A" & Rows.Count).End(xlUp).Row).Find(tablo(i, 1), lookat:=xlWhole)
If Not cell Is Nothing Then
If IsDate(cell.Offset(0, 1)) Then

If tablo(i, 9) = "L" _
And Month(cell.Offset(0, 1)) = Month(Date) - 1 _
And Year(cell.Offset(0, 1)) = Year(Date) Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(cell.Offset(0, 1)), Month(cell.Offset(0, 1)) + 5, 1)


ElseIf tablo(i, 9) = "J" _
And Month(cell.Offset(0, 1)) = Month(Date) - 1 _
And Year(cell.Offset(0, 1)) = Year(Date) Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(cell.Offset(0, 1)), Month(cell.Offset(0, 1)) + 5, 1)



ElseIf tablo(i, 9) = "K" And Month(cell.Offset(0, 1)) = Month(Date) - 1 _
And Year(cell.Offset(0, 1)) = Year(Date) Then
ft.Range("Q" & i & ":Y" & i).Copy ft.Range("AD" & i)
cell.Offset(0, 1) = "cumule " & cell.Offset(0, 1)
End If


ElseIf tablo(i, 3) > 80 And cell.Offset(0, 1) Like "cumule*" Then
fb.Range("C" & cell.Row & ":H" & cell.Row).Delete shift:=xlUp
cell.Offset(0, 1) = DateSerial(Year(Date), Month(Date) + 5, 1)

Else
MsgBox "test" 'j'aimerai je souhaite que  si l'identifiant n'existe pas dans la colonne A feuille stockage des données on le rajoute avec saisie de la date (mm/yyyy) mois en cours + 5 dans la colonne B
End If

Next i
End Sub

je pense ne pas avoir fait d'erreur pour les conditions ???
 

Modeste

XLDnaute Barbatruc
Bonjour christine854,
Salut JM :)

Comme l'ami Staple1600 semblait chercher d'autres volontaires (celui-là, je te jure, entre les retransmissions des concerts de Chantal Goya, ses vaisselles, les films qu'il ne veut pas rater et son repassage, faut arriver à le coincer! :D) ... bref, je me suis dit que ça ne coûtait rien de jeter un œil.
... Bon j'y ai même jeter les deux, mais sans arriver à bien comprendre!

Ce qui serait bien, ce serait de reprendre, point par point (et en n'oubliant pas que nous ne connaissons ni ton fichier, ni ton contexte de travail) ce que la macro doit faire.
Les bouts de code que tu as assemblés devraient être scrupuleusement triturés pour comprendre (mais il y a des End If, par exemple, placés à des endroits curieux; on ne sait donc pas quelle conclusion il faut en tirer?)
Quand tu écris: "il peut avoir plusieurs ligne avec le même identifiant", précise dans quelle feuille!? De même, quand tu parles de "suppression des groupes de cellule (C a H ) de la ligne de l’identifiant" tu veux vraiment supprimer les cellules et décaler les données qui sont plus bas vers le haut :eek: ... ou alors tu veux simplement effacer leur contenu?
Si tu ajoutes "cumule" à la suite d'une date ... tu ne sauras plus faire de calculs sur cette date (qui n'en sera d'ailleurs plus une!?)
Pour ce qui est de: "avec saisie de la date (mm/yyyy) mois en cours + 5" en clair, ça voudrait dire que si un identifiant n'existe pas, on le rajoute ce mois-ci avec comme mention 03/2017 ?
 

Staple1600

XLDnaute Barbatruc
Bonsoir à tous

Ah de suite, je me sens moins seul ;)
Bonsoir Modeste ;)
Où tu as été péché que (puis-je l'écrire?) j'avais un penchant gérontophile pour satisfaire mes oreilles (surtout la gauche) ?
Quitte à choisir, je préfère me fader l'intégrale de Mireille Mathieu que d'écouter les affres d'un lapin ou d'un chasseur, chanté par une dame déguisée en becassine ;)
 

christine854

XLDnaute Junior
alors j'ai refait un fichier avec des couleur pour mieux comprendre et en prenant en compte les remarques pertinentes de Modeste du coup j'ai fait quelques modif.
C'est des données que je traite mensuellement (exemple données de septembre traités en octobre etc ..)

Dans le fichier la couleur vert et jaune correspond a "L" (smiley pas content) et "J" (smiley content) dans la feuille "test validation" (pour mieux visualiser)

Donc si j'ai "L ou J" dans la colonne Y de cette feuille et que dans la feuille "stockage de données" colonnes B pour l'identifiant correspondant (colonnes A ) j'ai la date (mm/yyyy) -1 du mois en cours ou si j'ai la mention "cumule" dans la colonne C alors suppression (des cellules décalé vers le haut) dans les colonnes "D a I" et "K a M" de l'identifiant correspondant et on change la date dans la colonnes B (mois en cours + 5) et suppression de la mention "cumule" dans la colonne C
et dans la feuille "test validation" pour "L" remplissant la condition copier de "Q a Y" coller en AD3
pour "J" remplissant la condition copier de "Q a Y" coller en AN3
sauf si la date n'est pas atteinte (exemple 12/2016) et aucune mention "cumule" dans ce cas toutes les valeur reste

si j'ai "K " dans la colonne Y de la feuille "test validation" et que dans la feuille "stockage de données" colonnes B pour l'identifiant correspondant (colonnes A ) j'ai la date (mm/yyyy) -1 du mois en cours alors on rajoute la mention "cumule" dans la colonnes C (dans la feuille "stockage de données") et toutes les valeur reste ainsi que la date initiale (colonne A)
et dans la feuille "test validation" pour "K" remplissant la condition copier de "Q a Y" coller en AX3



Si dans la feuille "test validation" j'ai un identifiant qui n'existe pas dans la colonne A de la feuille "stockage de données"
alors il faudrait le rajouter a la fin de la liste avec en colonne B la date (format mm/yyyy) du mois en cours + 5 (exemple on est en octobre donc la date sera 03/2017)

pour répondre a tes question Modeste :

Quand tu écris: "il peut avoir plusieurs ligne avec le même identifiant", précise dans quelle feuille!
c'est dans la feuille "stockage de données" (de D a I)

tu parles de "suppression des groupes de cellule (C a H ) de la ligne de l’identifiant"
je veut supprimer les cellules et décaler les données qui sont plus bas vers le haut


Si tu ajoutes "cumule" à la suite d'une date ... tu ne sauras plus faire de calculs sur cette date (qui n'en sera d'ailleurs plus une!?)

J'ai ajoutée une colonne pour la mention "cumule" (colonne C feuille "stockage de données")

Pour ce qui est de: "avec saisie de la date (mm/yyyy) mois en cours + 5" en clair, ça voudrait dire que si un identifiant n'existe pas, on le rajoute ce mois-ci avec comme mention 03/2017
Si dans la feuille "test validation" j'ai un identifiant qui n'existe pas dans la colonne A de la feuille "stockage de données"
alors il faudrait le rajouter a la fin de la liste avec en colonne B la date (format mm/yyyy) du mois en cours + 5 (exemple on est en octobre donc la date sera 03/2017)

 

Pièces jointes

  • Classeurtest.xlsm
    41.2 KB · Affichages: 97

Modeste

XLDnaute Barbatruc
je sais pas si la macro que j'ai est la plus adapté pour ce que je souhaite faire
Honnêtement, je ne sais pas non plus :(
Tu expliques les choses comme si on travaillait ensemble sur ton fichier depuis toujours. Il y a des phrases de ton dernier message que j'ai relues 3 fois avant d'entrevoir un peu de lumière ... et encore, pour "sauf si la date n'est pas atteinte (exemple 12/2016) et aucune mention "cumule" dans ce cas toutes les valeur reste" je ne sais pas à quelle condition dans ce qui précède l'exclusion s'applique. Je ne sais pas non plus à quoi sert ton test IsDate(cell.Offset(0, 1)) ... Que pourrait-il y avoir d'autre? une cellule vide, du texte, une donnée numérique, etc?
Une solution pourrait être de "décomposer" ton problème en parties distinctes et de les prendre une à la fois (ou attendre que quelqu'un aie du temps et comprenne ta demande)

Ce qui m'inquiète aussi c'est que si des cas particuliers ou simplement certains termes d'une vérification ne sont pas pris en charge, tu risques de "bousiller" ton fichier (en décalant des plages de cellules, par exemple ... manipulation que tu ne saurais plus annuler par la suite!)
 

christine854

XLDnaute Junior
pour les date je fonctionne en période de quadrimestre en gros si j'ai pas fini le quadrimestre je continue de cumuler des donné
si j'ai L ou J c'est que j'ai atteins mes taux mais je doit vérifier que mon quadrimestre est fini pour les valider donc je vient vérifier la date
par contre si un de mes taux n'a pu être atteint (si j'ai K) alors je doit continuée de cumuler jusqu’à atteindre mon taux (la mention cumule) et des que c'est bon (je passe soit en J ou L ) je repart pour cumulé un nouveau quadrimestre

des que j'ai atteint mes taux je repart a zéro pour cumuler de nouvelle données donc je n'ai plus besoin des anciennes (suppression de "D à I") et ("K à M")

je fais ça pour chaque identifiant j'ai des données mensuel que je clôture a chaque quadrimestre (non calendaire pour certain)

il ne peut pas avoir d'autre données (ou de cas particulier) les données ne peuvent être que sous le format dans le fichier
 

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 206
Messages
2 086 210
Membres
103 158
dernier inscrit
laufin