Probleme sur boucle Do While

treza88

XLDnaute Occasionnel
Bonjour à tous,

Je vous demande conseille sur un probleme sur une boucle Do While sur une erreur "La methode range de l'objet_Global a echoué" la variable derniereligne reste bloqué a 65537 et me met cette erreur, et je n'arrive pas as trouver d'ou cela vient.

Si quelqu'un peut me donner un coup de main, Merci d'avance.


Code:
 Private Sub Ajouter_Click()
    Dim i As Integer
    Dim Adresse As String
    Dim Feuil As Worksheet
    Dim lastCell As Range
    Adresse = ComboBox3.Text
    If Application.CountIf(Workbooks("BdQuincaillerie.xls").Sheets(Nomfeuil).Columns("C"), Adresse) >= 1 Then
        MsgBox "La donnée '" & "' existe déjà dans la cellule " & Adresse
    Else
        With Workbooks("BdQuincaillerie.xls").Sheets(Nomfeuil)
            Dim premiereligne As Long
            Dim derniereligne As Long
            Dim x As Range
            Dim x2 As Variant
            Set x = Workbooks("BdQuincaillerie.xls").Sheets(Nomfeuil).Range("B:B").Find(ComboBox2.Text, , xlValues, xlWhole, , , False)
            If Not x Is Nothing Then x2 = x.Address
            .Range(x2).EntireRow.Insert Shift:=xlDown
            .Range(x2).Offset(0, -1).Value = ComboBox1.Text
            .Range(x2).Offset(0, 0).Value = ComboBox2.Text
            .Range(x2).Offset(0, 1).Value = ComboBox3.Text
            .Range(x2).Offset(0, 2).Value = Tb_Designation.Text
            '1ère ligne où commence les données
            i = Range(x2).Row
            premiereligne = i
            'définies que la dernière ligne à chercher commence à la ligne suivante
            derniereligne = i + 1
            'boucle tant que les 2 valeurs sont égales
Do While Range("B" & derniereligne) = Range("B" & premiereligne)
                'en incrémentant à chaque passage la ligne
                derniereligne = derniereligne + 1
            Loop
            'selectionne de la première cellule à la dernière trouvée -1
            'sinon selectionne la première différente et non la dernière égale !
            Range(Cells(premiereligne, 1), Cells(derniereligne - 1, 4)).Select
            'Trie Par ordre alphabetique la plage selectionner
            Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _
                           OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                           DataOption1:=xlSortNormal

        End With
    End If
    
Set lastCell = Range("D65536").End(xlUp)
    lastCell.Select
    ActiveCell.Offset(1, -1).Select
    Dim Ligne As Integer, Colonne As Integer
    Ligne = lastCell.Row - 26
    If Ligne >= 0 Then
        With ActiveWindow
            .ScrollRow = Ligne + 1
        End With
    End If
End Sub
 
Dernière édition:

Fred0o

XLDnaute Barbatruc
Re : Probleme sur boucle Do While

Bonsoir 13,

Si tu es en EXCEL 2002 / 2003, c'est normal que ça plante car le nombre maxi de lignes est de 65536. Cela ne sert donc à rien d'aller au delà.

Tu peux donc modifier ton Do comme ceci pour contourner le problème :
VB:
Do While Range("B" & derniereligne) = Range("B" & premiereligne) And derniereligne < 65536

A+
 

treza88

XLDnaute Occasionnel
Re : Probleme sur boucle Do While

Merci Fred0o,

Je voyais bien le probleme mais pas comment le resoudre car avant j'avais ma variable qui etait un integer et ça bloquait avec une erreur de capacité vers les 32000, à la capacité maxi en integer, c'est pour cela que j'etais passé en long.
Maintenant je pourrai meme remettre ma variable en integer en modifiant le supplement de code que tu m'as donné.
Inpec je n'aurais pas trouvé tout seul comment la modifier et je pensais au pire choisir un autre type de boucle pour resoudre mon probleme, car je n'utilise pas les boucle Do d'abitude et j'ai un peu de difficulté a compendre completement leurs fonctionnements.

Encore merci pour le coup de pouce.
 

Statistiques des forums

Discussions
312 321
Messages
2 087 232
Membres
103 497
dernier inscrit
JP9231