Problème liaison et champs REF

joelpelle

XLDnaute Junior
Bonjour le Forum,

Je reviens vers vous pour un nouveau problème !
J'ai créé une feuille Classeur1, dans un dossier Test, qui m'importe tous les fichiers fermés d'un sous dossier Test\Prov (Cf zio joints)
Ca fonctionne trés bien.
Chaque onglet (1,2,3,4) est rajouté à Classeur1 et possède des champs nommés repris dans l'onglet SYNTHESE de Classeur1
La première importation se passe bien, et je retrouve mes valeurs dans les cellules références.
Le problème se corse quand je supprime les onglets et que je refais la manip : mes cellules font apparaitre une erreur REF.
Je suis obligé d'aller dans Formules -> Gestionnaire de noms, puis supprimer tous les champs REF manuellement.
Comment contourner ce problème qui m'a cassé la tête tout ce W-E ?:mad:
Comme j'ai 31 fichiers à importer toutes les semaines, et que les valeurs ainsi que les fichiers changent, avec en plus une dizaine de cellules nommées, je vous dis pas.
Je précise que tous ces fichiers ont la même structure, seul la valeur des champs et onglets change.
Merci pour votre aide toujours aussi précieuse et cordiale.
Amicalement
 

Pièces jointes

  • Classeur1.zip
    14.3 KB · Affichages: 26
  • Prov.zip
    14.5 KB · Affichages: 24
  • Classeur1.zip
    14.3 KB · Affichages: 22
  • Prov.zip
    14.5 KB · Affichages: 25
  • Classeur1.zip
    14.3 KB · Affichages: 23
  • Prov.zip
    14.5 KB · Affichages: 23

joelpelle

XLDnaute Junior
Re : Problème liaison et champs REF

Bonjour JNP,

Toujours aussi rapide et précis :cool:

C'est nickel.

Et puisque tu es là, je sais, je vais abuser, mais comme tu m'as bien dépanné la semaine dernière avec ce code:
With Target
If Intersect(Target, Range("B:AQ")) Is Nothing Or .Text = "" Or .Count > 1 Then Exit Sub
Adresse = "B" & .Row - Weekday(Range("A" & .Row)) + 1 & ":AQ" & .Row - Weekday(Range("A" & .Row)) + 7
Nombre = Evaluate("countif(" & Intersect(.EntireColumn, Range(Adresse)).Address & ",""" & .Text & """)")
If Nombre > 1 Then
If Evaluate("countif(" & Adresse & ",""" & .Text & """)") - Nombre > 1 Then
MsgBox "Il existe déjà une formation pour cet établissement cette semaine !", vbCritical + vbOKOnly, "ATTENTION !"
.ClearContents
End If
Else
If Evaluate("countif(" & Adresse & ",""" & .Text & """)") > 1 Then
MsgBox "Il existe déjà une formation pour cet établissement cette semaine !", vbCritical + vbOKOnly, "ATTENTION !"
.ClearContents
End If
End If

End With


Comment puis-je contrôler mes doublons uniquement sur les colonnes BC, GH, LM ???:confused:

Excellente semaine à tous
Bien cordialement
 

joelpelle

XLDnaute Junior
Re : Problème liaison et champs REF

Bonjour JNP, le fil,

Re :),
Pas sûr d'avoir bien suivi la question :rolleyes:

C'est parce qu'elle était mal posée :confused:

Ton code vérifie toutes les colonnes de B à AQ par tranche de 1 semaine pour repérer les doublons.
Ca fonctionne très bien.
Les colonnes qui m'importent sont les col BC, GH, LM, QR, VW etc... dans lesquelles il ne doit pas y avoir de doublons, par contre je souhaiterais, zapper la vérification les colonnes intermédiaires (D à E, I à K, Nà R etc...dans lesquelles il peut y en avoir.
On vérifie 2 colonnes, on en saute 3 etc...
Compliqué, mais possible ???

Merci pour ton aide.
Bien cordialement
 

JNP

XLDnaute Barbatruc
Re : Problème liaison et champs REF

Re :),
A tester et complèter (sans garantie) :p
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Nombre As Integer, Adresse As String, Plage As Range
With Target
    If Intersect(Target, Range("B:C,G:H,L:M,Q:R,V:W")) Is Nothing Or .Text = "" Or .Count > 1 Then Exit Sub
    Adresse = "B" & .Row - Weekday(Range("A" & .Row)) + 1 & ":F" & .Row - Weekday(Range("A" & .Row)) + 7
    Set Plage = Intersect(Range(Adresse), Range("B:C,G:H,L:M,Q:R,V:W"))
    Nombre = Evaluate("countif(" & Intersect(.EntireColumn, Plage).Address & ",""" & .Text & """)")
    If Nombre > 1 Then
        If Evaluate("countif(" & Plage.Address & ",""" & .Text & """)") - Nombre > 1 Then
            MsgBox "Valeur en doublon !", vbCritical + vbOKOnly, "ATTENTION !"
            .ClearContents
        End If
    Else
        If Evaluate("countif(" & Plage.Address & ",""" & .Text & """)") > 1 Then
            MsgBox "Valeur en doublon !", vbCritical + vbOKOnly, "ATTENTION !"
            .ClearContents
        End If
    End If
End With
End Sub
Bonne suite :cool:
 

joelpelle

XLDnaute Junior
Re : Problème liaison et champs REF

Re, JNP, le fil,

Apparemment ça plante ici:

Nombre = Evaluate("countif(" & Intersect(.EntireColumn, Plage).Address & ",""" & .Text & """)")

avec erreur : Appel de procédure ou argument incorrect

Mais bon c'est pas grave, comme on disait dans Prison Break : A l'impossible nul détenu ;) C'est juste que je suis pinailleur et que je n'en ai pas les moyens !!!

Bien cordialement
 

JNP

XLDnaute Barbatruc
Re : Problème liaison et champs REF

Re :),
En changeant de méthode (plus longue) :p
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cellule As Range, Adresse As String, Plage As Range
With Target
    If Intersect(Target, Range("B:C,G:H,L:M,Q:R,V:W")) Is Nothing Or .Text = "" Or .Count > 1 Then Exit Sub
    Adresse = "B" & .Row - Weekday(Range("A" & .Row)) + 1 & ":W" & .Row - Weekday(Range("A" & .Row)) + 7
    Set Plage = Intersect(Range(Adresse), Range("B:C,G:H,L:M,Q:R,V:W"))
    For Each Cellule In Plage
        If Cellule = Target And Cellule.Column <> Target.Column Then
            MsgBox "Valeur en doublon !", vbCritical + vbOKOnly, "ATTENTION !"
            .ClearContents
            Exit Sub
        End If
    Next Cellule
End With
End Sub
Bonne fin :cool:
 

Discussions similaires

Réponses
2
Affichages
418

Statistiques des forums

Discussions
312 508
Messages
2 089 143
Membres
104 050
dernier inscrit
Pepito93100