Erreur d'incompatibilité de type [Résolu]

Signaler
Messages postés
51
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
18 janvier 2010
-
Messages postés
1542
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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.
Messages postés
51
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
18 janvier 2010

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
Messages postés
1542
Date d'inscription
mardi 16 juin 2009
Statut
Membre
Dernière intervention
3 avril 2011

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
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
Bonjour

Essayez de remplacer
Dim i as Byte, j as Byte
par
Dim i as Long, j as long
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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.
Messages postés
51
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
18 janvier 2010

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
Messages postés
51
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
18 janvier 2010

Loulou69,

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

Lil_monie
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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.
Messages postés
51
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
18 janvier 2010

Re,
1) confirmé
2)confirmé
3) il a été mis dans le UserForm concerné; après le UserForm_Initialise!!

Merci

Lil_monie
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
227
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.
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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
Messages postés
51
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
18 janvier 2010

Par rapport à ta réflexion loulou69, que me conseilles tu alors dans ce ces là?


Merci

Lil_monie
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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
Messages postés
672
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
2 juin 2016
1
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