Excel VBA

Résolu/Fermé
gunbafo Messages postés 55 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 18 février 2011 - 3 févr. 2010 à 16:50
gunbafo Messages postés 55 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 18 février 2011 - 4 févr. 2010 à 10:05
Bonjour,

J'ai le code ci-dessous qui marche très bien sauf pour 1 situation. Explication:
Si la valeur "servie" n'est pas reneigné dans aucune des lignes, alors le code bloque au niveau de la ligne "ReDim tablo(nbre, dercol)"

Quelqu'un peut-il me dire pourquoi????? et résoudre ce problème !!!!!

Option Base 1
Option Explicit
Const valeur As String = "servie"
Private Sub CommandButton1_click()
Dim dercol As Byte
Dim lig As Long, nbre As Long, cptr As Long, cptr2 As Byte
Dim tablo, tablo_lig
Dim ligvide As Long
dercol = 18
nbre = Application.CountIf(Sheets("Origine").Columns(18), valeur)
ReDim tablo(nbre, dercol)
ReDim tablo_lig(nbre)
If nbre > 0 Then
With Sheets("Origine")
lig = 1
For cptr = 1 To nbre
lig = .Columns(18).Find(valeur, .Cells(lig, 18), xlValues).Row
For cptr2 = 1 To dercol
tablo(cptr, cptr2) = .Cells(lig, cptr2).Value
Next
tablo_lig(cptr) = lig
Next
Application.ScreenUpdating = False
For cptr = nbre To 1 Step -1
.Rows(tablo_lig(cptr)).Delete
Next
End With
With Sheets("Archives")
ligvide = .Range("C65536").End(xlUp).Row + 1
.Cells(ligvide, 1).Resize(nbre, dercol).Value = tablo
End With
End If


Unload Menu
Sheets("Archives").Select
End Sub


Merci d'avance

2 réponses

tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
3 févr. 2010 à 17:28
Salut,
Le probleme vient du redimensionnement de la variable tableau quand aucune valeur n'est égale à "servie" (redimensionnement à 0 non autorisé)
Tu pourrais par exemple ajouter une ligne "If nbre = 0 then exit sub" avant le redim tablo.....
0
gunbafo Messages postés 55 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 18 février 2011 3
4 févr. 2010 à 10:05
Merci Tompols!

Avec cette ligne, le code prend en compte le fait qu'il n'y ait pas de valeur égale à "servie".
Par contre, dans mon classeur Excel j'ai 3 feuilles qui sont concernées par ce code. Donc moi j'ai mis ce code 3 fois de suite sur la commande du même bouton ("CommandButton1" se trouvant sur un Userform qui gère tout mon classeur).

Le problème c'est que quand une valeur "servie" n'est pas renseigné dans la première feuille alors que dans la deuxième, il y en a une de renseignée, alors le code de la deuxième feuille n'agit pas parce que le code de la première feuille agit avec "If nbre = 0 then exit sub".

Alors comment peut-on boucler un seul code pour les 3 feuilles?
ou alors peut -on faire:"If nbre = 0 then exit ..." vers le code de la seconde feuille ( et ainsi de suite du deuxième code vers le troisième.)

Encore merci d'avance du coup de main!
0