Code 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 - 28 janv. 2010 à 11:32
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 - 28 janv. 2010 à 12:01
Bonjour,

J'ai le code ci-dessous que j'ai récupérer sur internet et améliorer à ma sauce mais il Bug à partir de la ligne "ReDim tablo(nbr,dercol)"
Ce que je cherche à faire avec ce code c'est:
Quand clic sur 'image_3", Toutes les lignes (feuille A) ayant écrit "servie" dans la colonne 18 soient couper et coller dans la feuille B à la suite les unes des autres pour des utilisations répétées.
Il est possible qu'il n'y ait aucune ligne avec le "servie" renseigné ou plusieurs en même temps. Et dans ces 2 cas le bug intervient.

Option Base 1
Option Explicit
Const valeur As String = "servie"

Private Sub Image3_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("A").Columns(18), valeur)
ReDim tablo(nbre, dercol)
ReDim tablo_lig(nbre)
If nbre > 0 Then
With Sheets("A")
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("B")
ligvide = .Range("C65536").End(xlUp).Row + 1
.Cells(ligvide, 1).Resize(nbre, dercol).Value = tablo
End With
End If

Merci de jeter un ccoup d'oeil si quelqu'un peu m'arranger ce problème
A voir également:

3 réponses

garion28 Messages postés 1543 Date d'inscription mardi 16 juin 2009 Statut Membre Dernière intervention 3 avril 2011 404
28 janv. 2010 à 11:39
vérifi sur valeur contient bien ta chaine,
ensuite tu n'as pas déclaré tablo en tant que tel
un tableau a 2 dimension se déclare:
dim tableau()() as variant (dans ton cas)

enfin si je ne me suis pas trompé sur le tableau()() ^^
0
gunbafo Messages postés 55 Date d'inscription jeudi 16 juillet 2009 Statut Membre Dernière intervention 18 février 2011 3
28 janv. 2010 à 11:57
En fait je viens de refaire la manip avec quelques modifs
Et le problème apparaît seulement quand j'ai aucune ligne avec le "servie" renseigné

Le problème est d'autant plus chiant parce que je fais cette manip avec 2 autre feuilles commandées avec le mm bouton. Et quand sur une feuille il y a des lignes "servie" mais pas sur l'autre, alors là ça plante aussi!

Alors j'ai essayé d'intégrer:
"Dim tablo as variant" dans la déclaration de variable mais ça ne marche pas!

Merci de ton aide Garion
0
tompols Messages postés 1273 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 25 novembre 2013 435
28 janv. 2010 à 12:01
Salut,
essaie comme ceci, pas de tableau utilisé, peut peut éventuellement ajouter un compteur pour savoir combien de lignes ont été transferées :
Private Sub Image3_click() 

Dim derligA As Integer
Dim ligvideB As Integer

derligA = Sheets("A").Range("C65536").End(xlUp).Row
ligvideB = Sheets("B").Range("C65536").End(xlUp).Row + 1

For i = derligA To 2 Step -1
    If Sheets("A").Range("R" & i).Value = "servie" Then
        Sheets("A").Rows(i).Copy Destination:=Sheets("B").Rows(ligvideB)
        Sheets("A").Rows(i).Delete
        ligvideB = ligvideB + 1
    End If
Next i

End Sub
0