XL 2010 Erreur avec une variable non ou mal définie

Eric C

XLDnaute Barbatruc
Bonsoir le forum
Bonsoir à toutes & à tous

Je dispose d'une feuille ("Données") de X lignes – Tout se passe depuis la colonne N de cette feuille.
Mon souhait :
- Que chaque ligne qui contient "Oui" (colonne N), soit recopiée dans la feuille ("Oui")
- Que chaque ligne qui contient "Non" (colonne N), soit recopiée dans la feuille ("Non")
- Que chaque ligne qui contient "Bof" (colonne N), soit recopiée dans la feuille ("Bof")
J'ai tenté le fichier joint mais une erreur "91" survient : Variable objet ou variable de bloc With non définie.
Merci à celui ou celle qui prendra de son temps pour regarder où j'ai pêché.

Bonne soirée à toutes & à tous

@+ Eric c
 

Pièces jointes

  • ClasseurEric_c.xlsm
    20.4 KB · Affichages: 6
Solution
Le mien, toujours en rade !!! J'ai rajouté le Case Else (j'ai du lire quelque part que cette instruction n'était pas toujours nécessaire (Dans le présent cas, il ne peut y avoir d'omission car 3 possibilités) ...
Par contre, si je place :
VB:
VB:
Case Else: Set feuille = Nothing
ça ne fonctionne pas
Si je mets :
Code:
Code:
Case Else: Set Feuille = Sheets("Feuil6")
, là, ça fonctionne ????
Tu as des lignes où la colonne N ne comporte ni oui, ni non, ni bof.
Que fait on alors ?
On affecte à feuille la valeur nothing.

Dans la suite du code, tu utilises "With feuille".
Mais si feuille vaut nothing, on ne peut pas désigner les cellules de destination dans feuille.
Il faut donc ne copier les cellules dans feuille que si feuille...

Chris401

XLDnaute Accro
Bonsoir
Voici un code que j'avais dans ma bibliothèque
VB:
Sub Repartition()
Dim i As Integer, lg As Integer
Dim Feuille As String
Application.ScreenUpdating = False

        For i = 4 To Range("N65535").End(xlUp).Row
            Feuille = Cells(i, 14).Value
            On Error Resume Next
            lg = Sheets(Feuille).Range("N65535").End(xlUp).Row + 1
            Rows(i).Copy Sheets(Feuille).Range("A" & lg)
        Next i

End Sub
 

GALOUGALOU

XLDnaute Accro
re eric (on se croise souvent sur le forum)c bonsoir chris401 bonsoir le forum

et un autre code pour le fun (je n'ai pas su adapter le votre)
VB:
Sub Reprtition()
Dim c As Range
Dim feuille As Worksheet
Dim i As Integer
Dim derligne As Integer, dl1 As Integer, dl2 As Integer, dl3 As Integer

 dl1 = 1
 dl2 = 1
 dl3 = 1
 

        With Sheets("Données")
        derligne = .Cells(.Rows.Count, 14).End(xlUp).Row
                          For i = 1 To derligne
                       If .Cells(i, 14) = "Oui" Then .Range("a" & i, "t" & i).Copy Destination:=Sheets("Oui").Range("a" & dl1): dl1 = dl1 + 1
                       If .Cells(i, 14) = "Non" Then .Range("a" & i, "t" & i).Copy Destination:=Sheets("Non").Range("a" & dl2): dl2 = dl2 + 1
                       If .Cells(i, 14) = "Bof" Then .Range("a" & i, "t" & i).Copy Destination:=Sheets("Bof").Range("a" & dl3): dl3 = dl3 + 1
                Next i
        End With

      
End Sub
la macro écrase les données, je n'ai pas modifier le nom de votre macro
cdt
galougalou
 

Eric C

XLDnaute Barbatruc
Bonsoir Chris401

Ton code fonctionne parfaitement et je t'en remercie. Toutefois, j'aimerais savoir pour quelle raison le mien ne fonctionne pas. Tout semble correct mais ... car il y a un mais. Bonne soirée à toi et encore merci de t'être penché sur mon problème.
@+ Eric c
 

Eric C

XLDnaute Barbatruc
Bonsoir GALOUGALOU

Merci de ta participation. Je vais regarder ton code dans la soirée après le repas et la soirée télé. Il est quand même étonnant que le mien ne fonctionne pas ????

Bonne soirée à toi et encore merci.
@+ Eric c
 

Chris401

XLDnaute Accro
Re
1 - J'ai modifié la variable Feuille en Variant
2 - Il manquait le Case si Nx est vide - Je fais aller dans Feuil6 (de toute façon il n'y a rien à copier)
Je ne sais pas ce qu'il faut écrire pour dire "ne rien faire si la cellule est vide"

VB:
Sub Reprtition()
Dim c As Range
Dim Feuille As Variant
Dim i As Byte
Dim derligne As Integer


For Each c In Range("n2:n" & Range("n65536").End(xlUp).Row)
        Select Case c
                Case "Oui": Set Feuille = Sheets("Oui")
                Case "Non": Set Feuille = Sheets("Non")
                Case "Bof": Set Feuille = Sheets("Bof")
                Case Else: Set Feuille = Sheets("Feuil6")
        End Select

        With Feuille
                derligne = .Range("n65536").End(xlUp).Row + 1
                For i = 1 To 15
                        .Cells(derligne, i) = Cells(c.Row, i)
                Next i
        End With
    Next c
       
End Sub
 

mapomme

XLDnaute Barbatruc
Supporter XLD
Bonsoir,

Un autre code:
VB:
Sub Reprtition()
Dim c As Range, feuille As Worksheet

Application.ScreenUpdating = False
For Each c In Range("n2:n" & Range("n65536").End(xlUp).Row)
   Select Case c
      Case "Oui": Set feuille = Sheets("Oui")
      Case "Non": Set feuille = Sheets("Non")
      Case "Bof": Set feuille = Sheets("Bof")
      Case Else: Set feuille = Nothing
   End Select
   If Not feuille Is Nothing Then Rows(c.Row).Copy feuille.Cells(Rows.Count, "n").End(xlUp).Offset(1).EntireRow
Next c
End Sub
 

Eric C

XLDnaute Barbatruc
@ GALOUGALOUY : Ton code fonctionne tip top. Merci
@ Chris401 - Merci d'avoir poursuivi sur le code mais le "Nothing" n'apporte rien de plus.

Bonsoir mapomme. Merci de ta participation. Ton code fonctionne parfaitement.

Le mien, toujours en rade !!! J'ai rajouté le Case Else (j'ai du lire quelque part que cette instruction n'était pas toujours nécessaire (Dans le présent cas, il ne peut y avoir d'omission car 3 possibilités) ...
Par contre, si je place :
VB:
Case Else: Set feuille = Nothing
ça ne fonctionne pas
Si je mets :
Code:
Case Else: Set Feuille = Sheets("Feuil6")
, là, ça fonctionne ????

Encore désolé de vous avoir dérangé.
Bonne soirée
@+ Eric c
 
Dernière édition:

mapomme

XLDnaute Barbatruc
Supporter XLD
Le mien, toujours en rade !!! J'ai rajouté le Case Else (j'ai du lire quelque part que cette instruction n'était pas toujours nécessaire (Dans le présent cas, il ne peut y avoir d'omission car 3 possibilités) ...
Par contre, si je place :
VB:
VB:
Case Else: Set feuille = Nothing
ça ne fonctionne pas
Si je mets :
Code:
Code:
Case Else: Set Feuille = Sheets("Feuil6")
, là, ça fonctionne ????
Tu as des lignes où la colonne N ne comporte ni oui, ni non, ni bof.
Que fait on alors ?
On affecte à feuille la valeur nothing.

Dans la suite du code, tu utilises "With feuille".
Mais si feuille vaut nothing, on ne peut pas désigner les cellules de destination dans feuille.
Il faut donc ne copier les cellules dans feuille que si feuille existe.
Donc la copie ne devra être faite que si if not feuille is nothing

L'erreur est une erreur de logique. Ce ne sont pas toujours les erreurs les plus faciles à débusquer.

NB: si dans ton code, tu affectes à feuille "feuil6", tu pallies le problème. Mais ce n'est pas ce qu'on veut. On ne veut copier que les lignes avec oui, non ou bof.
 

Eric C

XLDnaute Barbatruc
@ mapomme - Trop fort - Bravo, tu as trouvé La faille, Ma coquille. Manque de logique de ma part.
Il est vrai que l'évidence saute aux yeux, une fois révélée......
J'ai donc rajoutée une feuille "Nul" et :
VB:
 Case "": Set Feuille = Sheets("nul")
-

Merci encore aux intervenants 👍👍👍👍👍👍👍👍

Bonne soirée à toutes & à tous
@+ Eric c
 

Discussions similaires

Statistiques des forums

Discussions
312 214
Messages
2 086 311
Membres
103 175
dernier inscrit
abcc