Erreur d'incompatibilité de type

Résolu
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010 - 5 janv. 2010 à 11:00
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 - 6 janv. 2010 à 10:42
Coucou,

Tout d'abord bonne année à tous et tous mes meilleurs voeux!!

J'ai un petit problème. J'ai une erreur d'incompatibilité de type qui se lance avec ce programme suivant:

Private Sub Enregistrer()

Dim LastLig As Long
Dim i As Byte, j As Byte

NF$ = "Rex_Sauvegarde"
Sheets(NF$).Activate

With Sheets(NF$)

'Copie les données
LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row + 1 'ligne vide
For i = LastLig To LastLig + 15
If i Mod 7 <> 0 Then .Range("D" & i).Value = Me.Controls("TextBox" & i - LastLig + 1 & "B")
Next i

i = ListBox2.ListCount
If i > 0 Then
For j = 2 To 5
.Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" + j).List
Next j
End If


End With
End Sub



Pouvez vous m'aider svp!!!
Merci

Lil_monie

15 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 janv. 2010 à 14:35
Bonpour, loulou69,

Ne sais-tu pas (il sermble que non) que l'on peut affecter à une plage de cellules les valeurs d'une listbox ?
Je crains fort que ta réponse n'égare le demandeur !


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
3
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
5 janv. 2010 à 14:48
Bon, je pense avoir trouver mon erreur mais à vous de me dire:
i a été déclaré comme Byte et je l'ai affecté à une variable Long(i=LastLig to LastLig+15)
Donc la modif donne:

With Sheets("Rex_Sauvegarde")
LastLig = .Cells(.Rows.Count, 4).End(xlUp).Row + 1
For i = 0 To 15
If i <> 5 Then .Range("D" & LastLig+i).Value = Me.Controls("TextBox" & i + 1 & "B")
Next i

i = ListBox2.ListCount
If i > 0 Then
For j = 2 To 5
.Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" & j).List
Next j
End If
End With




Merci

Lil_monie
3
garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011
6 janv. 2010 à 10:42
bonjour,
pour info le type byte est limité a 255, le type integer a environ 32000 et le type long a plusieurs million je crois, donc pour la plupart des programmes vba, autant utiliser integer ou long
3
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
5 janv. 2010 à 11:30
Bonjour

Essayez de remplacer
Dim i as Byte, j as Byte
par
Dim i as Long, j as long
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 janv. 2010 à 11:35
Bonjour,

Commence par vvoir ce que contient LastLig (msgbox ou debug)
Puis va dans ton aide en ligne découvrir quelle est la limite d'une variable de tyupe Byte...

Rerviens ensuite (si encore une question), mais en nous précisant en plus sur quelle ligne tu as l'erreur

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
5 janv. 2010 à 11:44
J'ai l'érreur dans la deuxième boucle

If i > 0 Then
For j = 2 To 5
.Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" + j).List
Next j

Merci

Lil_monie
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
5 janv. 2010 à 11:47
Loulou69,

en remplaçant par Long, j'ai toujours la même erreur!!
Merci

Lil_monie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 janv. 2010 à 12:11
Re...
1) Confirme-nous que tu as bien 4 listboxes nommées ListBox2, Listbox3, listbox4 et Listbox5
2) confirme-nous que ces 4 listboxes sont situées dans un userform
3) précise-nous dans quoi tu as mis ta routine Enregistrer

____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
5 janv. 2010 à 12:24
Re,
1) confirmé
2)confirmé
3) il a été mis dans le UserForm concerné; après le UserForm_Initialise!!

Merci

Lil_monie
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 janv. 2010 à 14:01
si tes réponses (toutes celles donnhées jusqu'ici) sont exactes, ton erreur ne peut survenir que si les données d'une ou de plusieurs de la/des Listbox(es) considérée(s) sont d'un type incompatible avec celui des cellules de destination ! (et là, ma foi, tu es seul avec toi-même à poiuvoir le détermner).


____________________
Très intéressante fable, L'OISELEUR, L'AUTOUR ET L'ALOUETTE !
Cliquer sur "Réponse acceptée" (en bas d'une solution avérée adéquate) rendra service à d'autres. PENSEZ-Y.
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
5 janv. 2010 à 14:09
Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)) = Me.Controls("ListBox" + j).List

l'instruction sur sa partie gauche est une cellule

sur sa partie droite est une liste alors qu'il faudrait au mieux un item de liste

Donc il n'y a pas correspondance sur les types d'objet de part et d'autre de l'affectation
0
lilmonie Messages postés 51 Date d'inscription lundi 7 décembre 2009 Statut Membre Dernière intervention 18 janvier 2010
5 janv. 2010 à 14:12
Par rapport à ta réflexion loulou69, que me conseilles tu alors dans ce ces là?


Merci

Lil_monie
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
5 janv. 2010 à 14:30
coller toutes les données d'une liste dont le nom est "Listbox" +Cstr(j) dans la cellule donné par le numéro de ligne (LastLig) et de colonne (=9+j)

on a l'impression que tu veux affecter deux cellule l'une sous l'autre ) la colonne (9+j) et aux ligne LastLig et LastLig+i

on ne sait pas trop ce qu'il y a à faire...

Dim s as string
s = ""
For k=0 to Me.Controls("ListBox" + Cstr(j)).List.Listcount-1
s = s & Me.Controls("ListBox" + Cstr(j)).List(k).Text
Next k
.Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)).Value =s
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
5 janv. 2010 à 14:34
meme l'instruction que j'ai mis n'est pas bonne (gauche different de droite)
.Range(.Cells(LastLig, 9 + j), .Cells(LastLig + i, 9 + j)).Value =s
0
cs_loulou69 Messages postés 672 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 2 juin 2016 1
5 janv. 2010 à 14:39
effectivement, je n'ai jamais fait dans mes programmes d'affctation à une plage de cellules
Excuses moi mais quand on ne sait pas faire quelque chose d'un peu complexe, on réduit la complexité à ce que l'on sait faire
0
Rejoignez-nous