Bonjour,

Voilà je suis nouvelle en VBA et je bloque depuis ce matin à cause d'un problème (cf titre) que je n'arrive pas à résoudre.

L'objectif :

A partir d'une feuille source contenant un tableau, j'aimerais pouvoir créer une nouvelle feuille pour chaque nom différents présents dans une seule des colonnes du tableau. Ensuite il faut copier les lignes de chaque nom, dans la feuille correspondante (qui vient d'être crée à son nom).

- Pour cela j'ai d'abord réalisé un code qui me permet de copier coller sur une nouvelle feuille toutes les lignes qui m'intéresse du tableau de la premiere feuille.

- J'ai ensuite réalisé un code permettant de créer une feuille pour chacun des noms présents dans la colonne du tableau de la premiere feuille.

J'ai donc ensuite essayé de faire un mélange des deux codes pour obtenir mon code final mais c'est là que ca bloque et je ne comprends pas pourquoi

- Voilà le premier code qui permet de copier coller sur une nouvelle feuille :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Sub Test()
 
Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
 
  Sheets("feuil2").Activate ' feuille de destination
 
  Col = "D"                 ' colonne données non vides à tester'
  NumLig = 0          'Numero de la 1ere ligne de collage '
  With Sheets("feuil1")     ' feuille source'
  NbrLig = .Cells(65536, Col).End(xlUp).Row 'Nombre de ligne
  For Lig = 2 To NbrLig             'n° de la 1ere ligne de données à partir de laquelle on commence jusqu'à NbrLig'
    If .Cells(Lig, Col).Value = "EHCA" Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Sheets("feuil2").Cells(NumLig, 1).Insert Shift:=xlDown
            'ici pour insérer ou  .Paste pour coller'
    End If
  Next
  End With
End Sub
- Voilà maintenant le deuxième code qui permet de créer des nouvelles feuilles :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit
 Dim maColonne As Integer

Sub AjoutFeuilles()
 Dim derLi As Long
 Dim i As Integer
 Dim maFeuille As Worksheet
 Set maFeuille = ActiveSheet[/COLOR]
 maColonne = 4  ' numéro de colonne a ajuster, ici c'est 1
 derLi = Columns(maColonne).Find("*", , , , , xlPrevious).Row 'derniere ligne, derli = 13 par ex'
 For i = 2 To derLi ' 2 si ligne de titre
 'Si la feuille existe déjà, on passe à la ligne suivante
 If FeuilleExiste(maFeuille.Cells(i, maColonne)) Then GoTo Suivant
 ' ajout d'une feuille à la fin
 Sheets.Add after:=Sheets(Worksheets.Count)
 ' nom de la feuille = valeur de la cellule
 Sheets(Worksheets.Count).Name = maFeuille.Cells(i, maColonne)
[COLOR=#FF0000]Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
  
Sheets(Worksheets.Count).Activate ' feuille de destination
Col = "D"                 ' colonne données non vides à tester'
  NumLig = 0          'Numero de la 1ere ligne de collage '
  With Sheets("feuil1")     ' feuille source'
  NbrLig = .Cells(65536, Col).End(xlUp).Row 'Nombre de ligne
  For Lig = 2 To NbrLig             'n° de la 1ere ligne de données à partir de laquelle on commence jusqu'à NbrLig'
    If .Cells(Lig, Col).Value = "maFeuille.Cells(i, maColonne)" Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Sheets(Worksheets.Count).Cells(NumLig, 1).Insert Shift:=xlDown
            'ici pour insérer ou  .Paste pour coller'
    End If
  Next
  End With
Suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 Next
 'on retourne à la feuille d'origine
 maFeuille.Select
 Set maFeuille = Nothing
 End Sub
 Function FeuilleExiste(Nom$) As Boolean 'Ti
 On Error Resume Next
 FeuilleExiste = Sheets(Nom).Name <> ""
 End Function
 Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = maColonne Then AjoutFeuilles
 End Sub
Et maintenant, le mix des deux codes en changeant quelques variable
bien sur :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Option Explicit
 Dim maColonne As Integer
 
Sub AjoutFeuilles()
 Dim derLi As Long
 Dim i As Integer
 Dim maFeuille As Worksheet
 Set maFeuille = ActiveSheet
 maColonne = 4  ' numéro de colonne a ajuster, ici c'est 1
derLi = Columns(maColonne).Find("*", , , , , xlPrevious).Row 'derniere ligne, derli = 13 par ex'
 For i = 2 To derLi ' 2 si ligne de titre
 'Si la feuille existe déjà, on passe à la ligne suivante
 If FeuilleExiste(maFeuille.Cells(i, maColonne)) Then GoTo Suivant
 ' ajout d'une feuille à la fin
 Sheets.Add after:=Sheets(Worksheets.Count)
 ' nom de la feuille = valeur de la cellule
 Sheets(Worksheets.Count).Name = maFeuille.Cells(i, maColonne)
Dim Lig     As Long
  Dim Col     As String
  Dim NbrLig  As Long
  Dim NumLig  As Long
 
Sheets(Worksheets.Count).Activate ' feuille de destination
Col = "D"                 ' colonne données non vides à tester'
  NumLig = 0          'Numero de la 1ere ligne de collage '
  With Sheets("feuil1")     ' feuille source'
  NbrLig = .Cells(65536, Col).End(xlUp).Row 'Nombre de ligne
  For Lig = 2 To NbrLig             'n° de la 1ere ligne de données à partir de laquelle on commence jusqu'à NbrLig'
    If .Cells(Lig, Col).Value = "maFeuille.Cells(i, maColonne)" Then
      .Cells(Lig, Col).EntireRow.Copy
      NumLig = NumLig + 1
      Sheets(Worksheets.Count).Cells(NumLig, 1).Insert Shift:=xlDown
            'ici pour insérer ou  .Paste pour coller'
    End If
  Next
  End With
Suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
 Next
 'on retourne à la feuille d'origine
 maFeuille.Select
 Set maFeuille = Nothing
End Sub
 Function FeuilleExiste(Nom$) As Boolean 'Ti
 On Error Resume Next
 FeuilleExiste = Sheets(Nom).Name <> ""
 End Function
 Private Sub Worksheet_Change(ByVal Target As Range)
 If Target.Column = maColonne Then AjoutFeuilles
 End Sub
Et là grosse cata : " Erreur d'execution '91' : Variable objet ou variable de bloc With non définie "

Merci à celui ou celle qui pourra m'aider, je suis nouvelle en VBA et je ne comprends pas du tous d'où vient l'erreur :'(