Insertion de cellules apres <enter

Salut a tous , je cherche a implanter une insertion de cellule dans un tableau lorsque je tappe "print *" dans une cellule.

Les explications sont sur la feuille.

23capucin-v42.zip (169.90 Ko)

Bonjour CAPUCIN,

Si j'ai bien compris, voici un bout de code à ajouter à ta procédure Worksheet_Change de la feuille ASS juste après la ligne "If Not Intersect(Columns("I"), Target) Is Nothing And Target.Count = 1 Then"

'######## AJOUT CODE VBA-NEW ###################
Str = Target
If Str Like "PRINT ""*" Then
    nbCar = InStrRev(Str, """") - InStr(Str, """") - 1
    x = (14 + nbCar) / 4
    nblign = IIf(x - Int(x) = 0, x, Int(x) + 1)
    Range("C" & Target.Row + 1).Resize(nblign, 8).Insert Shift:=xlDown
End If
'###############################################

et la déclaration de variables à rajouter en tête de procédure :

Dim Str As String, nbCar As Long, x As Double, nblign As Long

Salut, ton code fonctionne tres bien. J'aurais une derniere demande a faire, qu'on pourrait ajouter a la suite de la macro. Les explications sont sur la feuille. J'espere que tout sera assez clair, sinon fais moi signe.

27capucin-v43.zip (173.47 Ko)

Hum...La demande est très claire mais que comment convertir en ASCII ??!

Salut! j'ai ete voir sur internet, et je crois qu' il y a de quoi pour faire ca en VBA.

En ascii: 0 1 2 3 4 5 deviennent 30, 31, 32, 33

A B C D ... deviennent 41,42 43, 44 Hexa.

M devient 4D

J'ai trouve , regarde:

http://www.techonthenet.com/excel/formulas/asc.php

Asc (A) =41

Re,

Change le code que je t'ai donné plus haut par celui-ci :

        '######## AJOUT CODE VBA-NEW ###################
        Application.EnableEvents = False
        Strg = Target
        If Strg Like "PRINT ""*" Then
            j = InStr(Strg, """")
            nbCar = InStrRev(Strg, """") - j - 1
            x = nbCar / 4
            nblign = IIf(x - Int(x) = 0, x, Int(x) + 1)
            Range("C" & Target.Row + 1).Resize(nblign, 8).Insert Shift:=xlDown
            For k = j + 1 To InStrRev(Strg, """") - 1
                col = (k - j) - Int((k - j - 1) / 4) * 4 + 2
                Cells(Target.Row + Int((k - j - 1) / 4) + 1, col) = Hex(Asc(Mid(Strg, k, 1)))
            Next k
            Application.EnableEvents = True
        End If
        '###############################################

La déclaration des variables :

    Dim Strg$, x#, nbCar&, nblign&, j&, k&, col&  'declaration pour CODE VBA-NEW

Je suis tres content, je vais maintenant pouvoir integrer quelques instructions de haut niveau a mon assembleur et les compiler!

Pourrais-tu me donner la petite formule excel qui permettrais de compter le nbre de caracteres entre les guillemet de mon instruction.

L'explication est sur le fichier. Ca devrais etre tout simple pour toi!

16capucin-v43.zip (173.85 Ko)

Une formule à mettre en D10

=TROUVE("""";I10;TROUVE("""";I10)+1)-(TROUVE("""";I10)+1)

merci, ca fonctionne tres bien.

Avant de fermer le post, pourrais-tu ajouter quelques commentaires dans ta macro, pour ma comprehension?

Et voici :

'######## AJOUT CODE VBA-NEW ###################
Application.EnableEvents = False    'désactive les procédures évènementielles
Strg = Target
If Strg Like "PRINT ""*" Then    'on regarde si la cellule commence par PRINT "...
    j = InStr(Strg, """")    'position du premier " (guillemet)
    'on compte ici le nombre de caractères entre les 2 guillemets
    'la fonction InStrRev permet de donner la position d'un caractère en partant de la fin
    'ici en partant de la fin, onn regarde où se trouve le 2è guillemet. s'il y a plus de 2 guillemets, ça ne marchera pas
    nbCar = InStrRev(Strg, """") - j - 1
    x = nbCar / 4    'ici tu as enlevé le (14 + nbCar) je ne sais pas pourquoi
    nblign = IIf(x - Int(x) = 0, x, Int(x) + 1)    'si x est un entier (x - Int(x) = 0), on met x sinon on prend la partie entière de x à laquelle on ajoute 1
    Range("C" & Target.Row + 1).Resize(nblign, 8).Insert Shift:=xlDown    'on insère "nblign" sur 8 colonnes en-dessous de la ligne cible
    'le code suivant permet d'écrire dans les colonnes C à F et sur plusieurs lignes les codes ASCII/HEXA
    For k = j + 1 To InStrRev(Strg, """") - 1
        col = (k - j) - Int((k - j - 1) / 4) * 4 + 2
        Cells(Target.Row + Int((k - j - 1) / 4) + 1, col) = Hex(Asc(Mid(Strg, k, 1)))
    Next k
    Application.EnableEvents = True    'on réactive les procédures évènementielles
End If
'###############################################

Tout est parfait pour moi! un gros merci

Pour la modif que j'ai apporte, c'est que j'ai reussi a trouve une methode plus simple pour compiler qui necessite moins de cellule.

Rechercher des sujets similaires à "insertion enter"