pb dans la formulation de mise a jour de feuilles à l'ouverture du fichier

  • Initiateur de la discussion dj.run
  • Date de début
D

dj.run

Guest
Bonjour, à toutes et à tous,

je suis noyé dans mon projet !! S.O.S

bon trève de plaisanterie,

je voudrai (et j'y arrive pas) faire une mise à jours de mes feuilles par rapport à une feuille nommée donnees à l'ouverture de mon fichier.

j'ai essayé de formuler un code VBA mais il doit y avoir une erreur car ça marche pas .

je vous joint mon fichier, ne rigolez pas trop fort en voyant mon code car je pourrai vous entendre (de la Réunion) .

merci d'avance à toutes celles et tous ceux qui se pencherons sur mon code .

ps : je suis nul en VBA malgré que ça fait plusieurs mois que j'apprend sur ce forum et dans des livres . Mais je progresse si, si, .

dj.run
 

Pièces jointes

  • TEST.zip
    20.6 KB · Affichages: 15
  • TEST.zip
    20.6 KB · Affichages: 15
  • TEST.zip
    20.6 KB · Affichages: 13
D

dj.run

Guest
oups, j'ai oublié de mettre les explication sur mon fichier .

desolé .

nouveau fichier joint

dj.run
 

Pièces jointes

  • TEST.zip
    21 KB · Affichages: 15
  • TEST.zip
    21 KB · Affichages: 16
  • TEST.zip
    21 KB · Affichages: 15
@

@+Thierry

Guest
Salut DJ.Run, Salut la Réunion, Salut le Forum !!!


Bon alors en premier lieu tu tapes quelque chose dans toutes les cellules "B8" de tes feuilles "Titi", "Tata", "Toto".... Ceci pour avoir un "Stop" pour cette ligne de code => l1 = WS.Range("b66").End(xlUp).Row + 1.... Sinon tu vas remonter en "B6"....

Ensuite tu changes tout ton module ThisWorkBook par celui-ci :

Option Explicit
Option Compare Text 'si tu as une Feuille "TITI" et une valeur "titi"

Private Sub Workbook_Open()
Dim l As Integer, l1 As Integer
Dim cellule As Range, plage As Range
Dim WS As Worksheet

l = Sheets("donnees").Range("d300").End(xlUp).Row + 1

Set plage = Sheets("donnees").Range("d2:d" & l)

For Each cellule In plage
For Each WS In Sheets
If WS.Name = cellule.Value Then
l1 = WS.Range("b66").End(xlUp).Row + 1
With WS
.Range("b" & l1) = cellule.Offset(0, -3).Value
End With
End If
Next WS
Next cellule
End Sub

Toutes les Feuilles ayant le Même nom que les Sociétés liste en colonne "D" seront alimentées d'un coup...

Bon Week End à tous et à toutes
@+Thierry
 
D

dj.run

Guest
Bonjour à toutes et à tous,

merci @+Thierry,

Pourquoi faire compliqué quant on peut faire simple, je suis vraiment "nul",
je ne pensait vraiment pas à "wsFor Each WS In Sheets" alors que je connais.

encore merci d'avoir corrigé mes erreurs .

mais je progresse de jour en jour, je fais encore beaucoup d'erreur mais j'avance, (c'est dur pour un autodidacte) .

un jour peut etre je ferai parvenir un de mes projets dans le forum, pour l'instant j'ose pas car certain sont tirés par les cheveux, mais ils marchent.


merci encore à toi, pour tous tes conseils et tes exemples, et un grand merci aux autres aussi et longue vie à ce forum qui est vraiment genial .


dj.run
 
D

dj.run

Guest
Bonjour à toutes et à tous,

je reprends mon fil (c'est bien) juste pour avoir un petit renseignement complementaire .

la macro de @+Thierry fonctionne tres bien et meme trop bien . lol

en fait à chaque fois que j'ouvre mon fichier, cela me reinscrit les memes codes à la suite . c'est logique.

mais en fait je me suis mal exprimé, ce que je cherche à faire c'est une mise à jour, si les codes sur la feuil toto sont les memes que ceux de la feuil donnees, alors ils ne se passe rien, sinon il rajoute le ou les nouveaux codes.

j'essaye depuis dimanche de lui faire faire cela et j'y arrive pas .

je doit m' y prendre mal .

je vous joint mon fichier, cela peut vous aider .

merci encore à vous tous .

dj.run
 

Pièces jointes

  • TEST.zip
    22.7 KB · Affichages: 12
  • TEST.zip
    22.7 KB · Affichages: 16
  • TEST.zip
    22.7 KB · Affichages: 15
@

@+Thierry

Guest
Salut DJ.Run, le Forum

Huum oui c'était évidemment un manque de précision important dans ta première demande, et je me doute même que sur ce coup ci, il y a des risques pour que tu reviennes dans pas longtemps pour dire que tu t'étais mal exprimé....

Enfin moi, je vois les chose tout simplement, dans la première demande, j'avais compris que la feuille "données" était remise à zéro et réactualisée avec des nouvelles données qui devaient donc s'ajouter à chaque feuille clients au fur et à mesure...

Maintenant avec ce que tu as écrit, il semblerait que ce ne soit manifestement pas le cas et même le contraire...

Donc j'en conclus, et pour rester dans le cadre d'une macro simple, que ta feuille données conserve l'historique de toutes les opérations.... Par conséquent il n'y a pas besoin de se casser la tête avec un tableau indexé séquentiellement pour vérifier les doublons et toute la grosse artillerie... Il suffit de faire une macro qui écrase les anciennes données des feuilles clients comme suit :

Option Explicit
Sub MAJ()

Dim l As Integer, l1 As Integer, x As Integer
Dim cellule As Range, plage As Range
Dim WS As Worksheet
Dim i As Byte

l = Sheets("donnees").Range("d300").End(xlUp).Row + 1

Set plage = Sheets("donnees").Range("d2:d" & l)

For Each WS In Sheets
i = 9
For Each cellule In plage
If WS.Name = cellule.Value Then
WS.Range("b" & i) = cellule.Offset(0, -3).Value
i = i + 1

If i > 66 Then
MsgBox ("LE NOMBRE DE SALARIES MAXIMUM POUR CETTE SOCIETE EST ATTEINT")
GoTo fin
End If
End If
Next cellule
Next WS
fin:
End Sub


J'ai travaillé en macro Standard, ce qui est plus simple pour faire des tests, que Private Sub Workbook_Open.... Tu n'as qu'à faire de même avec ceci dans le Private Module de ThisWorkBook :

Private Sub Workbook_Open()
MAJ
End Sub

Ceci dit dans ton fichier "Test.xls" pense à mettre les déclaration de variables dans la procédure et non pas au dehors, elles n'ont rien à y faire, elle ne sont pas partagées avec d'autre Private Sub....

Bon Appétit

Pas trop chaud à la Réunion, j'ai entendu dire qu'il neigeait (!!!)

@+Thierry
 
D

dj.run

Guest
Re à toutes et à tous,

merci encore une fois @+Thierry, c'est exactement ce que je cherchais à faire depuis hiers..... no coment !!!


juste une petite question, à quoi correspond " i = i + 1 " dans ta boucle ?

merci encore


en effet il a neigé à la Réunion phenomène tres rare, ça n'a duré que deux jours et c'etait dans les hauts de l'ile. mais même dans les bas on a ressenti le froid, mais maintenant le redoux est revenu, ça va mieux (16 à 19 ° pour l'hiver c'est bon).


dj.run
 
@

@+Thierry

Guest
Salut DJ.Run

Je viens de taper un long post explicatif ! et pas ! Bousillé! zut alors !!!

Bon alors je m'excusais de ne pas avoir répondu plus tôt...

Puis j'expliquais le "i" mais là j'ai plus le temps !!

Enfin c'est un principe de base pour incrémenter un compteur dans les boucles, tu verras souvent i = i + 1....

Il sert ici pour descendre de B9 à B10, B11 etc à chaque boucle "For Each cellule In plage" et il sert aussi pour le test de bas de tableau "If i > 66 Then"...


Voilà, sorry d'être bref, mais çà m'énerve d'avoir perdu tout mon post explicatif !!!


@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 681
Messages
2 090 870
Membres
104 681
dernier inscrit
Gtcheumawe