Problème de liaison entre classeurs

biboupifa Messages postés 54 Statut Membre -  
biboupifa Messages postés 54 Statut Membre -
Bonjour,

Je vais tacher d'etre le plus clair possible mais la chose étant ce n'est pas tres simple.

J'ai créé un classeur excel que je nomme pifa que je considère comme logiciel car il contient toutes les macros.

la macro qui me pose problème est la suivante:
Je vais ouvrir tous mes classeurs (qui sont csv) dans lesquels j'ai l'information dont j'ai besoin et que je vais traiter par un calcul de fonctions sur un classeur qui s'appelle "profils logistiques"
Une fois qu'ils sont tous ouverts, j'ouvre mon fichier 'profils logistiques' et là suprise ! pour certaines colonnes mon calcul est fait, pour d'autres il ne l'est pas et me marque dans la case: #VALEUR

je ne comprends pas du tout ! d'une part pourquoi sur certaine colonne cela marche tres bien? et d'autres part et c'est cela qui rend la chose encore plus frustrante: lorsqque je ferme un csv et que je le reouvre a la main (csv qui n'a absolument pas bougé) et bien tout marche comme sur des roulettes !!!

en fait en lancant la formule où il y a #valeur, il me dit qu'il y a un problème avec les liaisons, donc je regarde mes liaisons, il me dit quand je vérifie l'état que le fichier n'est pas ouvert, donc je l'ouvre a partir du bouton ouvrir la source et la il me dit qu'un classeur du meme nom est déjà ouvert et qu'il ne peut donc pas l'ouvrir. En effet il l'est mais pourquoi ne le voit-il pas alors?

si vous pouviez m'aider ce serait vraiment tres tres gentil parceque là c'est tres tres problématique !

je vous joints dans le prochain message mes macros

a vous lire

3 réponses

  1. biboupifa Messages postés 54 Statut Membre
     
    Sub Ouvre_ts_les_classeurs()
    ' Ouvre tous les fichiers excel contenus dans un répertoire.
    '
    Dim Système As Object 'Système de fichiers
    Dim Dossier As Object 'Répertoire
    Dim Fichiers As Object 'Collection de fichiers du répertoire
    Dim Fichier As Object 'Fichier (élément de la collection Fichiers)
    Dim Nom_Dossier As String 'Nom du répertoire
    Dim Nom_Fichier As String 'Nom du fichier

    'Lecture du répertoire COMMANDE
    Nom_Dossier = "Y:\Service Expedition\pierre-alexis.bernard\Profils Clients\Commande"
    Set Système = CreateObject("Scripting.FileSystemObject")
    Set Dossier = Système.GetFolder(Nom_Dossier)
    Set Fichiers = Dossier.Files
    'Contrôler chaque fichier du répertoire
    For Each Fichier In Fichiers
    '- Vérifier s'il s'agit d'un fichier Excel...
    If StrComp(Système.GetExtensionName(Fichier.Name), "csv", vbTextCompare) = 0 Then
    '... dans l'affirmative, ouvrir le fichier et mettre à jour les liaisons
    Nom_Fichier = Nom_Dossier & "\" & Fichier.Name
    Workbooks.OpenText Filename:=Nom_Fichier, DataType:=1, Semicolon:=True, local:=True
    End If
    Next Fichier

    'Lecture du répertoire EXPEDITION
    Nom_Dossier = "Y:\Service Expedition\pierre-alexis.bernard\Profils Clients\Expédition"
    Set Système = CreateObject("Scripting.FileSystemObject")
    Set Dossier = Système.GetFolder(Nom_Dossier)
    Set Fichiers = Dossier.Files
    'Contrôler chaque fichier du répertoire
    For Each Fichier In Fichiers
    '- Vérifier s'il s'agit d'un fichier Excel...
    If StrComp(Système.GetExtensionName(Fichier.Name), "csv", vbTextCompare) = 0 Then
    '... dans l'affirmative, ouvrir le fichier et mettre à jour les liaisons
    Nom_Fichier = Nom_Dossier & "\" & Fichier.Name
    Workbooks.OpenText Filename:=Nom_Fichier, DataType:=1, Semicolon:=True, local:=True
    End If
    Next Fichier

    Windows("PiFA.xls").Activate
    End Sub

    Celui la permet a partir d'un formulaire de choisir ceux qu'il faut trier:
    Private Sub CommandButton1_Click()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim TextBox1 As Integer
    Workbooks("Profils logistiques.xls").Activate
    TextBox1 = Range("H1")
    Workbooks("Profils logistiques.xls").Close

    Set wb = Workbooks.Open("Y:\Service Expedition\pierre-alexis.bernard\Profils Clients\Profils logistiques.xls")
    Set ws = wb.Worksheets("ITEMS saisie manuelle et auto")
    ws.Activate

    If CheckBox1.Value = True Then
    Call Transfert_Carrefour_MDD
    End If
    If CheckBox2.Value = True Then
    Call Transfert_Carrefour_MN
    End If
    If CheckBox4.Value = True Then
    Call Transfert_Scamark_MDD
    End If
    If CheckBox5.Value = True Then
    Call Transfert_Galec_MN
    End If
    If CheckBox7.Value = True Then
    Call Transfert_SuperU_MDD
    End If
    If CheckBox8.Value = True Then
    Call Transfert_SuperU_MN
    End If
    If CheckBox10.Value = True Then
    Call Transfert_Auchan_MDD
    End If
    If CheckBox11.Value = True Then
    Call Transfert_Simply_Atac
    End If
    If CheckBox12.Value = True Then
    Call Transfert_Shiever
    End If
    If CheckBox14.Value = True Then
    Call Transfert_Casino_MN
    End If
    If CheckBox15.Value = True Then
    Call Transfert_Casino_MDD
    End If
    UserForm5.Hide

    Set wb = Workbooks.Open("Y:\Service Commercial\Direction Supply\K- TRANSPORT\2- COUT DE TRANSPORT" & "\" & TextBox1 & "\" & "TCD COUT TPT " & TextBox1 & ".xls")
    Set ws = wb.Worksheets("CoûtGlobal")
    ws.Activate

    'Me garde les valeurs
    Dim sht As Worksheet
    Dim wkb As Workbook
    Set wkb = Workbooks("Profils logistiques")
    wkb.Activate
    For Each sht In Worksheets
    With sht.Cells
    .Copy
    .PasteSpecial Paste:=xlPasteValues
    .PasteSpecial Paste:=xlPasteFormats
    End With
    Application.CutCopyMode = False
    Next
    'enregistre dans un nouveau dossier
    Dim NOMDOSSIER$, Chemin$
    NOMDOSSIER = Format(Date, "ddmmyyyy") & "_" & Format(Time, "hhmmss")
    If Dir(Workbooks("Profils logistiques").Path & "\" & NOMDOSSIER, vbDirectory) = "" Then
    MkDir Workbooks("Profils logistiques").Path & "\" & NOMDOSSIER
    End If
    Chemin = Workbooks("Profils logistiques").Path & "\" & NOMDOSSIER & "\"
    Workbooks("Profils logistiques").SaveCopyAs Chemin & "Profils logistiques" & ".xls"

    End Sub

    et voila un exemple de transfert:
    Sub Transfert_Carrefour_MN()
    Dim lig As Long
    Dim col As String
    Dim nbrlig As Long
    Dim numlig As Long

    Application.Workbooks("Carrefour").Activate

    Sheets.Add.Move after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "Carrefour_MN"

    Sheets("Carrefour_MN").Activate
    col = "C"
    numlig = 9

    With Sheets("Carrefour")
    nbrlig = .Cells(65536, col).End(xlUp).Row
    For lig = 10 To nbrlig
    If .Cells(lig, col).Value = "MARQUES PROPRES" Then
    .Cells(lig, col).EntireRow.Copy
    numlig = numlig + 1
    Cells(numlig, 1).Select
    ActiveSheet.Paste
    End If
    Next
    End With

    Application.Workbooks("Carrefourexp").Activate

    Sheets.Add.Move after:=Sheets(Sheets.Count)
    Sheets(Sheets.Count).Name = "Carrefourexp_MN"

    Sheets("Carrefourexp_MN").Activate
    col = "C"
    numlig = 9

    With Sheets("Carrefourexp")
    nbrlig = .Cells(65536, col).End(xlUp).Row
    For lig = 10 To nbrlig
    If .Cells(lig, col).Value = "MARQUES PROPRES" Then
    .Cells(lig, col).EntireRow.Copy
    numlig = numlig + 1
    Cells(numlig, 1).Select
    ActiveSheet.Paste
    End If
    Next
    End With

    End Sub
    0
    1. biboupifa Messages postés 54 Statut Membre
       
      s'il vous plait pas d'arret cardiaque en voyant tout ca :p
      0
  2. rasoa10 Messages postés 924 Statut Membre 273
     
    Bonjour,

    Si tu mets ton problème en résolu, personne ne va te répondre, attention !
    0
  3. biboupifa Messages postés 54 Statut Membre
     
    Bonjour,

    oui en effet j'en suis bien conscient. si tu as la solution je veux bien. mais en fait en creusant le problème j'ai fini par comprendre la source du problème, que je ne sais toujours pas résoudre. mais plutot que de faire lire a quelqu'un ce pavé pour une raison qui correspond a une ligne j'ai préféré créer un nouveau post que voila:
    https://forums.commentcamarche.net/forum/affich-28281493-mon-csv-ne-reconnait-pas-mon-texte#p28281493

    merci en tout cas :)
    0
    1. biboupifa Messages postés 54 Statut Membre
       
      dans le doute, si je me trompe je le remets en non résolu :)
      0