Fonction à argument variable sur VBA (EXCEL)
Résolu
rutabagans
Messages postés
15
Statut
Membre
-
borntobealive Messages postés 167 Statut Membre -
borntobealive Messages postés 167 Statut Membre -
Bonjours ,
je me suis beaucoup aider de ce site pour résoudre les problème que j'ai avec VBA mais un problème ou je ne trouve aucune réponse. je travaille dans une entreprise pour quelque jours encore et je me suis lancée dans un travaille plutôt important (avis personnelle n'ayant commencer la programmation qu'au début du mois sans base) celui d'automatiser un tableau de formation . il leur permettra d'ajouter des formations sur des colonne , avec la date a laquelle il l'ont obtenue et la date a laquelle elle ne sera plus valide . Mais le problème c'est dans la partie du code qui concerne la date de fin de validité . je souhaite mettre la fonction MOIS.DECALER ("ici une case, et ici une TextBox) avec a l'intérieur 2 variable l'une étant la case et l'autre une donnée entrée dans un userform, et qui s'applique sur un certain nombre de ligne qui peut varier sur plusieurs année (le nombre d'employer).
voilà le code:
nb_lignes_nom = Cells(2, 1).End(xlDown).Row
For i = 4 To nb_lignes_nom
Cells(i, 5).Select
Selection.FormulaLocal = "=MOIS.DECALER((i,4);UserForm2.TextBox2.Value)"
Next
l'erreur que me donne VBA ce trouve dans la ligne la plus longue et il s'agit de l'erreur : 1004
"erreur défini par l'application ou par l'objet"
Merci d'avance.
je me suis beaucoup aider de ce site pour résoudre les problème que j'ai avec VBA mais un problème ou je ne trouve aucune réponse. je travaille dans une entreprise pour quelque jours encore et je me suis lancée dans un travaille plutôt important (avis personnelle n'ayant commencer la programmation qu'au début du mois sans base) celui d'automatiser un tableau de formation . il leur permettra d'ajouter des formations sur des colonne , avec la date a laquelle il l'ont obtenue et la date a laquelle elle ne sera plus valide . Mais le problème c'est dans la partie du code qui concerne la date de fin de validité . je souhaite mettre la fonction MOIS.DECALER ("ici une case, et ici une TextBox) avec a l'intérieur 2 variable l'une étant la case et l'autre une donnée entrée dans un userform, et qui s'applique sur un certain nombre de ligne qui peut varier sur plusieurs année (le nombre d'employer).
voilà le code:
nb_lignes_nom = Cells(2, 1).End(xlDown).Row
For i = 4 To nb_lignes_nom
Cells(i, 5).Select
Selection.FormulaLocal = "=MOIS.DECALER((i,4);UserForm2.TextBox2.Value)"
Next
l'erreur que me donne VBA ce trouve dans la ligne la plus longue et il s'agit de l'erreur : 1004
"erreur défini par l'application ou par l'objet"
Merci d'avance.
A voir également:
- Fonction à argument variable sur VBA (EXCEL)
- Fonction si et excel - Guide
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Comment trier par ordre alphabétique sur excel - Guide
- Comment calculer la moyenne sur excel - Guide
9 réponses
slt,
essaye :
et tient moi au courant
userform2.textbox2.valuesont entre les guillemets donc VBA comsidere ce mot et l'écrit tel quel dans ta formule (i.e. aucun sens pour la fonction décaler)
essaye :
Selection.FormulaLocal = "=MOIS.DECALER((" & i & ",4);" & UserForm2.TextBox2.Value & ")"
et tient moi au courant
Si Cdate ne marche pas c'est que le contenu de la case (i,4) ne peut pas être convertit en date.
ça vaudrait le coup que tu force le format de cette colonne à un format de date (celui que tu veux, par macro ou à a main) pour voir si ça change quoique ce soit
ça vaudrait le coup que tu force le format de cette colonne à un format de date (celui que tu veux, par macro ou à a main) pour voir si ça change quoique ce soit
il s'agit de changer le format de la colonne. je ne suis pas sur de ce que j'ai écrit pour faire le changer (avec des recherche sur les différent site qui en parle) et si c'est bon , rien ne se produit.
For i = 4 To nb_lignes_nom
Cells(i, 4) = Format ("dd.mm.yy")
Cells(i, 5).FormulaLocal = "=MOIS.DECALER(" & CDate(Cells(i, 4).Value) & ";" & UserForm2.TextBox2.Value & ")"
Next
For i = 4 To nb_lignes_nom
Cells(i, 4) = Format ("dd.mm.yy")
Cells(i, 5).FormulaLocal = "=MOIS.DECALER(" & CDate(Cells(i, 4).Value) & ";" & UserForm2.TextBox2.Value & ")"
Next
ce n'est pas "confidentielle" mais trop sécuriser du coup , je ne peut rien faire passer par internet ... je peut parcontre mettre tout le code et l'userform.


Private Sub CommandButton2_Click()
Unload Me
End Sub
Private Sub ok_Click()
Dim nb_lignes_nom As Integer
Range("D1").Select
Selection.EntireColumn.Insert
Range("D1").Value = UserForm2.TextBox1.Value
Selection.VerticalAlignment = xlBottom
Selection.HorizontalAlignment = xlCenter
Range("D3").Value = "obtention"
Selection.EntireColumn.AutoFit
If CheckBox1.Value = True Then
Range("E1").Select
Selection.EntireColumn.Insert
Range("E3").Value = "programmée"
Selection.EntireColumn.AutoFit
Selection.EntireColumn.Insert
Range("E3").Value = "fin de validité"
Selection.EntireColumn.AutoFit
nb_lignes_nb_lignes_nom = Cells(2, 1).End(xlDown).Row
For i = 4 To nb_lignes_nom
Cells(i, 4).NumberFormat = "dd/mm/yyyy"
Cells(i, 5).NumberFormat = "m/d/yyyy"
Cells(i, 5).FormulaLocal = "=MOIS.DECALER((" & CDate(Cells(i, 4).Value) & ",4);" & UserForm2.TextBox2.Value & ")"
Next
Range("D1:F1").Merge
Selection.VerticalAlignment = xlBottom
Selection.HorizontalAlignment = xlCenter
Else
End If
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
c'est normal le :
ta variable nb_ligne_nom doit pas avoir de valeur et reste à 0 du coup il ne sais pas jusqu'ou compter et il sort tout de suite je pense
à toute fin utile : quand tu mets du code sur CCM utilise le petit bouton au dessus de la zone de texte et précsise que c'est du basic c'est plus facil à lire et ça met un peu de couleur dans ce monde de brut :-)
nb_lignes_nb_lignes_nom = Cells(2, 1).End(xlDown).Row?
ta variable nb_ligne_nom doit pas avoir de valeur et reste à 0 du coup il ne sais pas jusqu'ou compter et il sort tout de suite je pense
à toute fin utile : quand tu mets du code sur CCM utilise le petit bouton au dessus de la zone de texte et précsise que c'est du basic c'est plus facil à lire et ça met un peu de couleur dans ce monde de brut :-)
normalement tu a un petit bouton 'Attention' qui te décris ce qui ne va pas dans ta formule non ?
1/C'est des cas isolés celles qui ne marchent pas ou c'est toutes les lignes ?
2/ pourquoi tu mets pas cells (i,5) et cells(i,4) au même format ? (simple curiosité ça n'a aucune incidence sur le code)
1/C'est des cas isolés celles qui ne marchent pas ou c'est toutes les lignes ?
2/ pourquoi tu mets pas cells (i,5) et cells(i,4) au même format ? (simple curiosité ça n'a aucune incidence sur le code)
c'est sur tout les lignes, oui il me dit que la "case départ" est vide alors qu'il y a toujours le bout de code dans VBA . pour les Dates , je faisais des test rien de mieux pour apprendre et voir les différence ^^ .
jai placer un espion sur i , il varie bien a chaque passage , du code étape par étape , il ne reste donc que la notation qui n'as pas changer depuis le début . (si j'ai enlever le CDate (qui m'indiquer une erreur 1004) et comme je n'est pas "compris" son sens (et que j'aimerai ètre capable d'expliquer ce que je fais) surtout que l'on demande de "changer la valeur de la ligne au format date mais maintenant qu'il y est de base ...
jai placer un espion sur i , il varie bien a chaque passage , du code étape par étape , il ne reste donc que la notation qui n'as pas changer depuis le début . (si j'ai enlever le CDate (qui m'indiquer une erreur 1004) et comme je n'est pas "compris" son sens (et que j'aimerai ètre capable d'expliquer ce que je fais) surtout que l'on demande de "changer la valeur de la ligne au format date mais maintenant qu'il y est de base ...
Cells(i, 5).FormulaLocal = "=MOIS.DECALER((" & CDate(Cells(i, 4).Value) & ",4);" & UserForm2.TextBox2.Value & ")"
une parenthese en trop après le DECALER non ?

j'ai ça avec ce code (je n'arrive pas a indiqué que c'est du basic... ou alors je sais pas ou ...) :
nb_lignes_nom = Cells(2, 1).End(xlDown).Row
For i = 4 To nb_lignes_nom
Cells(i, 4).NumberFormat = "dd/mm/yyyy"
Cells(i, 5).NumberFormat = "dd/mm/yyyy"
Cells(i, 5).FormulaLocal = "=MOIS.DECALER(" & Cells(i, 4) & "; " & UserForm2.TextBox2.Value & ")"
Next
c'est normal qu'il te mette #N/A vu qu'il n'y a pas tous les arguments
essaye :
pour faire du code tu surligne ton code tu vas sur l'icone à côté de S et tu clique sur 'Basic'
essaye :
nb_lignes_nom = Cells(2, 1).End(xlDown).Row For i = 4 To nb_lignes_nom Cells(i, 4).NumberFormat = "dd/mm/yyyy" Cells(i, 5).NumberFormat = "dd/mm/yyyy" Cells(i, 5).FormulaLocal = "=MOIS.DECALER(" & Cells(i, 4).address(false,false, xlA1, false,false) & "; " & UserForm2.TextBox2.Value & ")" Next
pour faire du code tu surligne ton code tu vas sur l'icone à côté de S et tu clique sur 'Basic'
Salut,
Je ne fais que passer...
Le mode d'emploi pour les balises <code> (au cas ou) est ICI.
Cordialement,
Pijaku
Je ne fais que passer...
Le mode d'emploi pour les balises <code> (au cas ou) est ICI.
Cordialement,
Pijaku
https://docs.microsoft.com/fr-fr/office/vba/api/excel.range.address?redirectedfrom=MSDN
ravi d'avoir pu t'aider (entre stagiaire faut se serrer les coudes)
ravi d'avoir pu t'aider (entre stagiaire faut se serrer les coudes)
je ne comprend pas comment fonctionnent les "&" , a quoi il serve ça fait plusieurs fois que j'en voit dans les codes ?
tu avais oublier Cells et essaye de t'affranchir du select qui ralentit ton code :
et attention il subsiste un bug que je ne sait pas résoudre avec les date dont le jour est inferieur à 12 mais si t'as pas de soucis t'embête pas avec ça