Erreur sur code VBA - Décalage non voulu

Antho35

XLDnaute Occasionnel
Bonjour,

J'ai un petit souccit avec mon code vba contenu dans "fiches secteur"

Il y a un décalage, théoriquement mon tableau données démographique doit venir juste aprés le tableau 'les communes du secteur" si je met le code indiqué ci-après çà décale de façon anormal.

Qui a un petit idée, je pense que je n'en suis pas loin.

Code:
Dim test As Boolean 'déclare la variable test

Private Sub Worksheet_Change(ByVal Target As Range)
Dim o As Object 'déclare la variable o (Onglet)
Dim dl As Long 'déclare la variable dl (Dernière Ligne)
Dim pl As Range 'déclare la variable pl (PLage)
Dim nl As Integer 'décalre la variable nl

If test = True Then Exit Sub 'si test est "vrai", sort de la procédure
If Target.Address <> "$J$2" Then Exit Sub 'si le chamgement a lieu ailleurs qu'en J2, sort de la procédure
Application.ScreenUpdating = False 'masque les raffraîchissements d'écran
test = True 'définit la variable test
'efface les éventuelles anciennes données
If Range("C5") <> "DONNES DEMOGRAPHIQUE" Then Range("C5").CurrentRegion.Resize(Range("C5").CurrentRegion.Rows.Count + 1).EntireRow.Delete
Set o = Sheets("Bases Communes") 'définit l'onglet o
dl = o.Cells(Application.Rows.Count, 1).End(xlUp).Rows 'définit la dernière ligne éditée dl de la colonne 1 (=A)
Set pl = o.Range("A2:D" & dl) 'définit la plage pl
o.Range("A2").AutoFilter Field:=5, Criteria1:=Target.Value 'filte le tableau par rapport au secteur
pl.SpecialCells(xlCellTypeVisible).Copy Range("C8") 'copie le tableau filtrée
nl = Range("C8").CurrentRegion.Rows.Count
o.Range("A2").AutoFilter 'supprime le filtre
Range("C5:G7").Cut
Range("C5:G7").Offset(nl + 4, 0).Insert Shift:=xlDown
test = False 'redéfinit la variable test
Application.ScreenUpdating = True 'affiche les raffraîchissements d'écran
End Sub

Et voici le fichier.

Merci
 

Pièces jointes

  • Test 01.xlsx
    25.6 KB · Affichages: 75
  • Test 01.xlsx
    25.6 KB · Affichages: 83
  • Test 01.xlsx
    25.6 KB · Affichages: 81
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : Erreur sur code VBA - Décalage non voulu

Re

Cliques sur l'image (voir en taille réelle)
antho35.jpg
Puis relis attentivement le code de mon dernier message et regardes si rien ne diffère chez toi.
 

Staple1600

XLDnaute Barbatruc
Re : Erreur sur code VBA - Décalage non voulu

Re

Dernier acte: la recopie
(Pour infos: toutes les infos étaient déjà là dans le fil ...)
Test OK chez moi la copie se fait.
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
'Déclarations des variables
Dim  pl As Range, derl&, nl&, dl&

If test = True Then Exit Sub
If Target.Address <> "$K$2" Then Exit Sub
Application.ScreenUpdating = False
    test = True
    Rows(3).Resize(1000).Clear
    With Sheets("Bases Communes")
        dl = .Range("A" & .Rows.Count).End(xlUp).Row
        Set pl = .Range("A4:H" & dl)
        .Range("A4").AutoFilter Field:=9, Criteria1:=Sheets("Fiche Secteur").[K2] 'filte le tableau par rapport au secteur
        nl = .Range("A4:A" & .Range("A65536").End(xlUp).Row).SpecialCells(12).Count
        pl.SpecialCells(12).Copy Range("A2") 'copie le tableau filtrée
        .Range("A4").AutoFilter
    End With
    test = False
Application.ScreenUpdating = True
End Sub
 

Antho35

XLDnaute Occasionnel
Re : Erreur sur code VBA - Décalage non voulu

Ok la çà fonctionne, juste un petit bémole si je met 8 (qui n'a pas contenu dans le tableau) j'obtient, une erreur de dépassement.

Maintenant que cela fonctionne, comment dois je faire pour faire la même choses avec mes autres tableaux ?
 

Staple1600

XLDnaute Barbatruc
Re : Erreur sur code VBA - Décalage non voulu

Re

Maintenant que cela fonctionne, comment dois je faire pour faire la même choses avec mes autres tableaux ?
Alors si j'étais toi, c'est à dire si j'y allais à tâtons avec VBA parce que étant au début de l'apprentissage de la chose
1) je lirai chaque ligne de code pour bien comprendre ce que chaque ligne fait
2) en cas de doute, j'ajouterai des MsgBox pour tester mes variables (comme je l'ai fait précédemment dans le fil)
3) je modifierai le noms des feuilles, les adresses des cellules selon les besoins.
4) et surtout j'essaierai d'être attentif à ma syntaxe.

Tu as toutes les infos et plus dans le fil pour faire ce qu'il y a faire.
YAPLUKA ;)
 

Antho35

XLDnaute Occasionnel
Re : Erreur sur code VBA - Décalage non voulu

Je suppose que la ligne

Dim pl As Range, derl&, nl&, dl&

Me permet de déclarer en une seul fois tout les "pl / nl / dl" plutôt que d'avoir autant de ligne que de variable ???

Je suppose aussi que je dois avoir autant de With sheets que d'onglet ou la cellule K2 a besoin d'aller chercher ?
 

Staple1600

XLDnaute Barbatruc
Re : Erreur sur code VBA - Décalage non voulu

Re


Pour ce qui concerne les variables
(en premier lieu, dans Excel: faire ALT+F11 puis F1)
ou lire ceci

Pour le reste, faire des suppositions c'est bien.
La prochaine étape c'est tester ces suppositions pour les infirmer ou les confirmer.

Bons tests

M'en vais voir le match.
A+ tard.
 

Discussions similaires

Réponses
7
Affichages
686

Statistiques des forums

Discussions
315 091
Messages
2 116 111
Membres
112 662
dernier inscrit
lou75