Formule pour recherche de nom de fichier
Bonjour,
nouvellement inscrit sur ce forum mais utilisateur d'excel depuis des années.
Dans le cadre de mon travail, j'ai voulu utiliser les fonctionnalités d'excel et je me suis fais un tableau récapitulatif de mes clients.
Je vais essayer d'être le plus clair possible afin de vous exposer mon problème :
Question 1
j'ai cette formule dans un fichier excel qu'on va nommer RECAP
='[MAP trucmuche 03-01-2017.xlsm]SAISIE'!$P$5
où MAP trucmuche 03-01-2017.xlsm est le nom d'un autre fichier excel, SAISIE est le nom de la feuille et $P$5 est la case dans laquelle je viens récupérer une valeur.
Ce nom se décompose de la manière suivante
MAP est le nom générique de saisie
trucmuche le nom d'un client
03-01-2017 date du jour de saisie
Jusque là tout va bien.
Mon soucis arrive :
comment écrire cette formule en remplaçant le nom du client trucmuche par systématiquement la valeur d'une case ( qui a le même nom de ce client ) mais qui se trouve dans ce même fichier RECAP ?
Question 2
quand j'écris le nom d'un client dans une case du tableau RECAP, quelle serait la formule ou la macro qui permettrais la première fois que l'on valide de créer une nouvelle feuille dans ce même fichier avec comme non de feuille le nom du client.
En gros, comment automatiquement ajouter une feuille de calcul dans le même fichier quand on rempli une certaine case dans le feuille RECAP.
D'avance Merci
Salut,
Si j'ai bien compris ta demande, voici une petite contribution:
Question 1:
Sub changement_formule()
Dim Tabl() As String
Dim i As Integer
'Ta formule ='[MAP trucmuche 03-01-2017.xlsm]SAISIE'!$P$5 est dans la cellule A3 par exemple
Tabl = Split(Range("A3").Formula, " ")
'Tu veux remettre ta formule dans la même cellule A3 par exemple avec le nouveau nom client qui est écrit dans la cellule B3
Range("A3").Formula = Tabl(0) & " " & Range("B3").value & " " & Tabl(2)
End SubQuestion 2:
Sub ajout_feuille_nvo_client()
Dim i As Integer
Dim verif As Boolean
For i = 1 To ActiveWorkbook.Sheets.Count
If IsEmpty(verif) = True Then
If Sheets(i).Name = Range("B3").value Then
verif = True
Else: verif = False
End If
Else
If Sheets(i).Name = Range("B3").value Then
verif = True
End If
End If
Next i
If verif = False Then
Sheets.Add After:=Sheets(Sheets.Count)
ActiveSheet.Name = Sheets(1).Range("B3").value
Else: MsgBox "Feuille client déjà existante"
End If
End SubEspérant avoir répondu à ta demande
Merci pour la reactivite
J'essaie cela ce soir et je te tiens au courant.
Re,
c'est super mais cela ne convient pas.
j'aimerai simplement pouvoir remplacer dans cette formule le non trucmuche par la valeur d'une case
=CONCATENER(SI('D:\MAP CLIENT\[MAP trucmuche.xlsm]Feuil1'!$I$26="X";"BAIE ALU ";"");SI('D:\MAP CLIENT\[MAP trucmuche.xlsm]Feuil1'!$I$27="X";" + ME PVC";""))
En gros je voudrais mettre à la place du nom trucmuche une fonction qui renvoi la valeur contenue dans une case précise.
Je ne sais pas si c'est clair
Bonjour Denis,
C'est normal que ça ne marche pas, ta formule a changé en gros dans mon code j'identifie le nom du client comme étant les caractères compris entre 2 espaces celui après MAP et l'autre avant la date en supposant que ce sont les 2 seuls espaces (je me suis basé sur la formule dans ta question).
Si ta formule change ou que la méthode de nommage de ton fichier change il faut changer le code également.
Du coup:
- Dans tes noms de fichier, as tu des espaces systématiquement avant et après les noms des clients? (MAP trucmuche 03-01-2017.xlsm)
- Si ce n'est pas le cas, la méthode de nommage de tes fichiers est-elle uniforme? permettant d'identifier le nom client en supposant qu'il s'agit de la chaine de caractères comprise entre 2 caractères spécifiques?
- Ou alors, as tu la liste exhaustive du nom de tes clients sur une colonne quelque part?
En gros, une méthode pour dire à VBA que cette chaine de caractère c'est un nom de client.
Re,
les fichiers sont systématiquement enregistrés comme l'exemple.
Je peux supprimer la date, je pense que cela simplifiera les choses.
Cela donne
=CONCATENER(SI('D:\MAP CLIENT\[MAP trucmuche.xlsm]Feuil1'!$I$26="X";"BAIE ALU ";"");SI('D:\MAP CLIENT\[MAP trucmuche.xlsm]Feuil1'!$I$27="X";" + ME PVC";""))
Effectivement la formule change.
En gros, j'enregistre le premier fichier avec le nom du client, puis dans un 2eme fichier j'ai une ligne qui commence par le nom du client et sur cette même ligne j'ai les formules données en exemple. Je voudrais que lorsque je créé la ligne dans le 2eme fichier, cela récupère automatiquement le nom du client qui se trouve dans la première case de la ligne.
Je voudrais cela car lorsque je crée une nouvelle ligne pour un nouveau client, je voudrais ne pas avoir à modifier toutes les formules pour changer le nom du fichier.
J'espère que cela est un peu plus clair
Du coup si tes fichiers sont enregistrés avec des dates les formules sont sous cette forme:
=CONCATENER(SI('D:\MAP CLIENT\[MAP trucmuche 03-01-2017.xlsm]Feuil1'!$I$26="X";"BAIE ALU ";"");SI('D:\MAP CLIENT\MAP trucmuche 03-01-2017.xlsm]Feuil1'!$I$27="X";" + ME PVC";""))
Donc avec des dates c'est bien ça? (c'est plus simple de laisser les dates par ailleurs ça permet de garder l'espace).
Si tu me confirmes que c'est le cas je te ferai une macro selon la logique suivante:
1) J'identifie la chaîne de caractères correspondant au nom du client dans la formule (grâce aux espaces)
2) Je la remplace par le nom du client rentré dans la première colonne de la même ligne
3) Je ferai une boucle pour que l'action se fasse sur toutes les lignes du fichier
Voilà j'attends ta validation
Re,
VOUI c'est ça
merci très beaucoup .
Re,
Si tu as toujours la même date sur tout tes fichiers clients (03-01-2017 ce qui m'étonnerait) voici la macro non testée car pas le fichier original:
colonne A: nom du client
colonne B: une formule avec l'ancien nom client
Option Base 1
Option Explicit
Sub changement_formule_V3()
Dim Tabl() As String
Dim Nbreligne As Double
Dim i As Integer
Dim Variable1 As String
Dim Variable2 As String
'Comptage du nombre de lignes du fichier en se basant sur la colonne contenant les noms clients (colonne A)
Nbreligne = Application.WorksheetFunction.CountA(Columns(1)) + 1
'bouclage sur toutes les lignes
For i = 2 To Nbreligne
'Ta formule
'=CONCATENER(SI('D:\MAP CLIENT\[MAP trucmuche 03-01-2017.xlsm]Feuil1'!$I$26="X";"BAIE ALU ";"");SI('D:\MAP CLIENT\MAP trucmuche 03-01-2017.xlsm]Feuil1'!$I$27="X";" + ME PVC";""))
'est dans la colonne B par exemple
Tabl = Split(Range("B" & i).Formula, " ")
Variable1 = Tabl(2)
Variable2 = Range("A" & i).value
Rows(i & ":" & i).Select
Application.DisplayAlerts = False
Selection.Replace What:=Variable1, Replacement:=Variable2, LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.DisplayAlerts = True
Next iSi ce n'est pas le cas, comme d'après ce que j'ai compris supprimer les dates n'était pas un problème pour toi, il faudra supprimer les dates sur les noms de fichiers en gardant ABSOLUMENT l'espace à la fin.
Voilà si tu as des soucis n'hésites pas à revenir vers moi.