Excel VBA
Résolu
gunbafo
Messages postés
55
Date d'inscription
Statut
Membre
Dernière intervention
-
gunbafo Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
gunbafo Messages postés 55 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Excel VBA
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel compter cellule couleur sans vba - Guide
2 réponses
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.....
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.....
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!
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!