IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Problème fonction removeDuplicates sur classeur partagé [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur en exploitation des systèmes de production
    Inscrit en
    Août 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en exploitation des systèmes de production
    Secteur : Transports

    Informations forums :
    Inscription : Août 2017
    Messages : 20
    Points : 12
    Points
    12
    Par défaut Problème fonction removeDuplicates sur classeur partagé
    Bonjour à tous, j'ai créé une macro qui me permet de faire une espèce d’extraction de donnée dans un autre fichier, tout fonctionnait jusqu’à ce que je mette mon fichier source en partage, j'ai pas mal cherché et il s’avère que c'est la fonction "removeDuplicates" qui ne passe pas en mode partagé.

    Pourtant il n'est pas interdit de supprimer les lignes en partage, je ne comprend pas pourquoi cette fonction ne passe pas, est-il possible de contourner le problème ?


    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    Sub MAJ201()
     'déclaration des variables
        Dim Fichier, rep1, rep2 As String 'chemin du fichier
        Dim shA, shB As Worksheet 'Feuille A
        Dim wB, wA As Workbook 'Classeur
        Dim lignevide, lignevide1, lignevide0, lignevidef1, lignevide2, lignevidef2, lignevide3, i, j, k, feuille As Integer 'compteur1
        
        Fichier = ThisWorkbook.Sheets("listes").Range("A2").Value
        On Error GoTo errorhandler
        
    travail:
        Application.DisplayAlerts = False 'désactive les boites de dialogue
        Application.ScreenUpdating = False 'désactive la mise à jour de l'écran
        
        
        Set wB = Workbooks.Open(Filename:=Fichier) 'pointe le fichier que l'on va extraire
        
        On Error GoTo erreurGénérale
        
        Set shA = ThisWorkbook.Sheets("Data200")
        Set shB = wB.Sheets("Data201")
        
        'MAJ data
        lignevide0 = shB.Range("A" & Rows.Count).End(xlUp).Row + 1 'donne le numero de la premiere ligne vide du wb
        lignevide1 = shA.Range("A" & Rows.Count).End(xlUp).Row + 1
       
      shB.Range("A4", "S" & lignevide0).Copy Destination:=shA.Range("a" & lignevide1)
          lignevidef1 = shA.Range("A" & Rows.Count).End(xlUp).Row + 1
        
        shA.Range("A4", "S" & lignevidef1).RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo 'supprime les doublons
        For ligne = 4 To lignevidef1 Step 1
        If IsEmpty(shA.Range("A" & ligne)) Then
           shA.Rows(ligne & ":" & ligne).Delete
           End If
           Next ligne
        
        shA.Columns.AutoFit 'ajuste les colonnes au texte
        
        'MAJ rapport responsable
        lignevide2 = wB.Sheets("Rapport responsable").Range("A" & Rows.Count).End(xlUp).Row + 1 'donne le numero de la premiere ligne vide du wb
        lignevide3 = ThisWorkbook.Sheets("Items importants").Range("A" & Rows.Count).End(xlUp).Row + 1
       
        wB.Sheets("Rapport responsable").Range("A5", "S" & lignevide2).Copy Destination:=ThisWorkbook.Sheets("Items importants").Range("a" & lignevide3)
          lignevidef2 = ThisWorkbook.Sheets("Items importants").Range("A" & Rows.Count).End(xlUp).Row + 1
          
        wB.Close False ' ferme sans sauve
        
        ThisWorkbook.Sheets("Items importants").Range("A4", "A" & lignevidef2).CurrentRegion.RemoveDuplicates Columns:=Array(1, 2), Header:=xlNo 'supprime les doublons
        
        ThisWorkbook.Sheets("Items importants").Columns.AutoFit 'ajuste les colonnes au texte
        
        For ligne = 4 To lignevidef2 Step 1
        If IsEmpty(shA.Range("A" & ligne)) Then
           shA.Rows(ligne & ":" & ligne).Delete
           End If
           Next ligne
       
        Application.DisplayAlerts = True 'réactive les boites de dialogue
         
        Exit Sub
    
    errorhandler:
        If IsEmpty(Fichier) Then
        Fichier = "Chemin d'acces vide"
        End If
      rep1 = MsgBox("Le fichier est introuvable, le chemin enregistré actuellement est :" & vbLf & vbLf & Fichier & vbLf & vbLf & "Voulez vous le modifier ?", vbYesNo + vbCritical, "Erreur chemin fichier à extraire (UAP202)")
            If rep1 = vbYes Then
    changementFichier:
             Fichier = Application.GetOpenFilename("Tous les fichiers (*.*),*.*") 'Affiche la boîte de dialogue "Ouvrir" et ouvre le fichier selectionné
            ThisWorkbook.Sheets("listes").Range("A2") = Fichier
            GoTo travail
        End If
            If rep1 = vbNo Then
            wB.Close False
        Exit Sub
        End If
    
    erreurGénérale:
        rep2 = MsgBox("Assurez vous de la bonne structure des fichier d'émission et de reception, si le problème persiste contactez l'administrateur." & vbLf & vbLf & "Voulez-vous changer l'emplacement du fichier ?", vbYesNo + vbCritical, "Erreur compilation (UAP201)")
        If rep2 = vbYes Then
        GoTo changementFichier
        End If
         If rep2 = vbNo Then
         wB.Close False
        End If
    End Sub

  2. #2
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par bbosch Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        On Error GoTo errorhandler
        Application.DisplayAlerts = False 'désactive les boites de dialogue
        Application.ScreenUpdating = False 'désactive la mise à jour de l'écran
    Tu fais vraiment le maximum pour que empêcher de voir la source du problème.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Ingénieur en exploitation des systèmes de production
    Inscrit en
    Août 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en exploitation des systèmes de production
    Secteur : Transports

    Informations forums :
    Inscription : Août 2017
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par Menhir Voir le message
    Tu fais vraiment le maximum pour que empêcher de voir la source du problème.
    J'ai fait un maximum pour gérer les erreurs quand le fichier sera utilisé par une personne qui ne connait rien en VBA.

    Je met tout ça en commentaire pour tester le programme. C'est pour ça que je sais que c'est la ligne qui contient le removeDuplicate qui ne passe pas quand je met le classeur en partage.

  4. #4
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    partagé
    ce qui veux dire que le 2d utilisateur qui ouvre le fichier puis tout les suivants ouvrent le fichier en readonly

    tu vois ce que je veux dire ?
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  5. #5
    Membre à l'essai
    Homme Profil pro
    Ingénieur en exploitation des systèmes de production
    Inscrit en
    Août 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en exploitation des systèmes de production
    Secteur : Transports

    Informations forums :
    Inscription : Août 2017
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    partagé
    ce qui veux dire que le 2d utilisateur qui ouvre le fichier puis tout les suivants ouvrent le fichier en readonly

    tu vois ce que je veux dire ?
    Quand le document est en partage tout le monde (enfin ceux autorisés à ecrire dans le dossier) pourra faire tourner cette macro et donc mettre à jour les deux onglets mais le problème c'est que je n'arrive pas à utiliser la fonction "removeDuplicate" quand je met le classeur en mode partage. Le reste fonctionne très bien quand je met cette ligne en commentaire.

    Pourtant en partage on peut supprimer des lignes, c'est cela que je ne comprends pas très bien.

  6. #6
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    avant de tirer des conclusions attives a tu essayé avec une copie de ton classeur en local
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  7. #7
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 082
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 082
    Points : 9 866
    Points
    9 866
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    cette fonctionnalité étant inhibée lors d'un partage de classeur, c'est à toi de rédiger une procédure pour faire le job !

    y'a des exemples facilement accessibles sur Google, et même au sein de ce forum qui propose pas moins de 3 ou 4 méthodes différentes

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur en exploitation des systèmes de production
    Inscrit en
    Août 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en exploitation des systèmes de production
    Secteur : Transports

    Informations forums :
    Inscription : Août 2017
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par patricktoulon Voir le message
    avant de tirer des conclusions attives a tu essayé avec une copie de ton classeur en local
    Oui j'ai essayé sur mon ordi en local et cela ne fonctionne pas non plus !

  9. #9
    Membre à l'essai
    Homme Profil pro
    Ingénieur en exploitation des systèmes de production
    Inscrit en
    Août 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en exploitation des systèmes de production
    Secteur : Transports

    Informations forums :
    Inscription : Août 2017
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Bonjour,

    cette fonctionnalité étant inhibée lors d'un partage de classeur, c'est à toi de rédiger une procédure pour faire le job !

    y'a des exemples facilement accessibles sur Google, et même au sein de ce forum qui propose pas moins de 3 ou 4 méthodes différentes
    D'accord, je me doutais qu'excel avait encore limité ses capacités avec le partage... Dommage ! Je vais rédiger la fonction en espérant que cela ne prennent pas des siècles en l faisant tourner la macro...

    Merci

  10. #10
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Citation Envoyé par bbosch Voir le message
    D'accord, je me doutais qu'excel avait encore limité ses capacités avec le partage...
    On ne le répètera jamais assez : multi-utilisateurs ou (dans une moindre mesure) multi-fichiers = SGDB.
    Très clairement, Excel n'est pas fait pour ça, même s'il est supposé disposer de fonctionnalités qui le permettent.
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Ingénieur en exploitation des systèmes de production
    Inscrit en
    Août 2017
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur en exploitation des systèmes de production
    Secteur : Transports

    Informations forums :
    Inscription : Août 2017
    Messages : 20
    Points : 12
    Points
    12
    Par défaut
    Pour info j'ai réussi à faire une fonction qui a la même fonctionnalité que le removeDuplicate, c'est a dire suppression de lignes si les deux premières cellules sont identiques (on peut faire avec plus) :

    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
     
    Function supprimerDoublons(ligne0 As Integer, lignevide1 As Integer, sht As Worksheet)
     
    For D = ligne0 To lignevide1 Step 1
        For i = D + 1 To lignevidef Step 1
            If sht.Cells(i, 1).Value = sht.Cells(D, 1).Value And sht.Cells(i, 2).Value = sht.Cells(D, 2).Value And Not IsEmpty(sht.Cells(i, 1)) And Not IsEmpty(sht.Cells(i, 2)) Then
            sht.Rows(i & ":" & i).Delete
            lignevidef = lignevidef - 1
            i = i - 1
            Else
            End If
        Next i
    Next D
     
    End Function
    Je l'ai testé et ça fonctionne bien, mais ça reste du bricolage.

    Dans cette fonction il faut mettre dans ligne0 la ligne de départ du tableau et dans lignevidef la ligne vide a la fin du tableau (et non la dernière ligne du tableau) et bien sur déclarer avec sht l'endroit ou on veut mettre en pratique la formule.

    Je ne l'ai pas fait dedans mais on pourrait calculer la dernière ligne directement dans la fonction...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Problème fonction CountIfs sur plusieurs classeurs fermés
    Par Qril59 dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 25/04/2013, 09h45
  2. Problème fonction file() sur hébergeur
    Par borisman dans le forum Langage
    Réponses: 3
    Dernier message: 27/03/2011, 20h56
  3. [XL-2003] message d'erreur sur classeur partagé
    Par MarcelG dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/03/2010, 18h21
  4. Problème de droits sur un partage samba
    Par Mindiell dans le forum Debian
    Réponses: 2
    Dernier message: 05/11/2008, 21h04
  5. [FTP] Accès refusé >> Fonction Copy Sur un partage !
    Par needles94000 dans le forum Langage
    Réponses: 4
    Dernier message: 06/04/2006, 00h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo