Cellules non vide

Bonjour, il faudrais modifie une macro pour qu'elle n'interprete pas les cellules non vide ou encore modifie une formule.

Voici le fichier avec les instructions.

10capucin-v-52-v05.zip (247.36 Ko)

Bonjour

As-tu essayé de remplacer ta chaine Vide par "00"

'=IF(LEN(RC9)-SEARCH( "=",RC9)=4,MID(RC9,SEARCH("=",RC9)+1,2),"00")

Je réserve ma réponse (si je trouve)

Edit

Une question pourquoi c'est la même formule pour une valeur sur 2 octets et pour une valeur sur 1 octet ?

Risque de confusion

Bonjour Banzai , je suis bien content que tu te penche sur le probleme.

La macro en rapport avec le probleme est dans le module "comnpilateur" et s'apelle "ADRESSES"

Bonjour

Oui j'ai vu mais regardes mon edit au message précédent

Pas de solution autre pour le moment

J'essai d'employer la meme formule car j'aimerais bien avoir qu'une seule syntaxe pour les variables a 1 et 2 octets. Si ce n'etais du probleme de cellule non vide, tout fonctionne.

Pour les confusions, je n'aurais pas du ecrire le meme nom de variable pour l'exemple que je t'ai envoye, lorsqu'on a un seul octet. J'ai corrige le nom de variable dans la cellule pour qu'il se raporte a une variable adequate.

Mais tu as de tres bonne question!

Je t'envoi donc la version 6.

Bonjour

Une solution forceps

A tester

La solution que tu as trouve est parfaite et clean, elle permettra l'ajout de formule avec IF sans probleme de cellules vide. Je suis concient du travail fournis pour arriver a cette solution. Merci!

Recemment, une fonction personnalise a ete cree pour moi, elle rempli bien son role mais lorsque je veux sauvegarder le fichier, j'ai une macro evenementielle qui la pointe. Pourtant la macro ne devrait meme pas etre active et cette fonction ne sert vraiment pas pour l'enregistrement. Il semblerais qu'elle n'est pas detecte.

11capucin-v-52-v009.zip (249.50 Ko)

Bonjour

Quand tu sauvegardes, je ne sais ce que tu veux sauvegarder

As tu besoin des macros dans le nouveau fichier ?

Car dans une feuille que tu sauvegardes il y a une macro événementielle qui appelle cette fonction

Soit si tu as besoin des macro : Inclure cette fonction dans le code de la feuille ( l'inclure dans la macro)

Soit si tu n'as pas besoin des ces macros , virer le code lors de l'enregistrement des feuilles

Lorsque je fais une sauvegarde, ce sont les feuilles ASS,DONNEES et RAM qui sont vises.

Lorsque j'ouvre mon application, ces 3 feuilles et leurs macros sont deja presentes mais elles sont vider par une macro (mais pas les macros). A l'ouverture, je dois charger un projet contenant ces 3 feuilles dans les 3 feuilles de l'application. Alors les 3 feuilles que je charge doivent elle posseder les macros? Si elles en ont pas, est-ce que je perd les macros de ces feuilles qui etait deja dans mon application?. De toute facon, avant de fermer mon application je m'assure de sauvegarder les feuilles du projet. Je crois qu'il ne faudrais pas que les macros soit egalement sauvegarder, a condition que lorsque je les chargerais a l'ouverture , je ne perdent pas ceux que j'ai dans mon application.

Qu'en penses-tu?

Note que je ne t'ai pas envoye le fichier contenant les 3 feuilles d'un projet, car le fichier etait trop gros. J'ai modifie une macro afin que tu puisse avoir deja un projet present dans l'application, la macro se charge normalement d'effacement le contenu des 3 feuilles, a l'ouverture de l'application.

Je t'envoi cette fois-ci un projet que tu pourrais mettre dans l'application, a l'ouverture en cliquant sur OPEN.

7projet-7.zip (209.06 Ko)

Bonjour

Je vois que tu t'inquiètes de perdre tes macros, j'en suis sur à 100% tu ne les perds pas (mais comme j'habite très loin de chez toi je ne risque pas grand chose )

Pour t'en assurer travailles avec des copies

Avec une copie de ton fichier ASS, débarrassée le toutes ses macros, sauves le et à partir d'une copie de ton fichier principal fait un open avec ton bouton et vérifies

Comme cela tu en seras sur

J'ai regardé le code je ne vois que tu ne fais que copier les données des feuilles

Mon avis c'est lors de la sauvegarde de tes 3 feuilles il faut le faire sans les macros

Car ce n'est qu'une sauvegarde des données d'un programme Intel ?

On a trop travaille tout les 2 pour tout perdre!

Je vais faire une copie (je suis de nature prudente) et essayer ce dont tu parles. Je t'en redonne des nouvelles!

Banzai, le test est concluant: il n'est pas necessaire d'avoir les macros (et meme nuisible) pour pouvoir fonctionner. Tu as raison, il faut arriver a sauvegarder le fichier avec les feuilles ASS,Donnees et Ram sans les macros. Tu semble dire qu'on peut faire cela en VBA, je pense que ca m'eviterais beaucoup de problemes eventuelles.

Dis-moi quoi mettre dans le code, la macro vise est le userForm3.

Juste un petit eclarcissement a titre d'information: Le fichier avec ses 3 feuilles contiennent du code assembleur pour un processeur 8it: le Z80). Lorsque je le recupere dans mon application, c'est pour le developper car mon application sert d'editeur en premier lieu. Lorsque le programme est completement developpe, je pese sur <start> ce qui compile et genere le code hexa. Et ce code hexa peut etre sauvegarder dans un fichier Intel Hex en vue d'ecrire le programme dans une memoire EEPROM.

En conclusion, notre application est tres complete.

Par le passe, lorsque j'ecrivais du codes, il etait traduit a la main en hexa, des heures et des heures de plaisir, et a chaque modification du programme, il fallait revoir tout.Maintenant j'ecris du code et en 20 secondes, il est mis a jour et pret pour etre mis dans une memoire.

Ce genre d'application existe, mais pas tres repandu pour le Z80. J'ai meme achete une application qui peut faire le travail, mais c'est loin d'arriver avec ce qu'on a fait!

Bravo et encore une fois merci!

Bonjour

Voilà dans mes archives, j'avais cette macro

A tester (avec des copies)

10capucin-v-52-v009.zip (274.67 Ko)

les test sont concluant, le code de Laurent suprime les macros et mon application fonctionne toujours. C'est donc ce qu'il me fallait.

Je ne comprend pas son code, comment arrive t-il a ne viser que les feuilles du fichier et non ceux de mon application?

Pourrais-tu regarder les colonnes CDEF de la feuille ASS , lorsqu'il y a des zero a gauche d'un nombre hexa, il ne s'affiche pas. Est-ce un histoire de format de cellule. Ces zero en moins se retrouve jusqu'a la compilation finale.

With ActiveWorkbook
    With .VBProject
      'cette partie du code est de Laurent Longre
      For Each VBC In .VBComponents
        If VBC.Type = 100 Then
          With VBC.CodeModule
            .DeleteLines 1, .CountOfLines
            .CodePane.Window.Close
          End With
        Else: .VBComponents.Remove VBC
        End If
      Next VBC
    End With

Bonjour

1) J'ai changé le code pour enlever les guillemets dans la cellule, ce qui a permis de retrouver les codes sur la page "ASS Compile" en hexa 2 digits

2) Dans la page "ASS" il faut que les colonnes CDEF soient au format texte (voir cellule C48)

3) Modification de ta formule page "Traitements" cellule AT735

A vérifier

apres beaucoup de verification, je me suis apercu que:

1-on ne peu pas mettre l'nsemble des cellules en mode texte pour les lignes avec deja du contenu en i, sur la feuille ASS sinon, c'est la formule et non son resultat qui se retrouve dans le tableau compile.

2- il y aurais 2 ou 3 autres formules a modifie!

3- les syntaxe en i du type $$ ou FILL ou Print sont des fonctions speciales qui genere du code dans la ligne en dessous. Elles impliqle la macro evenementielle de feuille ASS. Tu peux faire un test: modifie les chiffres d'une cellule $$ en i puis clic sur la cellule d'en dessous. Tu verra une nouvelle ligne cree.

4- si on arrive a corriger les problemes de "0" absent un peu partout, chaque etapes de la compilations risque de reproduire ce petit probleme esthetique.

A la lumiere de tout ca, j'ai finalement trouve une solution: apres compilation, j'applique un format personnalise au cellule en faisant:

format de cellule/nombre/personnalis/type/00, avec l'enregistreur de macro. Ca donne:

Range("C3:F1618").Select
    Selection.NumberFormat = "00" 

Donc le tableau final sera esthetique. Je pourrais aussi faire cela sur les tableaux de traitement.OUF !!! je suis brule!

Banzai, comment ecrire les cellules plus bas avec le format "00"

'Selection.NumberFormat = "00"
      Cells(Target.Row + 1, 3) = Left(sVal, 2)
      Cells(Target.Row + 1, 4) = Right(sVal, 2)

Bonjour

Pas facile comme question

Déjà quel est le problème ?

Je croyais que Sval était une chaine de 4 caractères

Il faut dire dans quel cas cela pose problème et fournir un exemple pour essayer de trouver une solution

Faut il mettre le format de cellule en format Texte ?

I don't know avec si peu de renseignement

Excuse-moi, tu travaille sur beaucoup de projet en meme temps!

Sval contient une valeur a 4 octet!

Il reste tres peu de situation ou je n'ai pas pu regler l'absence du zero a gauche d'un nombre a 2 chiffres. Tu en as regler une en modifiant la formule en AT735 de la feuille "traitement".

Je t'envoi le fichier avec une situation.

Le bout de code que tu vois completement en bas et qui vient de la macro evenementielle "Worksheet_Change" met la valeur de sVal dans 2 cellules consecutives. J'ai pense a une methode pour mettre les "0" absent a gauche: il sagit de mettre la cellule en format "00". Je peux le faire avec la methode

Range("??) .Select

Selection.NumberFormat ="00".

Mais je ne sais pas comment introduire ca dans le code , puisqu'on utilise "Cells" dans la macro. Je ne sais pas non plus si on devrait mettre ce format avant ou apres l'ecriture dans les 2 cellules. Je devrai essaye les 2.

 ' Trouve la valeur associe a la string, dans feuille "RAM" (colonne B) :
      Dim sVal As String
      sVal = RetVal(Sheets("RAM"), "A", Mid(Strg, 3, InStr(1, Strg, "=") - 3), "B") 'RetVal est une fonction personnalise du module "Fonctions"
      Cells(Target.Row + 1, 3) = Left(sVal, 2)
      Cells(Target.Row + 1, 4) = Right(sVal, 2)

Bonjour CAPUCIN, Banzai64

Je passais par là

Pour ton problème de zéro, voici une possibilité

      Dim sVal As String
      sVal = RetVal(Sheets("RAM"), "A", Mid(Strg, 3, InStr(1, Strg, "=") - 3), "B") 'RetVal est une fonction personnalise du module "Fonctions"
      Cells(Target.Row + 1, 3) = Left(sVal, 2)
      Cells(Target.Row + 1, 4).NumberFormat = "@" ' Format texte pour garder le 0
      Cells(Target.Row + 1, 4) = Right(sVal, 2)
      Application.EnableEvents = True    'on réactive les procédures évènementielles

A+

Rechercher des sujets similaires à "vide"