Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

convertir condition excel en vba

A

albert

Guest
bonsoir à tous... les passionnés

pour la formule excel

SI(C2=C1;D1+1;1)

je fais la traduction suivante:

Range("D2").Select
If Range("C2") = Range("C1") Then
Range ("D1") + 1
Else
1
End If
End Sub


vba indique une erreur de compilation sur Range de la ligne Range ("D1") + 1

je n'arrive pas à corriger

pourtant je n'ai pas l'impression d'avoir fait une erreur ....
 
J

Jean-Marie

Guest
Bonsoir Albert, Bonsoir le forum

Moi je suis pas VBiste..., mais quand je regarde ton code, sa me saute au yeux, remplace ta ligne par

range("D1") = range("D1")+1

Thierry corrige moi, si je me trompe;

@+Jean-Marie

PS Albert regarde les autres posts précédents, ils regorgent de ces fonctions ...
 
@

@+Thierry

Guest
Bonsoir Albert

Thanx Jean Marie pour le compliment indirect

Donc Albert voici la vraie "Prose" VBA en bon VBA pour écrire exactement la même chose que ta formule......

But !!![/u] Tu n'as pas spécifié OU était ta cellule qui reçoit la formule :
=SI(C2=C1;D1+1;1)

Donc pour les test ci-dessous la cellule qui reçoit le résultat est "A1" pour être clair, car toi, même dans ton code tu as oublié de mentionner l'adresse de la cellule qui doit recevoir les calcules que VBA va faire..... C'est primordial en programmation VBA..... "tout n'est qu'objet, c'est çà le Visual Basic, il faut savoir jouer avec les Objets en les nommant Nickel Chrome"

Sub TestPROSE()
If Sheets("Feuil1").Range("C1").Value = Sheets("Feuil1").Range("C2").Value Then
Sheets("Feuil1").Range("A1").Value = Sheets("Feuil1").Range("D1").Value + 1
Else
Sheets("Feuil1").Range("A1").Value = 1
End If
End Sub


Maintenant la même chose abrégée :
Sub TestShort()
If Range("C1") = Range("C2") Then
Range("A1") = Range("D1") + 1
Else: Range("A1") = 1
End If
End Sub

Les deux vont faire la MEME chose mais APPAREMMENT seulement !
"Prose" sait où aller précisément dans chaque Objet.......
"Short" ne va qu'aux premiers Objets qui seront accessible dans la feuille active....

Voilà Albert ton premier cours de VBA !!! Welcome to The VBA's World !!!

Maintenant je te donne ce code à titre de Prose.. car est code comme çà n'est pas vraiment utile on lui préfera de loin la formule.... il faudrait au moins écrire çà pour que celà justifie de la faire en VBA !

'====================================================================================

Sub MaPremiereMacroSi()

'Ici je sors de la macro si LES DEUX cellules sont vides
If Range("C1") = "" And Range("C2") = "" Then Exit Sub


'Ici je pose la condition
If Range("C1") = Range("C2") Then

'Si la Condition est remplie, une suite d'actions :
With Sheets("Feuil1")
.Range("A1") = Range("D1") + 1
.Range("A1").Interior.ColorIndex = 6 '= Couleur Jaune
.Range("A1").Font.ColorIndex = 3 ' ' '= Couleur Rouge
End With

'Autrement
Else

'Si la Condition n'est dons pas remplie, une suite d'actions :
With Sheets("Feuil1")
.Range("A1") = 1
.Range("A1").Interior.ColorIndex = 1 '= Couleur Noire pour l'intérieur
.Range("A1").Font.ColorIndex = 2 ' ' '= Couleur Blanche pour la Police... 22 (lol)
Range("A1").Font.Bold = True ' ' ' ' '= Police en gras
End With
'pour le fun il y aura un message de confirmation dans cette suite d'action
MsgBox "Bingo ! C1 <> C2" ' Un message ! lol
End If

'c'est fini pour le premier cours !! @+Thierry.... Bonne Soirée
End Sub
 
@

@+Thierry

Guest
Bonjour

Merci Thry, mais ce n'est vraiment pas grand chose.... Dommage que j'ai loupé le Bold à partir du But....

Mais pour les tous débutant VBA faites un copié collé de "MapremièreMacroSi" et collée la dans un module standard... Ce sera beaucoup plus lisible...

Encore sorry !! me suis fais avoir avec ces [ b ]... et [ / b ] !!!

@+Thierry
 
A

albert

Guest
bonjour forum, bonjour à tous

AQUE merci les Copains !!! (il y en a de la génération "salut les copains" sur le forum???) pas mal cette petite animation, Veriland

Merci Thierry, les ouvrages en vba ne sont pas toujours précis sur les boucles…. (j'aurais dû joindre un fichier .XLS avec ma question….
Il suffisait, en effet de créer une égalité : Range("D2") = Range("D2") + 1 (merci J. Marie)
J'ai appliqué dans Sub NbreJourSemaine()

Ce qui donne un résultat dans une cellule… comme je manque d'habileté en la matière, j'ai bricolé une formule à partir d'excel dans la macro " AVECsi() "(maintenant je sais qu'il faut saisir à la frappe et non pas simplement coller)

J'ai appliqué le principe dans les modules 6 et 7… et ça marche…

…à présent, il faut que je travaille sul le modèle proposé par Monique…

http://www.excel-downloads.com/html/French/forum/messages/1_12997_12997.htm


rationalisation, gain de place, excercice pédagogique… en fait, lorsqu'on a pataugé un moment, on est content quand on voit fonctionner

(heureusement qu'il y a le forum, sinon on abandonnerait bien vite)

albert
 

Pièces jointes

  • SEM.zip
    24 KB · Affichages: 24
@

@+Thierry

Guest
Bonjour à tous

Eu oui Albert, Il s'agit que d'une condition.... dans la "MaPremiereMacroSi"...

Par contre dans ton fichier "SEM.zip" je pense qu'il faille une boucle ... mais en fait je n'ai pas vraiment compris ce que tu cherches à faire ?

- écrire des formule en "dûr" sur les cellules par VBA

- écrire des valeurs sur les cellules retournées par des calculs VBA

Ce sont deux choses bien différentes...

...à suivre
BOn App
@+Thierry
 
A

albert

Guest
bonsoir Thierry, bonsoir forum,

Ce que je cherche à réaliser : conversion de dates daily en weekly sur 42 feuilles dans un même classeur.

J'ai examiné une possibilité d'utilisation de la feuille "valeurs hebdo" dans le fichier joint "formule Zip" à l'adresse : http://www.excel-downloads.com/html/French/forum/messages/1_12997_12997.htm

J'y ai collé les historiques du cac40, du début janvier 200 au 9/01/03 (fichier de 219 Ko)
Inconvénients :
- les calculs intermédiaires ne se mettent pas à jour automatiquement si on ajoute des historiques en dernière ligne colonnes I et J
- il faut 1 calcul par feuille : 219 Ko x 42, la solution n'est pas raisonnable

j'ai donc envisagé de convertir toutes les formules excel en vba, en utilisant l'enregistreur de macros…

la macro fait 5733 Ko… beaucoup plus que la macro qui me fait le téléchargement et le calcul des rendemens quotidiens des 40 titres !!!

bon, mais j'ai dû louper quelque chose, puisque le code vba recrée les formules excel dans les cellules… et les calculs consomment de la mémoire…

il va donc falloir que je transforme toutes les formules en vba, je crois… ça sera pour la semaine prochaine… je n'ai pas fini parce que pour moi le langage excel, c'est un peu comme du Vénusien…


Mes formules vba:

J'ai lié les macros dans Zip SEM avec Call : fonctionnement rapide, sans PB
Puis j'ai ajouté :

Sub GuySem()
'
' GuySem Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'

'
Range("C2").Select

ActivecellFormulaR1C1 = "=IF(R2C3<>"""",MIN(RC[-4]:R[389]C[-4]),"""")"

End Sub
Sub EnGtrois()
'
' EnGtrois Macro
' Macro enregistrée le 10/01/2003 par Packard Bell NEC Inc.
'

'
'Range("G3").Select
'Set Plage = Range(Selection, Selection.End(xlDown)).Offset(-1, 0)
'Plage.FormulaR1C1 = _
' "=IF(R2C3<>"""",IF(R[-1]C<MAX(R2C3:R4000C3),R[-1]C+1,""""),"""")"
ActiveCell.FormulaR1C1 = "=IF(R2C3<>"""",MIN(RC[-4]:R[389]C[-4]),"""")"
End Sub

Sub hacheDEUX()
'
' hacheDEUX Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'

'
Range("H2").Select
Set Plage = Range(Selection, Selection.End(xlDown))
'ActiveCell.FormulaR1C1 = _
"=IF(RC[-1]<>"""",INDIRECT(ADDRESS(MATCH(RC[-1],R400C3,1),COLUMN(RC[-7]))),"""")"
Plage.FormulaR1C1 = "=IF(RC[-1]<>"""",INDIRECT(ADDRESS(MATCH(RC[-1],R1C3:R400C3,1),COLUMN(RC[-7]))),"""")"
'Range("H3").Select
End Sub
Sub EnIdeux()
'
' EnIdeux Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'

'
Range("I2").Select
Set Plage = Range(Selection, Selection.End(xlDown))
'ActiveCell.FormulaR1C1 =

Plage.FormulaR1C1 = "=IF(AND(RC[-2]<>"""",COUNTIF(R2C3:R400C3,RC[-2])>0),SUMIF(RC[-6]:R400C3,RC[-2],RC[-7])/COUNTIF(RC[-6]:R400C3,RC[-2]),"""")"

End Sub


….je peux faire comment pour gagner de la mémoire et du temps de calcul ???

Merci

albert
 
A

albert

Guest
... je viens de trouver une erreur sur SubGuySem... décidément...Sub GuySem()
'
' GuySem Macro
' Macro enregistrée le 09/01/2003 par Packard Bell NEC Inc.
'

'
Range("G2").Select au lieu de :
'Range("C2").Select

ActiveCell.FormulaR1C1 = "=IF(R2C3<>"""",MIN(RC[-4]:R[389]C[-4]),"""")"
'Range("G3").Select
 

Discussions similaires

Réponses
6
Affichages
419
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…