VBA: cherche formule de test pour macro
Dernière réponse : dans Programmation
Bonjour à tous,
je suis à la recherche d'une formule de test à intégrer dans VBA pour une macro excel, qui est:
Je test une cellule (où il y a une date) pour déterminer le mois.
A partir de là, je vais copier la ligne pour la coller soit dans la feuille (1) (janvier), soit dans dans la (2) (février), ... en fonction du mois déterminer par la date.
Si quelqu'un peu m'aider sur ce sujet, je le (la) remerçi d'avance.
Bon soirée.
Mallow76
je suis à la recherche d'une formule de test à intégrer dans VBA pour une macro excel, qui est:
Je test une cellule (où il y a une date) pour déterminer le mois.
A partir de là, je vais copier la ligne pour la coller soit dans la feuille (1) (janvier), soit dans dans la (2) (février), ... en fonction du mois déterminer par la date.
Si quelqu'un peu m'aider sur ce sujet, je le (la) remerçi d'avance.
Bon soirée.
Mallow76
Autres pages sur : vba cherche formule test macro
Lassé par la pub ? Créez un compte
Je vois que les débutants ne sont pas accepté sur ce forum.
Il me semblait qu'un forum avait pour but l'entraide, mais il n'en ai rien.
Je vais donc me débrouiller par mes propres moyens, y passer des heures s'il le faut, j'étais loin de m'attendre à ce genre de réponse.
Amusez vous à faire une recherche de programmation sur plus de 1000 thèmes ouvert.
J'aimerai vous y voir.
Je regrette seulement que l'administrateur de ce forum tolère cela.
Tout le monde n'a pas la chance d'être un as de l'informatique, je débute dans VBA, je ne connais rien à la programmation, je maitrise à peu prêt les macro excel (via un enregistrement).
Bref, un petit coup de main aurait été le bienvenu.
Domage que certain ne comprenne pas cela.
Bonne soirée à tous.
Mallow76
PS: j'ai remarqué (dans mes recherches) que la personne qui se cache sous le pseudo "Zeb" est un as du RTFM. Pourquoi répondre?? ça n'aide personne. Il en faut peu pour s'amuser. Les réponses intelligentes lui sont rarement dédiées
Il me semblait qu'un forum avait pour but l'entraide, mais il n'en ai rien.
Je vais donc me débrouiller par mes propres moyens, y passer des heures s'il le faut, j'étais loin de m'attendre à ce genre de réponse.
Amusez vous à faire une recherche de programmation sur plus de 1000 thèmes ouvert.
J'aimerai vous y voir.
Je regrette seulement que l'administrateur de ce forum tolère cela.
Tout le monde n'a pas la chance d'être un as de l'informatique, je débute dans VBA, je ne connais rien à la programmation, je maitrise à peu prêt les macro excel (via un enregistrement).
Bref, un petit coup de main aurait été le bienvenu.
Domage que certain ne comprenne pas cela.
Bonne soirée à tous.
Mallow76
PS: j'ai remarqué (dans mes recherches) que la personne qui se cache sous le pseudo "Zeb" est un as du RTFM. Pourquoi répondre?? ça n'aide personne. Il en faut peu pour s'amuser. Les réponses intelligentes lui sont rarement dédiées
Salut, moi c'est zeb.
J'ai la prétention d'aider les gens sur ce forum.
Les questions très simples trouvent leur solution dans l'aide en ligne.
Comme tu ne savais même pas où chercher, (avant de trouver, il faut chercher), je t'ai proposé de lire ce putain de manuel (Passe moi l'expression, elle vient du Massachusetts Institute of Technology
). Il me semble même que je t'indique quoi chercher : MONTH. Qui veut dire MOIS en anglais, c'est-à-dire EXACTEMENT ce que tu cherches.
Et à chaque fois qu'un problème aura sa solution dans le manuel, la réponse sera RTFM.
D'ailleurs, je signale moi-même mon comportement indigne aux administrateurs sur le champ.
J'ai la prétention d'aider les gens sur ce forum.
Les questions très simples trouvent leur solution dans l'aide en ligne.
Comme tu ne savais même pas où chercher, (avant de trouver, il faut chercher), je t'ai proposé de lire ce putain de manuel (Passe moi l'expression, elle vient du Massachusetts Institute of Technology
). Il me semble même que je t'indique quoi chercher : MONTH. Qui veut dire MOIS en anglais, c'est-à-dire EXACTEMENT ce que tu cherches.Et à chaque fois qu'un problème aura sa solution dans le manuel, la réponse sera RTFM.
D'ailleurs, je signale moi-même mon comportement indigne aux administrateurs sur le champ.
OK,
c'est un peu plus clair, mais comme je te l'ai dis, je suis novice, j'ai compris ce que voulais dire RTFM, je veux bien y rechercher month mais où?
Dans l'aide VBA?
lorsque je tape month, cela me donne cet exemple, comment y intégrer une fonction derriere?
Dim MyDate, MyMonth
MyDate = #12 february 1969# ' Attribue une date.
MyMonth = Month(MyDate) ' MyMonth contient 2.
je recherche un test qui me permet d'aller copier une ligne vers une feuille 1 (pour janvier), une feuille 2 (pour février), .... à partir d'une cellule qui me détermine le mois d'une autre cellule par:
=mois(b30)
ça fait 3 jours que je tourne en rond sans trouver, voilà tout
c'est un peu plus clair, mais comme je te l'ai dis, je suis novice, j'ai compris ce que voulais dire RTFM, je veux bien y rechercher month mais où?
Dans l'aide VBA?
lorsque je tape month, cela me donne cet exemple, comment y intégrer une fonction derriere?
Dim MyDate, MyMonth
MyDate = #12 february 1969# ' Attribue une date.
MyMonth = Month(MyDate) ' MyMonth contient 2.
je recherche un test qui me permet d'aller copier une ligne vers une feuille 1 (pour janvier), une feuille 2 (pour février), .... à partir d'une cellule qui me détermine le mois d'une autre cellule par:
=mois(b30)
ça fait 3 jours que je tourne en rond sans trouver, voilà tout
bon mallow76 vu que zeb a ete sanctionne (c qui est dommage car il aide vraiment bien ^^) je vais t'aider
alors reexplique ton probleme plz
moi j'ai compris que tu essaye de trouver un mois dans un tableau alors si le mois est en lettres tu utilise la fonction "format" (et je vais dire la meme chose que zeb : cherche dans l'aide en ligne . quand on dit sa c pas pour ne pas t'aider mais pour que tu comprenne ce que tu fais car on peut te donner le code deja tout fait mais tu ne saura pas t'en servir alors j'espere que tu comprends cela
)
alors reexplique ton probleme plz
moi j'ai compris que tu essaye de trouver un mois dans un tableau alors si le mois est en lettres tu utilise la fonction "format" (et je vais dire la meme chose que zeb : cherche dans l'aide en ligne . quand on dit sa c pas pour ne pas t'aider mais pour que tu comprenne ce que tu fais car on peut te donner le code deja tout fait mais tu ne saura pas t'en servir alors j'espere que tu comprends cela
)
Merci bcq de vouloir m'aider.
je connais un peu les macro sous excel, mais ce que je cherche à faire c'est un test qui va, selon un mois identifié, copier les données (saisies de compte) vers une feuille par mois (la feuille 01 étant le mois de janvier, la feuille 02 le mois de février, ect ...)
donc voilà comment j'ai procédé.
- je note sur une ligne (dans des cellules différentes), le jour, le libéllé de l'opération, débit ou crédit, ...
Sur une autre cellule (m30), j'ai tapé la formule "=mois(b30)" (b30 étant la cellule de la date), ainsi j'ai le mois en chiffre qui est déterminé.
- par une validation macro, je souhaite faire la copie de ces données, sur une autre feuille (expliqué plus haut)
On m'a expliqué qu'il valait mieux faire un test en programation VBA qui, selon ma cellule m30 irait faire la copie.
J'ai essayé d'utiliser la fonction "If Then Else", mais sans succès.
voilà comment j'ai procédé:
If "m30" = "number" Then
estnumber = "1" ' Application.Run "'nom du fichier.xls'!macrojanvier"
Else
estnumber = "2" ' Application.Run "'nom du fichier.xls'!macrofevrier"
Else
...
Je cherche depuis 4 jours maintenant comment taper ma fomule qui testera mon mois pour exécuter la copie (macrojanvier ou les autres) comme je le souhaite.
je pourrais tout simplement tout coller sur la même feuille et faire une macro pour afficher uniquement le mois voulu, mais je souhaite apprendre et évoluer. Si je ne me creuse pas la cervelle, je n'y arriverai pas.
J'ai analysé différent code, je commence à comprendre le principe, mais je ne sais pas comment assembler le tout.
Voilà, j'espère avoir été le plus clair possible, si il manque des infos, il ne faut pas hésiter.
Merci.
Mallow76
je connais un peu les macro sous excel, mais ce que je cherche à faire c'est un test qui va, selon un mois identifié, copier les données (saisies de compte) vers une feuille par mois (la feuille 01 étant le mois de janvier, la feuille 02 le mois de février, ect ...)
donc voilà comment j'ai procédé.
- je note sur une ligne (dans des cellules différentes), le jour, le libéllé de l'opération, débit ou crédit, ...
Sur une autre cellule (m30), j'ai tapé la formule "=mois(b30)" (b30 étant la cellule de la date), ainsi j'ai le mois en chiffre qui est déterminé.
- par une validation macro, je souhaite faire la copie de ces données, sur une autre feuille (expliqué plus haut)
On m'a expliqué qu'il valait mieux faire un test en programation VBA qui, selon ma cellule m30 irait faire la copie.
J'ai essayé d'utiliser la fonction "If Then Else", mais sans succès.
voilà comment j'ai procédé:
If "m30" = "number" Then
estnumber = "1" ' Application.Run "'nom du fichier.xls'!macrojanvier"
Else
estnumber = "2" ' Application.Run "'nom du fichier.xls'!macrofevrier"
Else
...
Je cherche depuis 4 jours maintenant comment taper ma fomule qui testera mon mois pour exécuter la copie (macrojanvier ou les autres) comme je le souhaite.
je pourrais tout simplement tout coller sur la même feuille et faire une macro pour afficher uniquement le mois voulu, mais je souhaite apprendre et évoluer. Si je ne me creuse pas la cervelle, je n'y arriverai pas.
J'ai analysé différent code, je commence à comprendre le principe, mais je ne sais pas comment assembler le tout.
Voilà, j'espère avoir été le plus clair possible, si il manque des infos, il ne faut pas hésiter.
Merci.
Mallow76
tout d'abord met ton code etre ballise "
puis si tu met plusieurs else a la suite il faut ecrire
et tu peux nous dire a quoi correspond "number" et "estnumber" cela peux nous aider car ce n'est pas tres pratique de mettre
donc je te conseille de le mettre directement :
et si tu peux nous donner ton code entier (si tu en a un ) merci
"
puis si tu met plusieurs else a la suite il faut ecrire
If "m30" = "number" Then
estnumber = "1" ' Application.Run "'nom du fichier.xls'!macrojanvier"
ElseIf "m30"="number+1" Then
estnumber = "2" ' Application.Run "'nom du fichier.xls'!macrofevrier"
ElseIf "m30"="number+2" Then
...
et tu peux nous dire a quoi correspond "number" et "estnumber" cela peux nous aider car ce n'est pas tres pratique de mettre
estnumber = "1" ' Application.Run "'nom du fichier.xls'!macrojanvier"
donc je te conseille de le mettre directement :
Application.Run "'nom du fichier.xls'!macrojanvier"
et si tu peux nous donner ton code entier (si tu en a un ) merci
ce que j'ai voulu écrir c'est:
"si ma cellule "m30" est égal à un nombre
alors
ce nombre égal à "1" entraine l'application de la macro janvier
ou alors
ce nombre égal à "2" entraine l'application de la macro février
...
Je me rend compte que "number" n'est pas le bon choix.
Par contre qu'appelles tu le code, est ce ma formule de condition ou la macro qu'elle entraine?
...
"si ma cellule "m30" est égal à un nombre
alors
ce nombre égal à "1" entraine l'application de la macro janvier
ou alors
ce nombre égal à "2" entraine l'application de la macro février
...
Je me rend compte que "number" n'est pas le bon choix.
Par contre qu'appelles tu le code, est ce ma formule de condition ou la macro qu'elle entraine?
...
"La cellule m30" se dit en VBA : Range("M30").
"Est-ce un nombre ?" se dit en VBA : IsNumeric( .. ).
"La valeur du contenu de la cellule X" se dit en VBA : Range(X).Value.
Donc "La cellule m30 contient-elle un nombre" se dit : IsNumeric(Range("M30").Value).
Une succession de "Si Alors Sinon" peut s'écrire avec un Select Case.
Encore faut-il savoir de quelle feuilles de départ et d'arrivée on parle.
Alors pourquoi pas cet algorithme :
Si la cellule B30 (de quelle feuille) est une date, prendre le mois de cette date.
Copier une ligne (laquelle ?) de cette feuille, vers une autre (laquelle ?), dans une autre feuille dont le nom est 1 pour Janvier, 2 pour Février.
Ce qui se dit en VBA :
"Est-ce un nombre ?" se dit en VBA : IsNumeric( .. ).
"La valeur du contenu de la cellule X" se dit en VBA : Range(X).Value.
Donc "La cellule m30 contient-elle un nombre" se dit : IsNumeric(Range("M30").Value).
Une succession de "Si Alors Sinon" peut s'écrire avec un Select Case.
Encore faut-il savoir de quelle feuilles de départ et d'arrivée on parle.
Alors pourquoi pas cet algorithme :
Si la cellule B30 (de quelle feuille) est une date, prendre le mois de cette date.
Copier une ligne (laquelle ?) de cette feuille, vers une autre (laquelle ?), dans une autre feuille dont le nom est 1 pour Janvier, 2 pour Février.
Ce qui se dit en VBA :
If IsDate(Sheets(feuille_de_départ).Range("B30")) Then Sheets(feuille_de_départ).Rows(quelle ligne ?).Copy Destination:=Sheets(CStr(Month(Sheets(feuille_de_départ).Range("B30")))).Range(ligne_d'arrivée) End If
Donc si je comprend bien;
j'extrait d'abord le mois de la cellule b30 puis je copie la ligne déterminée vers la feuille du mois correspondant par le biais de "CStr" qui est une donnée en chaine dont l'origine est le mois.
je viens d'essayer cet algorithme mais j'ai une erreur d'execution 9.
J'ai beau chercher quel indice se trouve en dehors de la plage, mais je ne vois pas.
Donc je me suis repenché sur le 1er algorithme et j'ai écris:
Mais j'ai toujours une erreur 9.
Pour répondre à ta question Hoegarden31, je recherchais un nombre par "number".
Merci à Zeb de m'avoir corrigé.
Donc, je suis bloqué car Je ne vois pas quel indice se trouve en dehors de la plage.
j'extrait d'abord le mois de la cellule b30 puis je copie la ligne déterminée vers la feuille du mois correspondant par le biais de "CStr" qui est une donnée en chaine dont l'origine est le mois.
je viens d'essayer cet algorithme mais j'ai une erreur d'execution 9.
J'ai beau chercher quel indice se trouve en dehors de la plage, mais je ne vois pas.
Donc je me suis repenché sur le 1er algorithme et j'ai écris:
(J'ai ajouté les balises CODE. C'est très vilain de ne pas les mettre !!!!!)
If IsNumeric(Sheets(Operation_bancaire!).Range("m30")) = "1" Then ' Application.Run "janvier" ElseIf IsNumeric(Sheets(Operation_bancaire!).Range("m30")) = "1" Then ' Application.Run "fevrier" End If
Mais j'ai toujours une erreur 9.
Pour répondre à ta question Hoegarden31, je recherchais un nombre par "number".
Merci à Zeb de m'avoir corrigé.
Donc, je suis bloqué car Je ne vois pas quel indice se trouve en dehors de la plage.
je pense que ton bout de programme marche pas car si tu regarde l'aide de "IsNumeric", tu verra qu'il renvoi un booleen donc il faut le comparer a vrai au faux (true, false) donc a mon avis ce n'est pas la bonne solution car il n'y a que 2 possibilites donc pour le mois mars tu es bloquer
(j'espere que zeb me corrigera si je me trompe )
(j'espere que zeb me corrigera si je me trompe )
L'algorithme qu'à proposer Zeb n'a pas besoin de tester la valeur du mois actuelle, car finalement le test if mois = 1 elseif mois = 2... est totalement inutile. Par contre il n'a pas mis les lignes ou tu réalises l'ajout donc il faut les remplacer (j'espère que tu l'a fait)
Ensuite 2eme point qui peut poser problème c'est le nom de tes onglets, est ce que les mois sont écrit 1..12 ou 01,02..12
Si c'est "01" alors il faut modifier :
Ensuite 2eme point qui peut poser problème c'est le nom de tes onglets, est ce que les mois sont écrit 1..12 ou 01,02..12
Si c'est "01" alors il faut modifier :
If IsDate(Sheets(feuille_de_départ).Range("B30" )) Then
Sheets(feuille_de_départ).Rows(quelle ligne ?).Copy Destination:=Sheets(CStr(format(Sheets(feuille_de_départ).Range("B30" ),"mm")).Range(ligne_d'arrivée)
End If
Et si c'est en chiffre romain ?
Et si Operation_bancaire n'est pas une variable, mais le nom de la feuille, il faut le mettre entre guillemets.
Si l'Option Explicit avait été placée, ceci ne serait pas arrivé.
hoegarden31> Tu vois qu'il faut toujours mettre cette fichue option.
mallow76> Utilise Option Explicit !
Spoiler
WorksheetFunction.Roman()
Et si Operation_bancaire n'est pas une variable, mais le nom de la feuille, il faut le mettre entre guillemets.
Si l'Option Explicit avait été placée, ceci ne serait pas arrivé.
hoegarden31> Tu vois qu'il faut toujours mettre cette fichue option.
mallow76> Utilise Option Explicit !
Bonjour,
dsl, j'étais en déplacement.
Donc j'ai tenu compte de toutes vos remarque, et j'ai écris:
Sub valider()
'
' valider Macro
' Macro enregistrée le 28/06/2007 par Gil
'
'
If IsDate(Sheets(Opération_bancaire!).Range("b30")) Then
Sheets(Opération_bancaire!).Rows("B30:L30").Copy Destination:=Sheets(CStr(Format(Sheets(Opération_bancaire!).Range("b30"), "mm"))).Range("9:9")
End If
End Sub
J'ai bien des feuilles numéroté 01, 02, 03, ...
J'ai tapé "Option Explicit" mais je ne sais pas si je l'ai placé au bon endroit, je l'ai positionné devant "Sub valider()".
J'ai toujours l'erreur d'indice n'appartenant pas à la sélection.
La 1ère ligne est en jaune CàD:
If IsDate(Sheets(Opération_bancaire!).Range("b30")) Then
dsl, j'étais en déplacement.
Donc j'ai tenu compte de toutes vos remarque, et j'ai écris:
Sub valider()
'
' valider Macro
' Macro enregistrée le 28/06/2007 par Gil
'
'
If IsDate(Sheets(Opération_bancaire!).Range("b30")) Then
Sheets(Opération_bancaire!).Rows("B30:L30").Copy Destination:=Sheets(CStr(Format(Sheets(Opération_bancaire!).Range("b30"), "mm"))).Range("9:9")
End If
End Sub
J'ai bien des feuilles numéroté 01, 02, 03, ...
J'ai tapé "Option Explicit" mais je ne sais pas si je l'ai placé au bon endroit, je l'ai positionné devant "Sub valider()".
J'ai toujours l'erreur d'indice n'appartenant pas à la sélection.
La 1ère ligne est en jaune CàD:
If IsDate(Sheets(Opération_bancaire!).Range("b30")) Then
Citation :
Donc j'ai tenu compte de toutes vos remarqueIci et là, nous t'expliquons et/ou nous te donnons le bon exemple.
Lire les règles, les comprendre et les appliquer !
Et puisque tu ne comprends ni le jargon et les usages (normal pour un nouveau), ni les consignes et les règles en français (anormal ! C'est à toi de faire l'effort, pas à nous), je te fais un dessin :
Non, hoegarden31, mallow76 a raison
mallow, éclate ton code pour savoir où se trouve le problème :
(Ce code est sensiblement identique au tien. J'ai viré le CStr puisque Format renvoie une chaine et j'ai utilisé Rows pour désigner une ligne plutôt que Range("9:9") qui n'est pas faux mais moins joli.)
Où est l'erreur 9, maintenant ?
mallow, éclate ton code pour savoir où se trouve le problème :
(Ce code est sensiblement identique au tien. J'ai viré le CStr puisque Format renvoie une chaine et j'ai utilisé Rows pour désigner une ligne plutôt que Range("9:9") qui n'est pas faux mais moins joli.)
Dim ws_source As WorkSheet Dim ws_dest As WorkSheet Dim s_M30 As String Set ws_source = Sheets("Opération_bancaire") s_M30 = ws_source.Range("M30").Text s_M30 = Format(s_M30, "mm") Set ws_dest = Sheets(s_M30) ws_source.Rows(30).Copy Destination:=ws_dest.Rows(9) ' // Rhoooo ! ' // Merci pour mallow, Freeman ;) Set ws_source = Nothing Set ws_dest = Nothing
Où est l'erreur 9, maintenant ?
Dim ws_source As WorkSheet
Dim ws_dest As WorkSheet
Dim s_M30 As String
Set ws_source = Sheets("Opération_bancaire")
s_M30 = ws_source.Range("M30").Text
s_M30 = Format(s_M30, "mm")
Set ws_dest = Sheets(s_M30)
ws_source.Rows(30).Copy Destination:=ws_dest.Rows(9) 'manquait un ws_
Set ws_source = Nothing
Set ws_dest = Nothing
Lassé par la pub ? Créez un compte
- Contenus similaires :
, mais pour dire j'ai bien rigolé en lisant ce topics