IF NOT xxxx IS NOTHING
Bonjour tout le monde c'est de nouveau moi (le stagiaire perdu mdr ) j'ai réussi a modifié 80% de ce qu'on ma demandé mais il reste une petite partie donc j'explique:
J'ai un premier classeur de fiche excel qui permet la saisie d'info , ainsi que les calculs etc , a la fin de la 4eme fiche un bouton GO permet de transféré les nouvelles données dans un autre classeur qui lui sert de "base de donnée" et stock quelques 8000 lignes, le GO transfert donc les nouvelles lignes a la suite des 8000 autres , l'ancien stagiaire à mis en place un systeme qui, lorsque ce qu'on pourrait appelé "clé primaire" existe déja dans les 8000 lignes, une fenetre s'ouvre du style "le code XXXXXX existe déja voulez vous le modifier oui non" lorsqu'on clique non l'action est annulé et le transfert des lignes suivante continue, si une deuxieme ligne est aussi déja présente dans les 8000 autres, de nouveau une fenetre , etc BREF lorsqu'on clique oui, un 3eme classeur s'ouvre(historique.xlms) et copie donc l'ancienne ligne la met dans l'historique et remplace par la nouvelle exemple:
Dans mon classeur 1 j'entre la phrase suivante:"je suis nul en VBA" avec comme identifiant de phrase "PH1" , je clique GO la macro se rend compte que dans le classeurde8000 ligne il existe déja une phrase identifé par "PH1" qui elle est : " Bonjour je m'appel Patrick", je clique sur "oui je veux modifier" une fenetre historique s'ouvre et la derniere ligne du fichier historique contient la phrase "PH1: Bonjour je m'appel Patrick"
Mon problème: l'employé utilisant ces deux classeur (3 si on compte l'historique) aimerait soit : que si il ya plusieur code identitique plutot que d'ouvrir a chaque fois une boite de dialogue et une fenetre une seule s'ouvre avec comme dans windows "appliquer mon choix pour les X prochains conflit"ce qui faciliterais l'historisation
LE CODE DE L'ANCIEN STAGIAIRE :
' OUVRE HISTORIQUE
myCell = Cells.Find(dcode, , xlValues)
Set cellule = .Find(dcode, LookAt:=xlWhole)
If Not cellule Is Nothing Then
UserForm1.Show
et donc ENFIN ma question : que fait ce code? sachant que :"dcode"c'est par exemple "PH1" avec l'exemple d'avant
"UserForm1" c'est la fenetre "XXX est déja présent voulez vous modifier
Oui non?"
Je ne comprend pas le if Not cellule Is Nothing Then , et j'ai cherché mais je n'ai pas comprisce que (dcode, , xlValues) et .Find(dcode, LookAt:=xlWhole) faisait
Salut Léo,
joins ton ou tes fichiers que l'on puisse se rendre compte!
Un dessin vaut mieux qu'un long discours!
A+
Hello!
J'aimerais bien mais comme c'est dans le cadre du stage j'ai pas le droit c'est des fichiers qui servent à grande échelle a l'entreprise j'ai demandé hier a mon maître de stage (qui ne peut pas m'aidé vu qu'il est pas informaticien) et je n'ai pas le droit de mettre des fichiers ni ici ni ailleur...
Je regarderais à nouveau demain j'ai de toute manière encore le temps et de quoi faire j'ai d'autre soucis par rapport a des format de cellules etc !
Bonjour,
Set cellule = .Find(dcode, LookAt:=xlWhole)recherche dans la plage du With (non mis) s'il trouve dcode.
1) il trouve : cellule = range de la cellule de dcode
2) il ne trouve pas : cellule = Nothing
If Not cellule Is Nothing Then
si cellule n'est pas Nothing c'est que j'ai trouvé dcode
eric
Bonjour Eric ! Merci j'ai compris du coup quand on trouve déja le dcode on demande à l'utilisateur si il veux modifier , il faudrait que je vois comment faire pour ajouter une case "appliquer mon choix aux X prochains conflit" plutot que d'ouvrir a chaque fois une fenetre qui demande si on veux modifier , le probleme c'est que l'ancien stagiaire avait mis le test permettant de vérifier si le code est déja présent.. c'est a dire qu'on prend la premiere ligne du classeur 1 on verifie si le code est présent si oui on modifie si non on ajoute ensuite on passe a la deuxieme ligne etc, mais je vais essayer de me renseigner et au pire je verrais pour désactiver l'historique puisque à priori il n'en n'ont jamais eu besoin, Merci de ton aide, je ne coche pas encore résolu en ésperant que ça dérange pas !
EDIT : j'ai presque trouvé une solution,déja j'ai fait en sorte que si on clique "oui" pour modifier, l'historique s'ouvre fait ce qu'il à a faire et se ferme tout seul sans qu'on le voit ni qu'on demande si on veux enregistré, malheureusement j'ai du m***** quelque part car maintenant quand je clique oui , ca modifie l'historique, met a jour le fichier de 8000 ligne, mais me demande si je veux fermer mon classeur 1, comme si quelque part dans mon code j'avais mis "workbook(classeur1).close" or ce n'est pas le cas,je vais essayé de trouvé comment supprimé ce petit probleme et apres il ne me restera plus qu'a trouvé une façon optimiser pour pas que ça demande 20 fois si on veux modifier si il y a 20 erreur mais juste uen fois avec une case" appliquer mon choix aux 20 prochain conflit"
EDIT2: Ok j'ai trouvé le probleme c'est qu'avant de trouvé la fonction"woorkbooks("blabla").close, j'avais mis une fonction trouvé sur internet dans le code de "ThisWorkBook" , le code étant :
Private Sub Workbook_BeforeClose(Cancel As Boolean)
For Each w In Application.Workbooks
w.Save
Next w
Application.Quit
End Sub
OR une fois que j'ai trouvé la fonction .close j'ai viré ce code de mon"ThisWorkBook" cependant, d'apres Excel le code y est encore puisqu'il le lance lorsque je ferme l'historique,étrange... le code que j'avais supprimé (et qui d'ailleurs est absent de ThisWorkBook lorsque j'ouvre mon classeur, apparait lorsque je ferme mon classeur... Je vais essayer 2/3 trucs pour trouvé ce code fantome et je reviens vers vous !
EDIT3:Le post commence à etre long je vais fermer et en ouvrir un autre pour la case a coché dont je parle plus haut, quand au problème du code fantome j'ai supprimé mon fichier historique et j'en ai recréer un,du coup le code fantome n'est plus là et ça fonctionne parfaitement, plus qu'a trouvé comment faire pour la case à coché et ça sera bon !