aide pour un macro

bichet62

Nouveau membre
Bonsoir à tous,

J'ai besoin de faire un macro mais je n'y connais absolument rien.
En fait j'ai une cellule avec un ancien index et une avec un nouvel index, le but est que le nouvel index devienne l'ancien mais que si le nouvel index est à zéro, l'ancien reste le même. Je ne sais pas si j'ai été très claire, mais si quelqu'un peut m'aider et même me l'écrire, ce serait super. merci
 

drul

Obscur pro du hardware
Staff
A quel moment veux-tu que la copie s'effectue ?
Quand on entre une nouvelle valeur dans nouvelle index ?
 

bichet62

Nouveau membre


oui c'est tout à fait ça.
 

drul

Obscur pro du hardware
Staff
Commence par étudier la fonction suivante (à mettre dans les macros de ta feuille de travail)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
MsgBox (Target.Value)
End Sub
Ensuite essaie d'établir une stratégie et je t'aiderai à la coder
 

bichet62

Nouveau membre
je pense que dans la fonction "value" c'est valeur, pour "target" je crois que c'est la cible ou l'objectif mais je ne sais pas vraiment ce que la fonction est sensée faire ! Est ce que je la place au début dans la macro ?
Je n'ai pas vraiment de stratégie, je pensais faire en sorte que si la valeur est égale à zéro, l'index reste le même mais si la valeur est supérieure l'index change. je pense que c'est possible mais je ne sais pas comment !
 

drul

Obscur pro du hardware
Staff
Alors le but était de te faire comprendre l'utilité de la fonction "Worksheet_Change" elle appelé à chaque changement de valeur d'une cellule.
Le seul problème qu'il reste, c'est que lorsque cette fonction est appeler la valeur a déjà changer, on a donc plus accès a l'ancienne valeur.
Ce que je te propose:
1°) admettons que nouvelle index est en A1, ancien index est en A2.
2°) Créeons un index mem en A3
3°) Au moment du changement de A1, alors on copie A3 (Qui contient l'ancienne valeur de A1) dans A2, pui A1 dans A3, qui nous servira de mémoire.
Ce qui donne:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Row = 1 And Target.Column = 1 Then
        Range("A2").Value = Range("A3").Value
        Range("A3").Value = Range("A1").Value
    End If
End Sub
 

bichet62

Nouveau membre
Merci beaucoup, je pense que j'ai compris la marche à suivre. Si j'ai un autre index en B1,B2 je dois écrire
If Target.Row = 1 And Target.Column = 1 Then
Range ("B2"). Value = Range '"B3").Value
Range ("B3") .Value = Range ("B1"). Value
End If
Est ce que je dois écrire If Target.Row = 1 And Target.Column = 1 et End If et End Sub à chaque fois ?
Je vais essayer et je dis si j'ai réussi.
 

bichet62

Nouveau membre
En fait mes index sont en A1 et B1 donc j'ai remplacé column par ligne ce qui donne
If Target.Row = 1 And Target.Ligne = 1 Then
Range("B1").Value = Range("C1").Value
Range("C1").Value = Range("A1").Value
End If
Est ce que ma formule est correcte ?
D'avance Merci.
 

drul

Obscur pro du hardware
Staff
Target.Row=1 Veux dire ligne 1, Target.column=1 Veux dire A, l'ensemble donne donc A1.
Target.line ne veux rien dire...
N.B. target n'est utilisable que dans la fonction system Worksheet_Change
 

bichet62

Nouveau membre
Bonsoir, j'ai écris une macro en suivant ce que tu m'a dit mais ca ne marche pas comme je le souhaite.
Est ce que je pourrai t'envoyer ce que j'ai fait pour que tu me dises ce qui ne va pas !
Si tu es d'accord pourrais tu me donner une adresse mail ou je puisse t'envoyer mon fichier.
Merci.
 

drul

Obscur pro du hardware
Staff
Non pas de transfert de macro, trop dangereux, désolé.
Post ton code ici et je regarde
 

bichet62

Nouveau membre
Ok pas de problème je fais une copie de ma macro ci-dessous.

Merci.


Sub changeur()

Dim impression As String

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

impression = MsgBox("l'impression est-elle correcte?", vbYesNoCancel, "impression")
If impression = ok Then

ElseIf impression = vbNo Then
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

ElseIf impression = vbCancel Then
MsgBox ("resaisir les chiffres?")


End If

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 10 And Target.Column = 3 Then
Range("D10").Value = Range("H10").Value
Range("H10").Value = Range("C10").Value

If Target.Row = 11 And Target.Column = 3 Then
Range("D11").Value = Range("H11").Value
Range("H11").Value = Range("C11").Value

If Target.Row = 12 And Target.Column = 3 Then
Range("D12").Value = Range("H12").Value
Range("H12").Value = Range("C12").Value

If Target.Row = 13 And Target.Column = 3 Then
Range("D13").Value = Range("H13").Value
Range("H13").Value = Range("C13").Value

If Target.Row = 25 And Target.Column = 3 Then
Range("D25").Value = Range("H25").Value
Range("H25").Value = Range("C25").Value

If Target.Row = 26 And Target.Column = 3 Then
Range("D26").Value = Range("H26").Value
Range("H26").Value = Range("C26").Value

If Target.Row = 27 And Target.Column = 3 Then
Range("D27").Value = Range("H27").Value
Range("H27").Value = Range("C27").Value

If Target.Row = 39 And Target.Column = 3 Then
Range("D39").Value = Range("H39").Value
Range("H39").Value = Range("C39").Value

If Target.Row = 40 And Target.Column = 3 Then
Range("D40").Value = Range("H40").Value
Range("H40").Value = Range("C40").Value

If Target.Row = 41 And Target.Column = 3 Then
Range("D41").Value = Range("H41").Value
Range("H41").Value = Range("C41").Value

If Target.Row = 42 And Target.Column = 3 Then
Range("D42").Value = Range("H42").Value
Range("H42").Value = Range("C42").Value

End If


Range("c51:c54").Select
Selection.ClearContents

Range("d51:d54").Select
Selection.ClearContents


ActiveWorksheet.Save



End Sub

 

drul

Obscur pro du hardware
Staff
Salut, tu ne peux pas inclure un sub dans une sub, il faut mettre l'appel de "Private Sub Worksheet_Change"
En dehors de "sub changeur"
 

bichet62

Nouveau membre
Bonjour, OK mais concrètement comment je fais. J'ai essayé mais soit j'ai un message d'arrêt soit un message attente End Sub. Pour moi c'est du pareil au même je n ai rien compris. Je sais que j'abuse mais si tu pouvais me dire ce que je dois faire ce serait super. D'avance merci.
 

drul

Obscur pro du hardware
Staff
Suis pas gardien des règles moi, donc je répond même si il y a quelque lacune dans la formulation :o :)hello: Zeb)

Essaie ça (mais effectivement utilise la balise code la prochaine fois, c'est plus lisible):
Code:
Sub changeur()

Dim impression As String

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

impression = MsgBox("l'impression est-elle correcte?", vbYesNoCancel, "impression")
If impression = ok Then

ElseIf impression = vbNo Then
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True

ElseIf impression = vbCancel Then
MsgBox ("resaisir les chiffres?")


End If



Range("c51:c54").Select
Selection.ClearContents

Range("d51:d54").Select
Selection.ClearContents


ActiveWorksheet.Save
End Sub

Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row = 10 And Target.Column = 3 Then
  Range("D10").Value = Range("H10").Value
  Range("H10").Value = Range("C10").Value
End If
If Target.Row = 11 And Target.Column = 3 Then
  Range("D11").Value = Range("H11").Value
  Range("H11").Value = Range("C11").Value
End If
If Target.Row = 12 And Target.Column = 3 Then
  Range("D12").Value = Range("H12").Value
  Range("H12").Value = Range("C12").Value
End If
If Target.Row = 13 And Target.Column = 3 Then
  Range("D13").Value = Range("H13").Value
  Range("H13").Value = Range("C13").Value
End If
If Target.Row = 25 And Target.Column = 3 Then
  Range("D25").Value = Range("H25").Value
  Range("H25").Value = Range("C25").Value
End If
If Target.Row = 26 And Target.Column = 3 Then
  Range("D26").Value = Range("H26").Value
  Range("H26").Value = Range("C26").Value
End If

If Target.Row = 27 And Target.Column = 3 Then
  Range("D27").Value = Range("H27").Value
  Range("H27").Value = Range("C27").Value
End If

If Target.Row = 39 And Target.Column = 3 Then
  Range("D39").Value = Range("H39").Value
  Range("H39").Value = Range("C39").Value
End If

If Target.Row = 40 And Target.Column = 3 Then
  Range("D40").Value = Range("H40").Value
  Range("H40").Value = Range("C40").Value
End If

If Target.Row = 41 And Target.Column = 3 Then
  Range("D41").Value = Range("H41").Value
  Range("H41").Value = Range("C41").Value
End If

If Target.Row = 42 And Target.Column = 3 Then
  Range("D42").Value = Range("H42").Value
  Range("H42").Value = Range("C42").Value
End If

End Sub
N.B. des elseif serait mieux, qu'une serie de if
N.B. 2 Tous ce code doit se situer dans ta faeuille et pas dans un module au niveau du projet VBA
 

zeb

Modérateur
moderatox dixit: entraidons-nous à bien tenir ce forum. :o

/mode mauvais poil
M'en vais te fermer le topic par mesure de rétorsion en disant que c'est à cause de toi. Qu'est-ce qu'il va penser de toi not' boio rouche(*) de bichet ? [:zeb:4]
_____
(*) si tant est que 62 est son département
 

drul

Obscur pro du hardware
Staff
Que le modo est ronchon de première :p

Mais effectivement l'utilisation des balise codes est à privilégier, ça évite d'avoir smiley partout (le petit bouton "BB" permet également de s'en débarrasser, c'est pour ça que je suis moins exigeant maintenant.)
 

zeb

Modérateur
Ah je suis ronchon !
Prends ça :

44 lignes de If pour faire 11 fois la même chose :

Code:
If Target.Column = 3 And ( _
    (10 <= Target.Row And Target.Row <= 13) Or _
    (25 <= Target.Row And Target.Row <= 27) Or _
    (39 <= Target.Row And Target.Row <= 42)) _
Then
    Cells(Target.Row, 4).Value = Cells(Target.Row, 8).Value
    Cells(Target.Row, 8).Value = Cells(Target.Row, 3).Value
End If

:na:
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 132
Messages
6 718 000
Membres
1 586 387
Dernier membre
ouistititouille
Partager cette page
Haut