Mauvaise makro

titi30240 Messages postés 1 Date d'inscription lundi 22 février 2016 Statut Membre Dernière intervention 22 février 2016 - Modifié par jordane45 le 22/02/2016 à 18:12
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 23 févr. 2016 à 10:55
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.

3 réponses

jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
22 févr. 2016 à 18:14
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 ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
22 févr. 2016 à 18:34
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....
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
23 févr. 2016 à 09:34
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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14
23 févr. 2016 à 09:37
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]" ?
0
jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024 344
23 févr. 2016 à 09:41
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.......

:-)
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 14 > jordane45 Messages postés 38138 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 17 avril 2024
23 févr. 2016 à 09:49
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 févr. 2016 à 10:55
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.
0
Rejoignez-nous