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

perte des donnes lors de lancement de macro

devimen2

XLDnaute Nouveau
Bonjour

J'ai besoin de votre aide pour résoudre mon problème s'il vous plait .

J'ai une macro Recap1 qui permet d’insérer des données automatiquement dans une feuille FL2 à partir des informations qui se trouvent dans une feuille FL1 .

Cette Macro Recap1 que un membre de ce groupe m'a déja aidé "@ vgendron " avant que je le remercie beaucoup déja .

'lien vers la poste pour vous rappelez de la conversation et la macro recap 'https://www.excel-downloads.com/threads/gérer-un-calendrier.20023887/page-2

la macro recap1 fonctionne sauf que j'ai 3 soucis

"la macro se trouve dans le module macro_recap_vgendron" dans le fichier ci-joint

En fait , j'ai 3 Soucis :
  • le premier souci: l'insertion des dates automatique, dans la colonne C du deuxieme onglet , qui se rempli a partir des "X" dans le calendrier de premier onglet, "insertion des dates oui mais pas les correctes dates"
  • le deuxième souci : quand je lance ma macro recap1 , j'ai une perte des formules qui se trouvent dans les colonnes N; O; P ;Q; R .
  • le troixieme souci ; j'ai insertion des données oui , mais pas toutes , je pense a cause de cette instruction :
With FL1
LastCol = .Cells(6, .Columns.Count).End(xlToLeft).MergeArea.Offset(0, 1).Column - 1
LastLine = .UsedRange.Rows.Count
TabloFL1 = .Range("B8:AG" & LastLine).Value
On Error Resume Next 'permet de bypasser les erreurs qui apparaissent lorsqu'on va vouloir créer un trajet déjà existant
For i = LBound(TabloFL1, 1) To UBound(TabloFL1, 1)
'sur la colonne B, on récupère les numéros de trajet UNIQUE avec leur position dans le tableau "TabloFL1"
listeTrajets.Add TabloFL1(i, 1), i 'créer une liste sans doublon des trajets de la colonne B = 1ere colonne du tablo
Next i
End With

En fait ; je voudrai insérer toutes les donnes mais sans doublons c'est a dire avant d'inserer ,il faut verifier


' verifier sur la feuille 1 si les données de colonnes B ; C; S ;T; U ;X ;AC ;AD se repetents sur autre ligne alors inserer qu'une seule ligne dans l'autre feuille recap .

J'espere que j'ai bien expliquer les choses .

'j'ai expliquer par des commentaires dans le code recap les soucis .

Je vous remercie d'avance.
 

Pièces jointes

  • Soft question forum .xlsm
    2.9 MB · Affichages: 39
Dernière édition:

devimen2

XLDnaute Nouveau
Bonjour Vgendron ,

Merci pour votre aide

Pour le problème des dates alors c'est résolu merci beaucoup .(j'ai ajouté les deux lignes dans les deux macros et ça fonctionnent ).(sujet date automatique résolu)
Alors pour ma façon d’écrire le code , désolé que j'arrive pas a bien les ecrires comme c'est la premiere fois que je code toute un projet en informatique et je suis seule sur ce projet , je suis débutante .(premiere experience en vba )

Concernant tes macros , j'ai gardé presque toutes tes macros , il y'a que remplir calendrier et recap que je me suis basé sur ton aide pour les corriger , c .

toutefois , j'ai un probleme avec recap malgré toutes les rectifications .

J'ai ce bug que je vous prie de m'aider s'il vous plait , je vous explique dans un autre message le probleme .
 

Pièces jointes

  • bug.png
    14.9 KB · Affichages: 38

devimen2

XLDnaute Nouveau
en fait , je pense que j'ai un probleme avec l'instruction range
j'ai rentree 3 lignes des données et j'ai choisi le pole b dans la liste déroulante ou aussi si je choisi autre pole(onglet1) , j'ai eu ce bug et aussi j'ai des N/A partout
With FL2 'on efface la feuille "Recap" sauf les colonnes L,O,P,Q,R,W,AB,AG,AL,AQ avant d'inserer les données
TabRecap = .UsedRange.Offset(8, 0).Formula
For i = LBound(TabRecap, 1) To UBound(TabRecap, 1)
For j = LBound(TabRecap, 2) To UBound(TabRecap, 2)
If j <> 1 And j <> 12 And j <> 14 And j <> 15 And j <> 16 And j <> 17 And j <> 18 And j <> 23 And j <> 28 And j <> 33 And j <> 38 And j <> 43 Then
TabRecap(i, j) = ""
End If
Next j
Next i
.Range("A9").Resize(UBound(TabRecap, 1), UBound(TabRecap, 2)) = TabRecap
End With

With FL2
FinFeuille = .Range("B" & .Rows.Count).End(xlUp).Row

For nb = 9 To FinFeuille
'si on a une date dans S alors renvoyer la date dans Y sans l'effacer de S

If .Range("S" & nb) <> "" Then .Range("Y" & nb) = .Range("S" & nb)
'si on a une date dans AD alors renvoyer la date dans S et Y sans l'effacer de AD

If .Range("AD" & nb) <> "" Then
.Range("S" & nb) = .Range("AD" & nb)
.Range("Y" & nb) = .Range("AD" & nb)

End If
Next nb

End With

Je vous joint le nouveau fichier avec le bug .
Merci pour votre réactivite
 

devimen2

XLDnaute Nouveau
je vous remercie énormément pour votre aide et cette reactivité ,
vous trouvez ci joint le fichier .
excusez moi, J'ai fais des modifications sur le fichier pour la confidentialité .
Je pars en vaccances pour 10 jours , je regarde votre solution des mon retour
l'outil fonctionne ,avec tous les macros sauf celle de recap "j'ai tojours des bugs avec cette macro
'j'ai modifié la colonne K et L en format date , ou il y a les N/A à partir de la ligne 260, j'ai plus de bug , donc je doute que le bug viens de cette instruction celle la
With FL2
FinFeuille = .Range("B" & .Rows.Count).End(xlUp).Row

For nb = 9 To FinFeuille
'si on a une date dans S alors renvoyer la date dans Y sans l'effacer de S

If .Range("S" & nb) <> "" Then .Range("Y" & nb) = .Range("S" & nb)
'si on a une date dans AD alors renvoyer la date dans S et Y sans l'effacer de AD

If .Range("AD" & nb) <> "" Then
.Range("S" & nb) = .Range("AD" & nb)
.Range("Y" & nb) = .Range("AD" & nb)

End If
Next nb



End With

Je compte sur tes connaissances en vba pour m'aider a reussir cette macro .
 

Pièces jointes

  • projet recap.xlsm
    702.1 KB · Affichages: 20
  • bug.png
    14.9 KB · Affichages: 39
  • bug n 1.PNG
    6.4 KB · Affichages: 41

vgendron

XLDnaute Barbatruc
Tu te moques de moi???
la macro récap n'est PAS DU TOUT celle que j'ai écrite... elle est ou la "Recap2" ?
pour faire simple:
JE NE TOUCHERAI PLUS à ton fichier TANT que tu n'aura pas mis les BONNES macros
et refait TOUTE l'indentation correctement !

bonnes vacances
 

devimen2

XLDnaute Nouveau
Bonjour Vgendron ,

Désole pour ma reponse tardive, j'etais en vacances.

Je peux pas moquer de toi aprés ton aide sur mes macros et je suis trés reconnaissante , je t'ai disais déja que j'ai utilisé ma macro recap comme c'est plus pratique pour moi et en plus j'ai pas trouvé la fonction verif , je me suis déja sur ta macro pour changé la mienne , je te remercie .....

Desolée que j'ai pas utilisé ta macro Recap 2 comme j'ai pas trouvée la fonction Verif
dans ta macro ,

Function verifier(FL1 As Worksheet, col1 As String, trass As String, col3 As String, col4 As String, col44 As String, col7 As String, col6 As String, col5, w As Integer)

If (w = 8) Then
verifier = False
Else
p = False
For j = 8 To w - 1
If ((FL1.Cells(j, 2) Like col1) And (FL1.Cells(j, 3) Like trass) And (FL1.Cells(j, 19) Like col3) And (FL1.Cells(j, 20) Like col4) And (FL1.Cells(j, 21) Like col44) And (FL1.Cells(j, 24) Like col7) And (FL1.Cells(j, 29) Like col6) And (FL1.Cells(j, 30) Like col5)) Then
p = True
Exit For
End If
Next j
verifier = p
End If
End Function
For NoLig = 8 To Split(FL1.UsedRange.Address, "$")(4)
w = NoLig

trass = FL1.Cells(NoLig, 3)
col1 = FL1.Cells(NoLig, 2)
col3 = FL1.Cells(NoLig, 19)
col4 = FL1.Cells(NoLig, 20)
col44 = FL1.Cells(NoLig, 21)
col7 = FL1.Cells(NoLig, 24)
col5 = FL1.Cells(NoLig, 30)
col6 = FL1.Cells(NoLig, 29)

If (verifier(FL1, col1, trass, col3, col4, col44, col7, col6, col5, w) = False) Then
ALORS INSERER LES DONNES


en fait , je voudrai avoir tous les numeros de tajet avec doublons mais avant d'inserer ;il faut verifier ," ma fonction verif dans ma macro recap exprime ce que je voudrai avoir "
'dans cette instruction vous supprimer des numeros des trajets que j'en ai besoin
With FL1
LastCol = .Cells(6, .Columns.Count).End(xlToLeft).MergeArea.Offset(0, 1).Column - 1
LastLine = .UsedRange.Rows.Count
TabloFL1 = .Range("B8:AG" & LastLine).Value
On Error Resume Next 'permet de bypasser les erreurs qui apparaissent lorsqu'on va vouloir créer un trajet déjà existant
For i = LBound(TabloFL1, 1) To UBound(TabloFL1, 1)

'sur la colonne B, on récupère les numéros de trajet UNIQUE avec leur position dans le tableau "TabloFL1"
listeTrajets.Add TabloFL1(i, 1), i 'créer une liste sans doublon des trajets de la colonne B = 1ere colonne du tablo
Next i
End With

Sinon j'ai utilisé toutes vos macros J'ai meme modifier la ligne 5 du premier onglet et j'ai convaincu mon encadrant , je mis toutes tes macros avec tes commentaires .


Donc , tu trouves ci-joint le fichier avec la macro recap 2 , si c'est possible ,je sais pas comment adapter la fonction verif dans la macro recap2, et bravo ta macro recap execute trés vite .

Je m'excuse vraiment , je suis trop stressée pour mon projet et tu es le seul qui est entrain de m'aider et repondre a mes questions .
Je te remercie énormément pour ton aide .Sur ce classeur, il y' a tout les macros qui fonctionnetn sauf la macro recap , ça excute mais , parfois , il y' a suppressions des formules dans les colonnes N,O,P,Q,R ou bien comme montre la photo ci-joint , ou bien le bug la methode Range a ete echoué .

Je reste a ta disposition pour plus d'information ou plus d'explication .
Merci
 

Pièces jointes

  • recap forum .xlsm
    3 MB · Affichages: 21
  • bug.png
    14.9 KB · Affichages: 35
  • bug recap.PNG
    25.5 KB · Affichages: 37
Dernière édition:

devimen2

XLDnaute Nouveau
Rebonjour Vgendron,

En fait , j'ai remarqué aussi qu'il y ' un probleme au niveau des dates du calendrier au premier onglet(01-02-03....31 , , je pense qu'il y a un bug au niveau des formules , ce qui influence sur ta macro recap . Ci-joint l'exemple de ta macro recap 2 mais sur un ancien fichier , parce que quand j'ai apporté" les modifications sur le nouveau fichier qui se trouve dans le message d'avant , j'ai eu un bug au niveau recap .

J'ai colorer en jaune le probleme des dates de calendrier.
Vous pouvez comprendre maintenant pourquoi ,j'ai utilisé toutes les macros sauf recap parce que j'ai pas arrivé a l'adapter ,j'espere vraiment qu'on trouve solution comme ta macro ne met pas beaucoup de temps pour exécuter

Mais vraiment c'est impressionnant ta macro recap 2 comment s’exécute en 2 seconde; malheureusement que j'arrive pas a le modifier en integarant la fonction verif et en corrigant le probleme des dates au niveau du premier onglet pour le calendrier .

J'ai laissé que la macro recap 2 pour vous expliquer le souci ; et j'ai gardé toutes les macros dans le calsseuer qui se trouve dans le message d'avant .
J'éspere que vous me repondez et que j'ai fais comme vous m'avez demandé

Dans l'attente de votre aide
Merci Vgendron
 

vgendron

XLDnaute Barbatruc
Bonjour..
je ne comprend plus rien à ce que tu fais ni ce que tu veux.....

J'ai colorer en jaune le probleme des dates de calendrier.
C'est quoi le problème??
après le 30 juin.. c'est bien le 1er juillet puis 2 juillet etc etc.....??
Tu supprimes des macros qui fonctionnent pour en remettre d'autres qui ne servent plus à rien.. et tu changes trop de choses en meme temps....
 

devimen2

XLDnaute Nouveau
Bonjour Vgendron;

Merci pour votre réponse. Désolé j'étais parti pendant 1 mois du travail comme j'étais malade .

Je compte vraiment sur votre aide pour résoudre mon problème .

Excuse moi , si j'ai pas bien expliqué les choses. En fait pour les dates c'est bon mais pour les jours non on trouve lundi après mercredi .J'ai bien expliqué le problème dans les conversation.
J'ai fait un point avec mon encadrante . Elle m'a dit que c'est ok pour tout les macros et ça fonctionnent très bien .Sauf que pour Recap , j'arrrive pas à trouve le bon algorithme .

Je compte vraiment sur votre aide et je vous promets que ça sera mon dernier demande .

J'ai bien expliqué et mettre tous les macros .

Je reste a votre disposition pour plus d'information .
 

vgendron

XLDnaute Barbatruc
Bonjour
En fait pour les dates c'est bon mais pour les jours non on trouve lundi après mercredi

Je ne comprend toujours pas le problème des dates...
dans le fichier. tu as coloré en jaune les cellules IK6 et IL6 de la feuille "Saisie des fermetures"

pour moi, les dates sont bonnes..
IK c'est le 30 juin et c'était un Samedi
suivi du 01 juillet qui est le dimanche
puis lundi 02 juillet....

où vois tu un Lundi après mercredi??
 

devimen2

XLDnaute Nouveau
Merci Vgendron pour ton retour rapide,

Le probleme c'est que le mois de juin contient 30 jours, or il y'a le 30juin après le 1 juin dans le calendrier c'est qu'il faut pas.
C'est pour ça comme je vous ai expliqué que j'ai toujours un probleme pour la macro recap
,y'a pas une solution pour qu'on passe pas par cette methode piur construire la date, on s'appuie sur ma macro que j'ai developpé malgré qu'elle bug et supprime parfois des données .Ca fait plus de 2 mois que je travaille sur cette macro sans solution malgré que j'ai pas trouvé des probleme au niveau de tout les autres macros.

Reconnaissante pour votre aide.
 

vgendron

XLDnaute Barbatruc
Sérieux......tu cherches pas beaucoup...
Ligne 6: en IK et IL : ca AFFICHE 30 et 01 : Ce sont bien le 30 juin et 01 juillet===> il te suffit de regarder la ligne 5: ce sont les MEMES dates , mais affichées au format date jj/mm/aaaa
la ligne 5 est affichée simplement au format personalisé "jj"

Ce qu'il faut comprendre avec les dates sous Excel
une date , c'est d'ABORD un nombre standard:
et la PREMIERE date que excel connait, c'est le 01/01/1900 ==> correspond à 1
ex: dans un nouveau classeur, tapes 1 dans une cellule
puis passe la cellule au format "date" ==> le 01/01/1900 est affiché
tapes maintenant 10 et passe au format date==> c'est le 10eme jour à partir du 01/01/1900 ==> donc le 10/01/1900
tapes maintenant 10/09/2018 (Excel detecte automatiquement une date, et passe la cellule au format date)
maintenant, passe ce format en "Standard" ==>43353 et oui. depuis le 01/01/1900, il s'est passé 43353 jours...

donc quelque soit le calcul que tu fais sur les dates, Excel travaille avec les nombres standards
maintenant.. une date peut etre affichées sous plusieurs formes: date complete: jj/mm/aaaa (ligne 5) ou juste le jour (ligne 6) ou meme le NOM du jour (lun mar mer...) ligne 4

ou aussi le nom du mois ("mmm")
et donc, dans ton fichier, Ce qui te pose problème en fait... c'est la ligne 3: le MOT "JUIN" qui est à cheval sur le 30 juin et le 01 juillet..
pour ce problème je t'avais DEJA proposé une solution en post #13 avec la macro "Update Calendrier" et la macro évènementielle "Private Sub Worksheet_Change(ByVal Target As Range)"

voir PJ
 

Pièces jointes

  • problem dates calendrier influence sur recap (2).xlsm
    113.7 KB · Affichages: 12

devimen2

XLDnaute Nouveau
Merci beaucoup, j'ai compris donc c'est clair sauf que


Desolée que j'ai pas trouvée la fonction Verif que j'ai utlisé pour verifier avant d'inserer des données dans le deuxieme onglet.

s il y' a une repetition des données dans le premier onglet , si c'est le cas on inserer qu'une ligne dans le deuxime onglet

Function verifier(FL1 As Worksheet, col1 As String, trass As String, col3 As String, col4 As String, col44 As String, col7 As String, col6 As String, col5, w As Integer)

If (w = 8) Then
verifier = False
Else
p = False
For j = 8 To w - 1
If ((FL1.Cells(j, 2) Like col1) And (FL1.Cells(j, 3) Like trass) And (FL1.Cells(j, 19) Like col3) And (FL1.Cells(j, 20) Like col4) And (FL1.Cells(j, 21) Like col44) And (FL1.Cells(j, 24) Like col7) And (FL1.Cells(j, 29) Like col6) And (FL1.Cells(j, 30) Like col5)) Then
p = True
Exit For
End If
Next j
verifier = p
End If
End Function
For NoLig = 8 To Split(FL1.UsedRange.Address, "$")(4)
w = NoLig

trass = FL1.Cells(NoLig, 3)
col1 = FL1.Cells(NoLig, 2)
col3 = FL1.Cells(NoLig, 19)
col4 = FL1.Cells(NoLig, 20)
col44 = FL1.Cells(NoLig, 21)
col7 = FL1.Cells(NoLig, 24)
col5 = FL1.Cells(NoLig, 30)
col6 = FL1.Cells(NoLig, 29)

If (verifier(FL1, col1, trass, col3, col4, col44, col7, col6, col5, w) = False) Then
ALORS INSERER LES DONNES


en fait , je voudrai avoir tous les numeros de tajet avec doublons mais avant d'inserer ;il faut verifier ," ma fonction verif dans ma macro recap exprime ce que je voudrai avoir "
'dans cette instruction vous supprimer des numeros des trajets que j'en ai besoin
With FL1
LastCol = .Cells(6, .Columns.Count).End(xlToLeft).MergeArea.Offset(0, 1).Column - 1
LastLine = .UsedRange.Rows.Count
TabloFL1 = .Range("B8:AG" & LastLine).Value
On Error Resume Next 'permet de bypasser les erreurs qui apparaissent lorsqu'on va vouloir créer un trajet déjà existant
For i = LBound(TabloFL1, 1) To UBound(TabloFL1, 1)

'sur la colonne B, on récupère les numéros de trajet UNIQUE avec leur position dans le tableau "TabloFL1"
listeTrajets.Add TabloFL1(i, 1), i 'créer une liste sans doublon des trajets de la colonne B = 1ere colonne du tablo
Next i
End With

merci de m'aider sur cette partie

reconnaisante pour votre aide
 

Discussions similaires

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