Ouahh j'ai une nouvelle baise pour vous...
Je viens de voir que mon code il est polyglote
Il parle le VBA, comme je parle l'anglais
Bref il suffit de demarrer EXCEL puis faire un petit ALT + F11
Copier ce lanceur de sardine...pardon macro dans "ThisWorkbook"
Copier/coller le grand code VB dans VBA dans "Feuil1(Feuil1)"
Refermez la gamelle...relancer le fichier excell et ça marche
Code : Tout sélectionner
Private Declare Function ChangeNameAndAddLine Lib "test2.dll" (ByVal PointerArray As Long, ByVal NameToChange As String, ByVal NameToReplace As String, ByVal ArraySize As Integer) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, source As Any, ByVal Bytes As Long)
Private Declare Function lstrcpy Lib "kernel32" (ByVal lpString1 As Any, ByVal lpString1 As Any) As Long
Private Declare Function lstrlen Lib "kernel32.dll" Alias "lstrlenA" (ByVal lpString As Any) As Long 'Détermine la longeur d'une chaine passée en argument.
Public Sub Form_Load()
ChDir ThisWorkbook.Path
Dim ArrayString() As String, IdMemory As Long
ReDim ArrayString(10)
' Construction du tableau
For i = 1 To UBound(ArrayString())
ArrayString(i) = "Sentence " + Str(i)
Phrase = Phrase + ArrayString(i) + Chr(13)
Next
' Affichage du tableau original
MsgBox Phrase, vbOKOnly, "Tableau depart"
Phrase = ""
' Modification du tableau "Sentence" remplacé par "Kcc" et rajout de deux lignes
LongTablo = TabloDllEnLocal(ChangeNameAndAddLine(VarPtr(ArrayString(0)), "Sentence", "Kcc", UBound(ArrayString())), ArrayString)
' Premier affichage du tableau modifié "Sentence" remplacé par "Kcc"
For i = 0 To LongTablo
a = a + ArrayString(i) + Chr(13)
Next
MsgBox a
a = ""
' Modification du tableau "Kcc" remplacé par "Sentence" et rajout de deux lignes
LongTablo = TabloDllEnLocal(ChangeNameAndAddLine(VarPtr(ArrayString(0)), "Kcc", "Sentence", UBound(ArrayString())), ArrayString)
' Second affichage du tableau modifié "Kcc" remplacé par "Sentence"
For i = 0 To LongTablo
a = a + ArrayString(i) + Chr(13)
Next
MsgBox a
End
End Sub
Public Function TabloDllEnLocal(ByVal AdresseTabloDll As Long, ByRef TabloAModifier)
Dim TabloTemp() As Long
Dim AdrLongTabloTemp As Long
Dim LongTabloTemp As Integer
Dim Temp As String
' Recuperation de la longueur du tableau a l'enregistrement zero
CopyMemory AdrLongTabloTemp, ByVal AdresseTabloDll, 4
Temp = Space$(lstrlen(AdrLongTabloTemp))
lstrcpy Temp, AdrLongTabloTemp
LongTabloTemp = Val(Temp)
' Copie de la memoire dans le tablo temporaire local
ReDim TabloTemp(LongTabloTemp)
CopyMemory TabloTemp(0), ByVal AdresseTabloDll, (LongTabloTemp + 1) * 4
' Effacement du tableau original, redimentionnage, et remplissage par le tableau temporaire
Erase TabloAModifier
ReDim TabloAModifier(LongTabloTemp)
For i = 0 To LongTabloTemp
Temp = Space$(lstrlen(TabloTemp(i)))
lstrcpy ByVal Temp, TabloTemp(i)
TabloAModifier(i) = Temp
Next
TabloDllEnLocal = LongTabloTemp
End Function
Si "quinquin" y peut regarder l'etat de ses memoires apres le passage du rouleau compresseur KCC
Sauvegarde fortement recommandée de toutes vos apllis...la KCC corporation decline toute responsabilité en cas d'incendie dans votre maison
