Videos streaming images jeux et buzz
Connexion






Perdu le mot de passe ?

Inscrivez-vous maintenant !
Menu Principal
Communauté


(1) 2 »


Quokka
Macro excel
 1  #1
Je masterise !
Inscrit: 13/11/2012 17:08
Post(s): 2917
Karma: 202
c'est encore moi 😃

Je pose mes questions ici plutôt que sur des forums spécialisé parce que je suis plus à l'aise avec vous et que je pense que mes questions sont simples.

J'aimerais faire une macro.
L'idée c'est ca : en D4 j'ai C2+D3 et en A2 j'ai C2+5


Grace à l'enregistreur de macro j'obtiens :

 ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=R[-1]C[1]+5"
End Sub


Ce qui ne me satisfais pas puisque ce que je veuxavoir c'est non pas ma réponse dans A2 mais dans la diagonale de B1 ( donc si je suis en C3, réponse en B2 et plus en A2)

J'ai donc tenté un : 😃
 ActiveCell.FormulaR1C1 = "=RC[-2]+RC[-1]"
    Range("R[3]C[1]").Select
    ActiveCell.FormulaR1C1 = "=R[-1]C[1]+5"
End Sub


Ca ne marche pas mais vous avez compris l'idée ^^ une solution ?

Contribution le : 06/03/2016 21:17
Signaler

Arsenick
 0  #2
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6446
Karma: 1023
@Quokka Oublie le générateur de macro 😃

Tu peux facilement faire une macro en tapant "=" puis tu clic sur la cellule désirée puis tu ajoute un "+" et ainsi de suite, a la fin tu tape enter et c'est bon.

Contribution le : 06/03/2016 23:50
Signaler

Z3bbra
 0  #3
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
Citation :

@Quokka a écrit:
Ce qui ne me satisfais pas puisque ce que je veux avoir c'est non pas ma réponse dans A2 mais dans la diagonale de B1 ( donc si je suis en C3, réponse en B2 et plus en A2)
Je n'arrive pas à bien comprendre ta demande 😞 De plus comment B2 peut être dans la diagonale de B1 ? J'ai dû louper un truc

Contribution le : 07/03/2016 00:07
Signaler

Quokka
 0  #4
Je masterise !
Inscrit: 13/11/2012 17:08
Post(s): 2917
Karma: 202
@Z3bbra en fait ce qui me me dérange c'est qu il y ai A2 dans ma formule parce que cela signifie que Je ne sais utiliser cette macro qu'a cette endroit. ce que je veut c'est que peut importe où sont mes données sur excel que je puisse utiliser la macro. donc additions des cellule 1 et2 en ligne puis addition de 5 à 1 avec la réponse dans la diagonale de 1. 🙂
(c'est juste des formule comme ça. Ce qui m'intéresse c'est la disposition des données )

@Arsenick
l avantage c'est de pouvoir exécuter plusieurs formules en un seul raccourcis

@yakow

je dis pas que le bénéfice sera spécialement grand pour le moment mais ça sera toujours intéressant. Dis moi juste si tu sais où non. te casse pas la tête 🙂

Contribution le : 07/03/2016 07:35
Signaler

Arsenick
 1  #5
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6446
Karma: 1023
@Quokka

Déjà commence par exposé l’entièreté du problème: quel sont tes données de base et quel est le but final.

Au vu des infos éparse que tu donnes j'ai juste l'impression qu'en fait tu as un vélo et tu veux qu'il réagisse comme une moto...
A la limite avec du VBA t'aura un vélo à moteur mais ce ne sera toujours pas une moto.

Contribution le : 07/03/2016 08:02
Signaler

Z3bbra
 1  #6
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
@Quokka si j'ai bien compris ta demande, alors ceci pourrait être utile :


Peut importe ou tu auras cette configuration, il faudra toujours que tu mettes ton curseur sur la première case ou il y a tes chiffres (Cf case vert).
Les cases en rouge, sont celles ou tes résultats apparaîtront.
Lorsque je marque "C2" + "D4", se sont ici les cases qui sont concerné par le calcul, mais si tu déplace tout ces petits chiffres, la formule se décalera aussi.
Les calculs sont fait de façon, non pas fixe, mais en se décalant de tant de case pour atterrir là ou tu veux.




Pour se premier code, je suis parti sur le principe que tu voulais ajouter à "C2" la valeur de la case "D4" :
ActiveCell.Offset(3, 2).Activate
ActiveCell.FormulaR1C1 = "=R[-3]C[-1]+R[-3]C"
ActiveCell.Offset(-2, -3).Activate
ActiveCell.FormulaR1C1 = "=R[2]C[3]+RC[2]"

Si ce n'est pas le cas il te suffit juste de faire changer le code en rouge par la valeur que tu veux :
ActiveCell.FormulaR1C1 = "=R[2]C[3]+RC[2]"

ActiveCell.FormulaR1C1 = "=5+RC[2]"


J'espère que ça donnera ce que tu veux. Comme dis mon VDD essaye de nous donner plus de détails pour que l'on sache quoi faire

Contribution le : 07/03/2016 10:24
Signaler

Quokka
 0  #7
Je masterise !
Inscrit: 13/11/2012 17:08
Post(s): 2917
Karma: 202
Je vous montre ça tantôt 🙂 en gros c'est une différence de date (duree) et une prévision de date qui se met en dessous puis la date réelle qui viens à côté.
fin soit je montre ça tantôt 🙂
c est pas primordial mais c'est plus sympa que les formules s'exécutent toute seule plutôt que de les retaper ou les draguer

Contribution le : 07/03/2016 10:38
_________________
Signaler

Quokka
 0  #8
Je masterise !
Inscrit: 13/11/2012 17:08
Post(s): 2917
Karma: 202
@yakow @Arsenick @Z3bbra Question résolue!

Merci Z3bbra c'est cette ligne :
ActiveCell.Offset(x, y).Activate

Qui me sauve ! il me suffit de remplacer cette ligne :
Range("A2").Select

Par la tienne et je peux aller où je veux!


Merci à tous !! j’espère ne pas être trop ennuyant 😃

Contribution le : 07/03/2016 22:34
_________________
Signaler

Z3bbra
 1  #9
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
Citation :

@Quokka a écrit:
Merci à tous !! j’espère ne pas être trop ennuyant :-D
Content d'avoir pu t'aider 😉
Non, ne te fais fais pas de soucis

Contribution le : 07/03/2016 22:40
Signaler

Z3bbra
 0  #10
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
Bon ben cette fois ci c'est moi qui est besoin d'aide pour un logiciel que je suis en train de faire.

Alors voici le code en question :
Sub Nb_Struc_Change()

Dim Sp As Control

For Each Sp In Me.Controls
----If TypeName(Sp) = "SpinButton" Then
--------NbStrucRes = NbStrucRes - Me.Controls(Sp.Name).Value
--------If NbStrucRes = 0 And Me.Controls(Sp.Name).Value = 0 Then Me.Controls(Sp.Name).Enabled = False
----End If
Next

Me.L_L_NbStruc.Caption = "Structure restante : " & NbStrucRes

End Sub


Pour vous expliquer un peu la chose. J'ai sur la UserForm X Control de type SpinButton. Il n'y a pas de nombre d'entitée défini c'est pour ça que je passe sur cette méthode.

Pour les SpinButtons, lorsque je clic dessus, soit la valeur est incrémentée, soit décrémentée. Lorsque la valeur est incrémenté, le code marche parfaitement bien sans aucun soucis, en revanche le problème se pose lorsque la valeur est décrémenté, je n'arrive pas à incrémenté la variable "NbStrucRes" de "+1" MAIS QU'UNE SEULE FOIS. À savoir que la partie "For Each .. Next" est réalisé à chaque fois qu'il trouve un nouveau SpinButton. Donc s'il y en a 4, il réalisera 4 fois ce qu'il y a entre "For Each .. Next".

EDIT : J'ai trouvé !!
Il suffit simplement de re spécifié la valeur de base et le tour est joué :
Sub Nb_Struc_Change()

Dim Sp As Control
NbStrucRes = NbStruc

For Each Sp In Me.Controls
----If TypeName(Sp) = "SpinButton" Then
--------NbStrucRes = NbStrucRes - Me.Controls(Sp.Name).Value
--------If NbStrucRes = 0 And Me.Controls(Sp.Name).Value = 0 Then Me.Controls(Sp.Name).Enabled = False
----End If
Next

Me.L_L_NbStruc.Caption = "Structure restante : " & NbStrucRes

End Sub

Contribution le : 22/11/2016 00:33
Signaler

Arsenick
 1  #11
J'aime glander ici
Inscrit: 13/12/2006 00:12
Post(s): 6446
Karma: 1023
@Z3bbra J'ai lu qu'en oblique mais j'aurai tendance à dire : utilise un flag =>
tu met une variable boolean à true à l'initialisation

dans ta boucle tu vérifie si Flag == true si oui +1 et met le flag à flase si non rien

en sortie de boucle, tu remets ton flag à true.

edit: erf tellement lu en oblique que je répond pour rien 😃

Contribution le : 22/11/2016 19:22
Signaler

Z3bbra
 0  #12
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
Merci quand même de ton intention @Arsenick ! 😃

Contribution le : 22/11/2016 22:53
Signaler

Skity
 0  #13
Je masterise !
Inscrit: 29/12/2013 23:48
Post(s): 2024
Karma: 521
J'ai l'impression que ce problème aurait pu être résolu avec juste des formules "="
Comme utiliser un tank pour détruire une petite boite en plastique
Mise en forme conditionnelles ça marche au top. :roll:

Contribution le : 23/11/2016 07:48
Signaler

tonyfrost
 0  #14
Je masterise !
Inscrit: 12/06/2007 18:44
Post(s): 3194
Karma: 724
quelqu'un aurait une meilleur facon de faire ça ? 😃


Dim DL As Long, i As Long
 
DL = Cells(Application.Rows.Count, 22).End(xlUp).Row
    For i = 2 To DL
        If Range("v" & i) = "tada" _
        Then
        Rows(i).Hidden = True
    
    End If
    
    Next i
    
    For i = 2 To DL
        If Range("v" & i) = "nana" _
        Then
        Rows(i).Hidden = True
    
    End If
    
    Next i
    
    For i = 2 To DL
        If Range("v" & i) = "nini" _
        Then
        Rows(i).Hidden = True
    
    End If
    
    Next i
    
    For i = 2 To DL
        If Range("v" & i) = "fifi" _
        Then
        Rows(i).Hidden = True
    
    End If
    
    Next i



En gros je veux que dans la colonne 22 si il y a le mot tada ou nana ou fifi ou nini les lignes soit masquées

Et c'est justement fait pour pas utiliser de filtre donc pas la peine de me dire de l'utiliser (même si je sait qu'il y a de gros rebelles sur ce forum) !

ty

Contribution le : 23/11/2016 21:31
Signaler

Z3bbra
 0  #15
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
Je te dirais de tout combiner en une seule fois @tonyfrost comme ceci :


Dim DL As Long, i As Long
 
DL = Cells(Application.Rows.Count, 22).End(xlUp).Row
    For i = 2 To DL
        If Range("v" & i) = "tada" Then Rows(i).Hidden = True
        If Range("v" & i) = "nana" Then Rows(i).Hidden = True
        If Range("v" & i) = "nini" Then Rows(i).Hidden = True
        If Range("v" & i) = "fifi" Then Rows(i).Hidden = True   
    Next i


Mais si tu veux vraiment gagner beaucoup de place, tu peux faire encore mieux :

Dim DL As Long, i As Long
 
DL = Cells(Application.Rows.Count, 22).End(xlUp).Row
    For i = 2 To DL
        If Range("v" & i) = ("tada" Or "nana" Or "nini" Or "fifi") Then Rows(i).Hidden = True
    Next i


Bon pas sur que ça marche, mais dans ce cas là fait ça : 100 % Garantie !

Dim DL As Long, i As Long
 
DL = Cells(Application.Rows.Count, 22).End(xlUp).Row
    For i = 2 To DL
        If Range("v" & i) = "tada" Or Range("v" & i) = "nana" Or Range("v" & i) = "nini" Or Range("v" & i) = "fifi" Or Then Rows(i).Hidden = True
    Next i


Ps : tu peux utiliser les bannières [ CODE ]

Contribution le : 23/11/2016 21:59
Signaler

tonyfrost
 0  #16
Je masterise !
Inscrit: 12/06/2007 18:44
Post(s): 3194
Karma: 724
@Z3bbra

Trop bien, je teste tout ça demain (j'ai hâte !)

Merci beaucoup Z3bbra !

Contribution le : 23/11/2016 22:15
Signaler

Skity
 0  #17
Je masterise !
Inscrit: 29/12/2013 23:48
Post(s): 2024
Karma: 521
@Z3bbra VB Master 😃

Contribution le : 23/11/2016 22:28
Signaler

Z3bbra
 0  #18
Je suis accro
Inscrit: 27/03/2015 08:55
Post(s): 1456
Karma: 346
Je viens d'y penser, @tonyfrost . Mais je dirais même que tu peux faire :

Dim i As Long

    For i = 2 To Cells(Application.Rows.Count, 22).End(xlUp).Row
        If Range("v" & i) = "tada" Or Range("v" & i) = "nana" Or Range("v" & i) = "nini" Or Range("v" & i) = "fifi" Or Then Rows(i).Hidden = True
    Next i



Ha ha @Skity sûrement pas, mais, vu que je suis en plein dedans ces temps ci 😉
Je reviendrais sûrement demander de l'aide moi aussi 😉 restez attentif 😛

Contribution le : 23/11/2016 22:33
Signaler

Skity
 1  #19
Je masterise !
Inscrit: 29/12/2013 23:48
Post(s): 2024
Karma: 521
@Z3bbra Lances moi une notif quand tu feras ton topic où tu demandes de l'aide 😉

Contribution le : 23/11/2016 22:38
Signaler

tonyfrost
 1  #20
Je masterise !
Inscrit: 12/06/2007 18:44
Post(s): 3194
Karma: 724
Citation :

@Z3bbra a écrit:
Je viens d'y penser, @tonyfrost . Mais je dirais même que tu peux faire :

Dim i As Long

    For i = 2 To Cells(Application.Rows.Count, 22).End(xlUp).Row
        If Range("v" & i) = "tada" Or Range("v" & i) = "nana" Or Range("v" & i) = "nini" Or Range("v" & i) = "fifi" Then Rows(i).Hidden = True
    Next i




Fonctionne à la perfection 🙂

Merci !!!!

Contribution le : 24/11/2016 20:09
Signaler


 Haut   Précédent   Suivant
(1) 2 »






Si vous êtes l'auteur d'un élément de ce site, vous pouvez si vous le souhaitez, le modifier ou le supprimer
Merci de me contacter par mail. Déclaré à la CNIL N°1031721.