Réponse acceptée !
Salut
Je recommence puisque tu n'as pas compris :
Le VB de Excel est du VBA --> Il y a un thème pour ces questions, merci de la classer correctement la prochaine fois
Insérer une ligne, je le répète encore une fois aussi : Tu sais le faire à la main, donc enregistre une macro pendant que tu le fais à la main et va voir dans le code de la macro à quelle instruction cela correspond.
Ta deuxième question (*) concerne la transformation d'un décimal en binaire :
Excel ne possède pas de fonction de cenversion directe, il va falloir le coder toi même.
Il faut, pour y arriver, que tu saches comment on passe de l'un à l'autre, ensuite ce n'est qu'une histoire de programmation.
Renseigne-toi la dessus ou révise tes cours parce que le code que je vais te passer fonctionnera peut-être, mais tu n'auras rien appris en l'utilisant sans comprendre.
Function ConvertBase(sNombreOriginal As String, _
iBaseOrigine As Integer, _
iBaseFinale As Integer) As String
' Convertit un nombre d'une base (2 à 36) vers une autre base (2 à 36)
' (Binaire = Base 2, Octal = Base 8, Décimal = Base 10, Hexadécimal = Base 16)
' sNombreOriginal est le nombre a convertir (chaine composée de 0-9, A-Z)
' iBaseOrigine est la base correspondant à sNombreOriginal (un entier entre 1 et 36)
' iBaseFinale est la base dans laquelle le nombre doit être rendu (un entier entre 1 et 36)
' Renvoie une chaîne dans la base désirée (chaine composée de 0-9, A-Z)
' (Exemple ConvertBase ("42", 8, 16) convertit 42 (octal) en 22 (hexadécimal)
' Si la conversion ne peut se faire, ConvertBase renvoie un texte désignant le
' caractère incorrect
Dim i As Integer
Dim sCaractèreCourant As String
Dim iCaractèreValeur As Integer
Dim iEmplacement As Integer
Dim dTotal As Double
Dim dMémoire As Double
Dim dBaseSortie As Double
Dim sTemp As String
If sNombreOriginal = "" Then sNombreOriginal = "0"
' On s'assure que la base entrée est exploitable
If iBaseOrigine < 2 Or iBaseOrigine > 36 Or _
iBaseFinale < 2 Or iBaseFinale > 36 Then
ConvertBase = "Erreur : Base sélectionnée invalide."
Exit Function
End If
' Transforme les caractères en majuscule
sTemp = UCase$(sNombreOriginal)
iEmplacement = Len(sTemp)
For i = 1 To Len(sTemp)
iEmplacement = iEmplacement - 1
sCaractèreCourant = Mid$(sTemp, i, 1)
iCaractèreValeur = 0
If Asc(sCaractèreCourant) > 64 And _
Asc(sCaractèreCourant) < 91 Then _
iCaractèreValeur = Asc(sCaractèreCourant) - 55
If iCaractèreValeur = 0 Then
' On s'assure que sNombreOriginal est exploitable (global)
If Asc(sCaractèreCourant) < 48 Or _
Asc(sCaractèreCourant) > 57 Then
ConvertBase = "Erreur : Caractère """ & sCaractèreCourant & """ invalide."
Exit Function
Else
iCaractèreValeur = Val(sCaractèreCourant)
End If
End If
If iCaractèreValeur < 0 Or iCaractèreValeur > iBaseOrigine - 1 Then
' On s'assure que sNombreOriginal est exploitable (en fonction de la base)
ConvertBase = "Erreur : Caractère """ & sCaractèreCourant & _
""" non valide en Base" & Str(iBaseOrigine) & "."
Exit Function
End If
dTotal = dTotal + iCaractèreValeur * (iBaseOrigine ^ iEmplacement)
Next i
' Convertit la valeur Decimale par divisions successives
Do
dBaseSortie = CDbl(iBaseFinale)
dMémoire = ModDouble(dTotal, dBaseSortie)
dTotal = (dTotal - dMémoire) / iBaseFinale
If dMémoire >= 10 Then
sCaractèreCourant = Chr$(dMémoire + 55)
Else
sCaractèreCourant = Right$(Str$(dMémoire), Len(Str$(dMémoire)) - 1)
End If
ConvertBase = sCaractèreCourant & ConvertBase
DoEvents
Loop While dTotal > 0
End Function
Function ModDouble(sNombreOriginal As Double, DivNum As Double) As Double
ModDouble = sNombreOriginal - (Int(sNombreOriginal / DivNum) * DivNum)
End Function
Et pour l'exploiter :
maCelluleBinaire = ConvertBase(maCelluleDécimale, 10, 2)
(*) On demande pourtant dans le règlement de ne poser qu'une seule question par post afin, justement, d'éviter d'avoir à répondre à des questions que tu as peut-être déjà résolu comme l'insertion d'une ligne.
Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés
Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)