Mauvaise makro

Messages postés
1
Date d'inscription
lundi 22 février 2016
Statut
Membre
Dernière intervention
22 février 2016
-
Bonjour,
J'ai pondu une makro excel qui ne marche qu'une fois. Admettes que c'est un comble.
Je ne vous conterai pas la somme d'insultes que j'ai reçu.
Cela fait une semaine que je suis dessus et je ne comprends pas pourquoi cela ne marche pas La seule réponse de excel "Ref".
Voilà le code:

Sub CalculCrédit()
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Bon
'Se placer sur la case de départ
    Range("I5").End(xlDown).Offset(1, 0).Select
    ActiveCell.Offset(1, -1).Select
    'xxxxxxxxxxxxxxxx
     Range("H2").Select
    Selection.ClearContents
    Range("I2").Select
    Selection.ClearContents
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBon
'Colonne H
    'Aller au depart, sur la cellule à copier, copier
    Range("H5").End(xlDown).Offset(1, 0).Select
    ActiveCell.Offset(-1, 0).Select
    Selection.Copy
 'Aller à H2 et coller et liberer la memoire
    Range("H2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBon
'ColonneI
    'Aller sur la premiere case vide de la colonne et remonter 1 case et copier
    Range("I5").End(xlDown).Offset(1, 0).Select
    ActiveCell.Offset(-1, 0).Select
    Selection.Copy
   
'Aller à I2 et coller et liberer la memoire
    Range("I2").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBon
'Aller à la première case vide de la colonne et calculer
    Range("I5").End(xlDown).Offset(1, 0).Select
    ActiveCell.FormulaR1C1 = "=R[-34]C-R[-34]C[-1]"
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
'Effacer le presse papier et les données
   ' Range("H2").Select
    'Selection.ClearContents
    'Range("I2").Select
    'Selection.ClearContents
    'Application.CutCopyMode = False
    'Application.CommandBars("clipboard").Controls(4).Execute
End sub



Pourquoi cela ne marche pas s'il vous plaît.


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici :ICI

Merci d'y penser dans tes prochains messages.
Afficher la suite 

3 réponses

Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
312
0
Merci
Bonjour,

1 - **** Attention ****
Merci de bien vouloir utiliser la coloration syntaxique (les balises de code) lorsque tu postes du code sur le forum.
Explications disponibles ici :
http://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code

.
2 - Pour commencer, expliques nous ce que ta macro est sensée faire....

3 - N'hésites pas non plus à expliquer ceci :

cela ne marche pas La seule réponse de excel "Ref".

Excel te "répond" ça où ?
Quel est le message d'erreur exact ?
Où le vois tu ?
jordane45
Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
312 -
Je pense que ton souci se trouve au niveau de ta formule non ?
 ActiveCell.FormulaR1C1 = "=R[-34]C-R[-34]C[-1]"

Pourquoi ne travailles-tu pas en FormulaLocal plutôt qu'avec l'écriture LC ? je pense que ça serait plus clair....
Commenter la réponse de jordane45
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
5
0
Merci
Bonjour,

Salut Jordane,

1- Eviter les .Select (inutile et ralentisseur)

2- Eviter également les aller/retour "à coups" d'Offset

3- essaye ce test qui devrait grandement t'avancer :
Sub test()
Range("H2").Value = Range("H5").End(xlDown).Value
End Sub


4- De la même manière, et pour compléter la réponse de Jordane, essaie ceci :
Range("I5").End(xlDown).Offset(1, 0).Value = Range("H2").Value - Range("I2").Value


A partir de ces éléments, tu devrais être capable de créer une macro qui, en trois lignes de code, sans Select, sans Copy, sans Paste, te fais ce que tu souhaites, sans erreur #REF.
pijaku
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
5 -
Pour compléter ma réponse, à la question pourquoi ça ne marche qu'une fois, la réponse est simple. Tu peux la trouver en résolvant cettte "énigme" :

Que signifie, selon toi, le 34 dans : "=R[-34]C-R[-34]C[-1]" ?
jordane45
Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
312 -
Salut Pika,

Moi je ne fais pas de .select ... ni d'aller/retour avec des OFFSET.
Et oui.. le souci, comme je le lui ai indiqué ..., se trouve au niveau de sa formule.......

:-)
pijaku
Messages postés
12245
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
30 novembre 2018
5 > jordane45
Messages postés
25763
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 juin 2019
-
Moi je ne fais pas de .select ... ni d'aller/retour avec des OFFSET.
Je sais bien.
Ma réponse était destinée à titi, pas à toi.
Commenter la réponse de pijaku
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
209
0
Merci
Bonjour à tous les trois,
Déjà : lorsque l'on écrit (la toute première partie, car je n'ai même pas voulu aller plus loin) :
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Bon
'Se placer sur la case de départ
Range("I5").End(xlDown).Offset(1, 0).Select
ActiveCell.Offset(1, -1).Select
'xxxxxxxxxxxxxxxx
Range("H2").Select
Selection.ClearContents
Range("I2").Select
Selection.ClearContents
'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

qui n'équivaut finalement à rien d'autre que cette seule ligne :
Range("H2:I2").ClearContents

on montre surtout qu'on ne comprend pas grand-chose aux lignes de code que l'on aligne et qu'il vaudrait mieux commencer par l'apprentissage des toutes premières bases.
Commenter la réponse de ucfoutu