VBA problème pour incrémenter
Résolu/Fermé
onra
-
25 juin 2008 à 14:33
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 26 juin 2008 à 23:37
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 - 26 juin 2008 à 23:37
A voir également:
- VBA problème pour incrémenter
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Vba dépassement de capacité ✓ - Forum Excel
7 réponses
blux
Messages postés
26488
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 315
25 juin 2008 à 14:36
25 juin 2008 à 14:36
Salut,
il faut que tu prennes le code ascii (qui est numérique) des lettres pour le faire augmenter en séquence.
colle ton code VBA ici pour qu'on voie où il faut faire une modif...
il faut que tu prennes le code ascii (qui est numérique) des lettres pour le faire augmenter en séquence.
colle ton code VBA ici pour qu'on voie où il faut faire une modif...
blux
Messages postés
26488
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 315
25 juin 2008 à 15:03
25 juin 2008 à 15:03
Tu peux générer la lettre 'a' avec le code suivant :
msgbox chr(97)
ensuite, il te suffit de tester si le dossier existe déjà et dans l'affirmative, concaténer son numéro avec un chr(x), où x sera récupéré avec la fonction asc(y)+1, le y étant la lettre déjà affectée précédemment, le cas échéant.
C'est clair ou pas ? :-)
msgbox chr(97)
ensuite, il te suffit de tester si le dossier existe déjà et dans l'affirmative, concaténer son numéro avec un chr(x), où x sera récupéré avec la fonction asc(y)+1, le y étant la lettre déjà affectée précédemment, le cas échéant.
C'est clair ou pas ? :-)
Je viens d'essayzer ton bout de code, et ca marche.
Par contre tu m'a dit que je pouuvais tester si le nom de dossier existe déjà.
Comment fait tu; car moi je passe par une feuille esxcel ou j'enregistre dans une colonne les noms. Autant dire que ca n'est aps très pratique et plutôt lourd.
Si tu pouvais m'aiguiller sur ce coup....
Merci
Par contre tu m'a dit que je pouuvais tester si le nom de dossier existe déjà.
Comment fait tu; car moi je passe par une feuille esxcel ou j'enregistre dans une colonne les noms. Autant dire que ca n'est aps très pratique et plutôt lourd.
Si tu pouvais m'aiguiller sur ce coup....
Merci
blux
Messages postés
26488
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 315
>
onra
25 juin 2008 à 15:41
25 juin 2008 à 15:41
Par contre tu m'a dit que je pouuvais tester si le nom de dossier existe déjà.
Voui, c'est la moindre des chose avant d'incrémenter (en numérique ou avec une lettre, d'ailleurs).
Mais ma phrase était 'générique' puisque je ne sais pas sous quelle forme se présentent tes dossiers : feuille excel de ton classeur ou fichier enregistré sur le disque...
Voui, c'est la moindre des chose avant d'incrémenter (en numérique ou avec une lettre, d'ailleurs).
Mais ma phrase était 'générique' puisque je ne sais pas sous quelle forme se présentent tes dossiers : feuille excel de ton classeur ou fichier enregistré sur le disque...
onra
>
blux
Messages postés
26488
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
25 juin 2008 à 15:48
25 juin 2008 à 15:48
En fait mon code ouvre un devis vierge que je remplie et que j'enregistre dans un fichier à part.
Les devis sont apperlés Lot.
Et mon but avec ces incrémentations est de pouvoir obtenir:
FM 1
FM 2
FM 3
FM 3a
FM 3b
La lettre étant un indice de révision.
Et comme je te disait je passais par une feuille Exel où les noms s'enregistraient dans une colonne et s'incrémentaient au fur et à mesure qu'un nouveau devis étati créer.
Les devis sont apperlés Lot.
Et mon but avec ces incrémentations est de pouvoir obtenir:
FM 1
FM 2
FM 3
FM 3a
FM 3b
La lettre étant un indice de révision.
Et comme je te disait je passais par une feuille Exel où les noms s'enregistraient dans une colonne et s'incrémentaient au fur et à mesure qu'un nouveau devis étati créer.
blux
Messages postés
26488
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
18 novembre 2024
3 315
>
onra
25 juin 2008 à 16:18
25 juin 2008 à 16:18
donc il faut que tu fasses un peu de VBA pour voir si le fichier existe, comme ça, tu n'auras plus à gérer de colonnes avec des noms de fichier...
https://support.microsoft.com/fr-fr/help/462253
https://support.microsoft.com/fr-fr/help/462253
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
25 juin 2008 à 17:09
25 juin 2008 à 17:09
Bonjour, j'ai été voir sur le lien donner... Mais tu va avoir quelques difficulté avec
le test...
Chemin= "C:\NomRép1\NomSousRép\LeFichier.extension"
if ExisteFichier(Chemin) then
Faut connaître la fonction pour comprendre ce qu'ils veulent dire.
A+
ExisteFichier = (Répertoire(nomfic) <> "")
le test...
Chemin= "C:\NomRép1\NomSousRép\LeFichier.extension"
if ExisteFichier(Chemin) then
Function ExisteFichier(TesterFich as Chaîne) as Booléen ExisteFichier = (Dir(TesterFich ) <> "") End Function
Faut connaître la fonction pour comprendre ce qu'ils veulent dire.
A+
Merci, j'ai pas encore eu le temps de regarder ca en détail.
Mais en lisant ton message , effectivement je crois que ca m'aurait poser problème.
Je profite de ta petite intervention pour te poser une autre question à ce sujet:
Mon objectif pour ce code, est d'enregistre des devis dont le nom serait incrémenter par raport au précédent.
(il doit y avoir quelques explication en plus au dessus)
Mais je ne sais pas trop comment faire.
Si tu avaix quelques idées lumineuses, ca m'aiderait bien
Merci
Bonne soirée
Mais en lisant ton message , effectivement je crois que ca m'aurait poser problème.
Je profite de ta petite intervention pour te poser une autre question à ce sujet:
Mon objectif pour ce code, est d'enregistre des devis dont le nom serait incrémenter par raport au précédent.
(il doit y avoir quelques explication en plus au dessus)
Mais je ne sais pas trop comment faire.
Si tu avaix quelques idées lumineuses, ca m'aiderait bien
Merci
Bonne soirée
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
25 juin 2008 à 19:10
25 juin 2008 à 19:10
Essaye de comprendre cette fonction et éventuellement adapte la...
A+
'Ici, envoyer avec le nom du devis à tester 'Par exemple FM 3 Pas envoyer de FM 3a ou FM 3b 'je reprend l'appel.. Sauver sous le nom... 'NomDuNouVeauFichier = ChercherNouvNom("FM 3") ' Function ChercherNouvNom(NomAvoir) As String Dim i As Integer, TxtNom As String Dim Chemin As String Dim Ch As Integer Ch = 97: TxtNom = NomAvoir For i = 1 To 10 Chemin = "C:\NomRép1\NomSousRép\" & TxtNom & ".xls" If Not ExisteFichier(Chemin) Then ChercherNouvNom = Chemin Exit Function End If TxtNom = NomAvoir & Chr(Ch) Ch = Ch + 1 Next i End Function
A+
Salut,
merci pour ton code,
mais je t'avoue que je suis complètement paumé. Mon expérience en VbA se compte en semaines et je n'ai jamais utilsé de fonction.
Alors j'ai une ou deux petites question.
La première est que je n'arrive pas à exécuter la fonction (j'ai un peu cherché mais c tellement évident que je n'ai pas trouvé).
La seconde question est que j'ai essayé d'adapté la fonction en la simplifiant un peu: c'est à dire que dans un premier temps je n'ai besoin que d'affecter au fichier l'indice numérique.
(C'est seulement en cas de modif que j'affecte l'indice de révision "lettre")
Donc bien que je 'nai pas pu tester la fonction, j'ai essayé de l'adapter tant bien que mal, et voilà ce que c donne:
Function ChercherNouvNom(TextNom) As String
Dim i As Integer, TxtNom As String
Dim Chemin As String
For i = 1 To 500
TxtNom = "FM" & i
Chemin = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\Outil bis\derneir outil\OUtil avec menu\FM\" & TxtNom & ".xls"
While ExisteFichier(Chemin)
i = i + 1
Wend
ChercherNouvNom = Chemin
TxtNom = "FM" & i
MsgBox ("FM" & i)
Exit Function
Next i
End Function
Le but est donc que la fonction teste les ficheirs entre 1 et 500, pour donner le premier nom non-existant.
J'ai changer la boucle If par While, car je veux que ca incrémente tant que la fonction trouve le ficheir correspondant.
Mais comme je tedisais, me sentant fébril avec se genre de fonction, je suis perplexe vis à vis de mes mofis.
Si tu avais un petit moment pour jeter un coup d'oeil, ca serait cool;
Merci d'avance
merci pour ton code,
mais je t'avoue que je suis complètement paumé. Mon expérience en VbA se compte en semaines et je n'ai jamais utilsé de fonction.
Alors j'ai une ou deux petites question.
La première est que je n'arrive pas à exécuter la fonction (j'ai un peu cherché mais c tellement évident que je n'ai pas trouvé).
La seconde question est que j'ai essayé d'adapté la fonction en la simplifiant un peu: c'est à dire que dans un premier temps je n'ai besoin que d'affecter au fichier l'indice numérique.
(C'est seulement en cas de modif que j'affecte l'indice de révision "lettre")
Donc bien que je 'nai pas pu tester la fonction, j'ai essayé de l'adapter tant bien que mal, et voilà ce que c donne:
Function ChercherNouvNom(TextNom) As String
Dim i As Integer, TxtNom As String
Dim Chemin As String
For i = 1 To 500
TxtNom = "FM" & i
Chemin = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\Outil bis\derneir outil\OUtil avec menu\FM\" & TxtNom & ".xls"
While ExisteFichier(Chemin)
i = i + 1
Wend
ChercherNouvNom = Chemin
TxtNom = "FM" & i
MsgBox ("FM" & i)
Exit Function
Next i
End Function
Le but est donc que la fonction teste les ficheirs entre 1 et 500, pour donner le premier nom non-existant.
J'ai changer la boucle If par While, car je veux que ca incrémente tant que la fonction trouve le ficheir correspondant.
Mais comme je tedisais, me sentant fébril avec se genre de fonction, je suis perplexe vis à vis de mes mofis.
Si tu avais un petit moment pour jeter un coup d'oeil, ca serait cool;
Merci d'avance
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
26 juin 2008 à 10:26
26 juin 2008 à 10:26
Tu t'est bien débrouillé mais ca n'ira pas..
Attention derneir il y a une inversion de lettre
Suivant le cas tu choisi l'une ou l'autre
Mais c'est bien, au moins tu suis et essaye de te débrouillé, de cette façon tu apprendras vite.
A+
Function ChercherNouvNom(TextNom) As String Dim i As Integer, Nom As String Dim Chemin As String For i = 1 To 500 Nom = TextNom & i 'TextNom doit pas changer sinon ca s'ajoute et tu va avoir FM1234567891011.. Chemin = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\Outil bis\derneir outil\OUtil avec menu\FM\" & Nom & ".xls" If Not ExisteFichier(Chemin) Then Exit For Next i ChercherNouvNom = Chemin End Function 'Si c'est TOUJOURS FM... Function ChercherNvNom() As String Dim i As Integer, Nom As String Dim Chemin As String Dim Txt As String Txt = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\" Txt = Txt & "Outil bis\derneir outil\OUtil avec menu\FM\" For i = 1 To 500 Nom = "FM " & i Chemin = Txt & Nom & ".xls" ' If Not ExisteFichier(Chemin) Then Exit For tu peu raccourcir par If Dir(Chemin ) = "" then Exit For Next i ChercherNvNom = Chemin End Function
Attention derneir il y a une inversion de lettre
Suivant le cas tu choisi l'une ou l'autre
Mais c'est bien, au moins tu suis et essaye de te débrouillé, de cette façon tu apprendras vite.
A+
Merci,
j'ai testé la seconde et ca m'a pas l'air mal.
Le truc c'est que je n'arrive pas à enregistrer le fichier:
J'ai pourtant rajouter avant End Function:
Worksheets(1).SaveAs ChercherNvNom
mais rien à faire.
Il se passe seulement deux chose:
Ca m'inscrit sur la cellule selectionnée de la feuille active le chemin
Et quand je fait "Insertion/Fonction/ChercherNvNom(); j'ai une boîte de dialogue qui me dit que je n'ai pas d'argument????
Au passage, c'est tu qomment je peux appeler une fonction à partir d'une macro?
A+
j'ai testé la seconde et ca m'a pas l'air mal.
Le truc c'est que je n'arrive pas à enregistrer le fichier:
J'ai pourtant rajouter avant End Function:
Worksheets(1).SaveAs ChercherNvNom
mais rien à faire.
Il se passe seulement deux chose:
Ca m'inscrit sur la cellule selectionnée de la feuille active le chemin
Et quand je fait "Insertion/Fonction/ChercherNvNom(); j'ai une boîte de dialogue qui me dit que je n'ai pas d'argument????
Au passage, c'est tu qomment je peux appeler une fonction à partir d'une macro?
A+
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
26 juin 2008 à 11:32
26 juin 2008 à 11:32
Worksheets(1).SaveAs ChercherNvNom ??
Worksheets = une feuille !!
C'est le classeur que tu doit sauver.
et un classeur c'est
ActiveWorkBooks.saveAs ChercherNvNom
Mais attention, le classeur que tu à sur ton écran c'est le nouveau !!
Faudrait donc faire
Dim Nom as string
Nom = activeWorkbooks.FullName
ActiveWorkBooks.saveAs ChercherNvNom
ActiveWorkbooks.close
Workbooks.open Nom
J'ai pas tester, peu y avoir une erreur de syntaxe, tu vois...
Worksheets = une feuille !!
C'est le classeur que tu doit sauver.
et un classeur c'est
ActiveWorkBooks.saveAs ChercherNvNom
Mais attention, le classeur que tu à sur ton écran c'est le nouveau !!
Faudrait donc faire
Dim Nom as string
Nom = activeWorkbooks.FullName
ActiveWorkBooks.saveAs ChercherNvNom
ActiveWorkbooks.close
Workbooks.open Nom
J'ai pas tester, peu y avoir une erreur de syntaxe, tu vois...
Salut,
Bon j'ai eu le temps de tester ton code et c marche super bien.
J'ai juste changer la fonction en preocédure classique (Sub) parce que j'ai du mal à m'en servir. Mais pour le reste c parfait.
Jute une petite question , histoire d'améliorer ma culture VBAiste... :
Tu as écris le chemin en deux partie , et je voulais savoir pourquoi:
Txt = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\"
Txt = Txt & "Outil bis\derneir outil\OUtil avec menu\FM\"
Sinon voici le code que j'utilise maintenant:
Sub ChercherNvNom()
Dim i As Integer, Nom As String
Dim Chemin As String
Dim Txt As String
Txt = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\"
Txt = Txt & "Outil bis\derneir outil\OUtil avec menu\FM\"
For i = 1 To 500
Nom = "Fiche " & i & " "
Chemin = Txt & Nom & ".xls"
If Dir(Chemin) = "" Then Exit For
Next i
Range("D4") = "FM" & i
ActiveWorkbook.SaveAs Chemin
End Sub
Et pour ce qui est de l'indice de révision, je me suis rendu compte que pour l'outil que je met en place , il était plus logique de faire une petite boucle toute simple dans mon programme.
Voilà, voilà
En tout cas merci beaucoup,
tu m'a était d'une grande aide.
A plus
Bon j'ai eu le temps de tester ton code et c marche super bien.
J'ai juste changer la fonction en preocédure classique (Sub) parce que j'ai du mal à m'en servir. Mais pour le reste c parfait.
Jute une petite question , histoire d'améliorer ma culture VBAiste... :
Tu as écris le chemin en deux partie , et je voulais savoir pourquoi:
Txt = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\"
Txt = Txt & "Outil bis\derneir outil\OUtil avec menu\FM\"
Sinon voici le code que j'utilise maintenant:
Sub ChercherNvNom()
Dim i As Integer, Nom As String
Dim Chemin As String
Dim Txt As String
Txt = "G:\5518 Servier Croissy\00 stagiaire\Economie de chantier\"
Txt = Txt & "Outil bis\derneir outil\OUtil avec menu\FM\"
For i = 1 To 500
Nom = "Fiche " & i & " "
Chemin = Txt & Nom & ".xls"
If Dir(Chemin) = "" Then Exit For
Next i
Range("D4") = "FM" & i
ActiveWorkbook.SaveAs Chemin
End Sub
Et pour ce qui est de l'indice de révision, je me suis rendu compte que pour l'outil que je met en place , il était plus logique de faire une petite boucle toute simple dans mon programme.
Voilà, voilà
En tout cas merci beaucoup,
tu m'a était d'une grande aide.
A plus
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 190
26 juin 2008 à 23:37
26 juin 2008 à 23:37
J'ai scindé Txt parce que généralement je n'écrit jamais de code qui dépasse la largeur de la fenêtre (question de facilité de déboguage et de lvisualisation du code) je coupe alors les lignes en mettant le tiret bas "_"
Mais là, pour une raison que j'ignore VB n'a pas voulu accepter cette facon de faire et pour y remédier j'ai employé ce stratagème.
Voil, content d'avoir pu t'aider.
A+
Mais là, pour une raison que j'ignore VB n'a pas voulu accepter cette facon de faire et pour y remédier j'ai employé ce stratagème.
Voil, content d'avoir pu t'aider.
A+
25 juin 2008 à 14:54
et merci de répondre si vite.
Voici le code:
Sub Chrono()
Workbooks("Menu").Worksheets(1).Activate
i = 1
While Worksheets(1).Cells(i, 1).Value <> ""
i = i + 1
Wend
Cells(i - 1, 1).Select
Cells(i, 1) = 1 + Cells(i - 1, 1)
Workbooks("FM Originale").Sheets("Fiche").Range("D4").Value = Cells(i, 1).Value
Nchrono.ControlSource = "D4"
End Sub
Ce code est celui qui me permet la première incrémentation. Pour les indices , je ne sais toujours comment faire.
25 juin 2008 à 14:56
C'est certainement pas ce qu'il y a de plus léger; mais bon, ca fonctionne.
c'est déjà ca!