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 :
- 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 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
Suivant:
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
Et maintenant, le mix des deux codes en changeant quelques variable
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
bien sur :
Suivant:
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
Et là grosse cata : " Erreur d'execution '91' : Variable objet ou variable de bloc With non définie "
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
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 :'(
Partager