convertir condition excel en vba

  • Initiateur de la discussion Initiateur de la discussion albert
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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 ....
 
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 ...
 
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
 
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
 
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

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
 
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
 
... 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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
16
Affichages
1 K
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
213
  • Question Question
Microsoft 365 Code VBA
Réponses
10
Affichages
773
Réponses
2
Affichages
371
Réponses
3
Affichages
518
Réponses
6
Affichages
522
Retour