Méthode Select echoue

JORDAN

XLDnaute Impliqué
Bonjour le Forum,

J'ai encore un pb avec le code ci-dessous.
Jacques87 m'avait dépanné mais ça bug encore au niveau de la ligne Sheets(NomFeuille).Cells(L, 1).Select
l'erreur retournée est la suivante : La méthode Select de la classe Range a échoué.
Ls valeurs NomFeuille et L sont pourtant bonnes.
Si quelqu'un avait une petite idée !!!

Merci

Code:
Dim i As Byte
Dim L As Integer

Application.Goto Sheets('RESULTAT').Range('A1')
For i = 1 To Range('C65536').End(xlUp).Row
    If Cells(i, 3).Value = NomFeuille Then
        Range('A' & i & ':B' & i & ',D' & i).Select
        Selection.Copy
        Application.Goto Sheets(NomFeuille).Range('A9')
        If Sheets(NomFeuille).Cells(10, 1).Value = '' Then
            Sheets(NomFeuille).Cells(10, 1).Select
            ActiveSheet.Paste
            Sheets('RESULTAT').Select
        Else
            For L = 10 To 49
            If Sheets(NomFeuille).Cells(L, 1).Value = '' Then
                [color=#0000FF]Sheets(NomFeuille).Cells(L, 1).Select[/color]
                ActiveSheet.Paste
                Sheets('RESULTAT').Select
            End If
            Next L
        End If
    End If
Next i
 

porcinet82

XLDnaute Barbatruc
Salut Jordan,

Je viens de faire un test avec ton code et chez moi il a l'air de fonctionner, mais il en manque un morceau je suppose puisque la variable NomFeuille ne contient pas de valeur, j'ai donc du réaliser une simulation.
Peut etre qu'avec ton fichier ce serait plus facile.

@+
 

JORDAN

XLDnaute Impliqué
Bonjour Porcinet82,

Merci pour tes essais
Mon fichier est tros gros env. 200 k zippé
La variable NomFeuille provient d'une combobox sur un USF. Quand je suis en mode débogage et que je pointe la souris sur la variable, je peux controler que le contenu est correct.

Je vais essayer de faire du ménage dans mon fichier pour le joindre.

Encore merci
A+
 

Charly2

Nous a quittés en 2006
Repose en paix
Bonsoir JORDAN, bonsoir Porcinet, bonsoir à toutes et à tous :)

JORDAN, j'avais lu le fil dans lequel tu demandais pourquoi ton code n'allait pas au-delà de la ligne 11. Du coup, tu as rajouté un bout de code pour réussir à faire ce que tu souhaitais, mais honnêtement, ça n'était pas satistaisant.

Je crois que dans de tels cas, il vaut mieux casser son code et tout revoir plutôt que d'ajouter des pansements :sick:

Je te propose le code joint (à toi de voir s'il correspond à ce que tu attends) :

Dim i%
Dim L%
'
  ' on détermine la ligne de la première cellule vide de la
  ' feuille 'NomFeuille' srictement inférieure à 49 (d'autres
  ' données à partir de la ligne 50)

  L = 10
  Do While L ‹= 49 And Sheets(NomFeuille).Cells(L, 1) ‹› ''
    L = L + 1
  Loop
  '
  ' Si L est inférieur ou égal à 49, c'est qu'une ligne vide
  ' a été trouvée, les suivantes (jusqu'à 49) sont également
  ' vides.

  If L <= 49 Then
    '
    ' on sélectionne la feuille 'RESULTAT'
    Sheets('RESULTAT').Select
    '
    ' Puis, pour chaque ligne de 1 à la dernière ligne de données
    ' de la colonne C (feuille RESULTAT)

    For i = 1 To Range('C65536').End(xlUp).Row
      '
      ' si dans la colonne C, ligne i on trouve la valeur
      ' NomFeuille, les données sont à copier sur cette
      ' feuille

      If Cells(i, 3).Value = NomFeuille Then
        '
        ' on copie donc les données voulues de la ligne i de la
        ' feuille RESULTAT vers la ligne L de la feuille NomFeuille

        Range('A' & i & ':B' & i & ',D' & i).Select
        Selection.Copy Sheets(NomFeuille).Cells(L, 1)
        '
        ' puis on incrémente L jusqu'à 49 (sortie de boucle à 50)

        L = L + 1
        If L › 49 Then Exit For
      End If
    Next i
  End If

Attention aux signes ‹ et › si tu fais un copier/coller.

Maintenant, l'explication de l'erreur qui se produisait après la 2ème copie et lors du 2ème passage dans la boucle For i = ...

Reprends ton code et regarde ce qu'il se passe :

1) tu rentres dans ta boucle For i donc i = 1, à ce stade, la feuille RESULTAT est la feuille active,

2) tu actives la feuille NomFeuille,

3) la ligne 10 colonne A est vide (c'est évident si tu as réussi à copier 2 lignes) donc tu entres dans le If Sheets(NomFeuille).Cells(10, 1).Value = '' Then

4) tu sélectionnes, tu colles et tu rends à nouveau la feuille RESULTAT active,

4) retour à la boucle For i et i = 2, (ou plus mais on va partir de l'hypothèse que Cells(2, 3).Value = NomFeuille)

5) tu copies, tu sélectionnes la feuille NomFeuille mais là, tu entres dans le 'sinon' du If Sheets(NomFeuille).Cells(10, 1).Value = '' Then,

6) zut !!! une nouvelle boucle For avec L,

7) Cells(10, 1) a déjà été rempli, donc on passe à la ligne 11 (qui est vide)

8) la cellule (L, 1) est sélectionnée, copie sur cette ligne, puis activation de la feuille RESULTAT, mais... on continue la boucle For L = ...

9) au 2ème passage dans le If de cette boucle, tu essaies de sélectionner une cellule de la feuille NomFeuille, or, c'est maintenant la feuille RESULTAT qui est active !!! :sick:
donc PLANTAGE ...

Voili voilà

J'espère avoir été clair :unsure:

A+ ;)
 

JORDAN

XLDnaute Impliqué
Bonjour Charly, Porcinet, le Forum,

Je te remercie beaucoup Charly pour le temps que tu as passé pour répondre à mon problème.

Avec tes explications c'est vrai que l'erreur parrait évidente.

J'ai installé ton code à la place du mien et là ... comme par magie, tout fonctionne à merveille.

J'utilise souvent les boucles For To ... Next au détriment de Do While ... Loop qui parfois est bien plus efficace et même indispensable.

Je te dis encore un grand merci et te souhaite une bonne journée

A+
Jordan
 

Statistiques des forums

Discussions
312 330
Messages
2 087 349
Membres
103 526
dernier inscrit
HEC