Problème de liaison entre classeurs
biboupifa
Messages postés
54
Date d'inscription
Statut
Membre
Dernière intervention
-
biboupifa Messages postés 54 Date d'inscription Statut Membre Dernière intervention -
biboupifa Messages postés 54 Date d'inscription Statut Membre Dernière intervention -
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
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
A voir également:
- Problème de liaison entre classeurs
- Liaison torride - Forum Réseaux sociaux
- Arnaque rdv torride ✓ - Forum Consommation & Internet
- Acheminé sur une liaison internationale - Forum Réseau
- Super Chronopost International - Forum Vos droits sur internet
- Les fonctionnalités suivantes ne peuvent pas être enregistrées dans des classeurs sans macro ✓ - Forum Excel
3 réponses
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
' 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
biboupifa
Messages postés
54
Date d'inscription
Statut
Membre
Dernière intervention
s'il vous plait pas d'arret cardiaque en voyant tout ca :p
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 :)
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 :)