problème vba et formule

blancolie

XLDnaute Impliqué
Bonjour le forum,

Ce code suivant me permet d'aller récupérer les données dans 2 colonnes pour faire une seule liste dans le but de créer une liste déroulante. Cela marche très bien. jai décidé de mettre en place une saisie semi-automatique mais je rencontre un problème. je ne sais pas si c'est lié au codage vba (codage qui n'est pas de moi que j'ai adapté à mon fichier, il y a peut-être ligne à rajouter. le soucis et ce qui est drôle, cela se passe toujours à la fin de ma colonne X (fréquence) quand je rajoute un nom dans une des 2 colonnes S (agents) et T (astreinte), dans la colonne fréquence à l'avant dernière ligne, je vois apparaître 2 fois 53 et je devrais voir 53 et 54 mais j'ai à la place une erreur formule colonne incohérente et si je choisit l'option restaurée en tant que formule de colonne calculéé alors la cela fonctionne.

avez vous une idée pour résoudre cela ?

merci


VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim liste$(), tablo, e, n&
If FilterMode Then ShowAllData 'si la feuille est filtrée
'---liste à partir des colonnes sources---
ReDim liste(1 To Rows.Count, 1 To 1)
tablo = Range("S2", Range("S" & Rows.Count).End(xlUp)(3)) 'matrice, plus rapide, au moins 2 éléments,
For Each e In tablo
    If e <> "" Then n = n + 1: liste(n, 1) = e
Next
tablo = Range("T2", Range("T" & Rows.Count).End(xlUp)(3)) 'matrice, plus rapide, au moins 2 éléments
For Each e In tablo
    If e <> "" Then n = n + 1: liste(n, 1) = e
Next
'---restitution---
Application.EnableEvents = False
With [V2] '1ère cellule de restitution, à adapter
    If n Then
        .Resize(n) = liste
        .Resize(n).Name = "Liste" 'plage nommée
    End If
    .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents  'RAZ en dessous
End With
Application.EnableEvents = True
End Sub
 

Pièces jointes

  • Copie de Astreinte-2.xlsm
    178.4 KB · Affichages: 6
Dernière édition:

blancolie

XLDnaute Impliqué
Bonjour PierreJean,

Merci pour ces renseignements. Drôle que le codage vba prend en compte ltout l'ensemble des colonnes w,x,y car elles ne font pas partie du codage. j'ai voulu les mettre sous formes de tableau pour qu'une nouvelle ligne se crée quand on ajoute ligne en plus dans la colonne V.

J'espère pouvoir créer ma saisie semi-automatique.

merci pour tout en cas. Cela me dépanne bien.
 

blancolie

XLDnaute Impliqué
Bonsoir Pierrejean,

j'ai remarqué que quand j'efface les noms ds la colonne S et T, cela efface les formules ds le tableau 12.

je rencontre l''erreur erreur d'execution 1004 : la methode autofil" de l'objet "range" à échoué. cela arrive quand j'efface la cellule T2. ci joint le fichier exemple 1.

il y a t il possible de resoudre cela et def aire en sorte que la première ligne du tableau 12 ne soit jamais effacé ainsi que les formules.

en vou sremerciant
 

Pièces jointes

  • exemple1.xlsm
    175.8 KB · Affichages: 2
  • exemple.xlsm
    178.4 KB · Affichages: 4

pierrejean

XLDnaute Barbatruc
Re
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim liste$(), tablo, e, n&
If FilterMode Then ShowAllData 'si la feuille est filtr_e
'---liste ö partir des colonnes sources---
ReDim liste(1 To Rows.Count, 1 To 1)
tablo = Range("S2", Range("S" & Rows.Count).End(xlUp)(3)) 'matrice, plus rapide, au moins 2 _l_ments,
For Each e In tablo
    If e <> "" Then n = n + 1: liste(n, 1) = e
Next
tablo = Range("T2", Range("T" & Rows.Count).End(xlUp)(3)) 'matrice, plus rapide, au moins 2 _l_ments
For Each e In tablo
    If e <> "" Then n = n + 1: liste(n, 1) = e
Next
'---restitution---
Application.EnableEvents = False
If [S2] = "" And [T2] = "" Then [V2] = ""
With [V2] '1re cellule de restitution, ö adapterr
    If n Then
        .Resize(n) = liste
        .Resize(n).Name = "Liste" 'plage nomm_e
         Range("V" & n + 2 & ":Y" & Rows.Count).ClearContents
         ActiveSheet.ListObjects("Tableau12").Resize Range("$V$1:$Y$" & n + 1)
         If Range("T2") <> "" And Range("S2") <> "" Then Range("X2").AutoFill Destination:=Range("X2:X" & n + 1), Type:=xlFillDefault
    End If
'   .Offset(n).Resize(Rows.Count - n - .Row + 1).ClearContents  'RAZ en dessous
End With
Application.EnableEvents = True
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
314 422
Messages
2 109 447
Membres
110 482
dernier inscrit
ilyxxxh