Macro qui ne fonctionne qu'une fois

Résolu/Fermé
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015 - Modifié par pijaku le 24/02/2015 à 07:46
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015 - 24 févr. 2015 à 15:58
Bonjour, débutant en VBA, j'ai réalisé un classeur qui me permet de gérer des données sur des clients et d'afficher des tableau selon plusieurs critères comme la facturation par exemple. Tout fonctionne, mais afin de permettre un affichage des tableau plus propre j'ai ajouté une macro qui se lance à l'activation de la feuille qui va réinitialiser les données, chercher les modifications selon les nouveaux clients ajoutés ou supprimés et les réinscrire dans le tableau. Jusqu'ici tout va bien. En même temps que le tableau se rempli les bordures sont rajouté afin d'avoir des bordures qui concorde avec les dimensions du tableau. Le programme s'exécute correctement mais dès que je clique sur un bouton qui me permet de changer de feuille ou un simple clic sur un bouton présent sur la feuille où se trouve le tableau la macro ne fonctionne plus et le message suivant apparaît:
Erreur d'exécution '1004': Impossible de définir la propriété Value de la classe Borders.
Alors que si je change de feuille grâce au menu se trouvant en bas il n'y a pas de problème, tout fonctionne. Lancer une macro sur une autre feuille ne fait pas bugger non plus. Or en allant dans la première cellule du tableau et en déverrouillant manuellement la cellule le programme fonctionne à nouveau ou en enregistrant et en rouvrant le tableur cela fonctionne à nouveau.
Je cherche des solutions à ce problème en espérant obtenir des réponses, voici mon programme:

Private Sub Worksheet_Activate()
Range("A4:F203").Borders.Value = 0
Dim i As Integer
Dim j As Integer
i = 7
j = 4


Sheets("Tableau = Tous les devis").Range("A4:F203").Clear
Do Until i = 206
If Sheets("Devis réalisés").Cells(i, 2) <> "" Then
Sheets("Tableau = Tous les devis").Cells(j, 1) = Sheets("Devis réalisés").Cells(i, 1).Value
Sheets("Tableau = Tous les devis").Cells(j, 2) = Sheets("Devis réalisés").Cells(i, 2).Value
Sheets("Tableau = Tous les devis").Cells(j, 3) = Sheets("Devis réalisés").Cells(i, 3).Value
Sheets("Tableau = Tous les devis").Cells(j, 4) = Sheets("Devis réalisés").Cells(i, 5).Value
Sheets("Tableau = Tous les devis").Cells(j, 5) = Sheets("!").Cells(i, 26)
Sheets("Tableau = Tous les devis").Cells(j, 6) = Sheets("Devis réalisés").Cells(i, 8)
Range(Cells(j, 1), Cells(j, 1)).Borders.Value = 1
Range(Cells(j, 2), Cells(j, 2)).Borders.Value = 1
Range(Cells(j, 3), Cells(j, 3)).Borders.Value = 1
Range(Cells(j, 4), Cells(j, 4)).Borders.Value = 1
Range(Cells(j, 5), Cells(j, 5)).Borders.Value = 1
Range(Cells(j, 6), Cells(j, 6)).Borders.Value = 1
i = i + 1
j = j + 1
Else: i = i + 1
End If
Loop

End Sub


Cordialement

Thomas
A voir également:

11 réponses

Normad Messages postés 112 Date d'inscription dimanche 6 juin 2010 Statut Membre Dernière intervention 10 juin 2015 37
24 févr. 2015 à 07:16
Bonjour,
L'erreur est probablement liée à la protection de la feuille..
1
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 08:57
Bonjour,
La feuille n'est pas protégé
0
Bonjour à tous

peut-être un problème de référencement des range ou cells par rapport à la feuille.

à tester

....
With Sheets("Tableau = Tous les devis")
.Range("A4:F203").Clear
Do Until i = 206
If Sheets("Devis réalisés").Cells(i, 2) <> "" Then
.Cells(j, 1) = Sheets("Devis réalisés").Cells(i, 1).Value
.Cells(j, 2) = Sheets("Devis réalisés").Cells(i, 2).Value
.Cells(j, 3) = Sheets("Devis réalisés").Cells(i, 3).Value
.Cells(j, 4) = Sheets("Devis réalisés").Cells(i, 5).Value
.Cells(j, 5) = Sheets("!").Cells(i, 26)
.Cells(j, 6) = Sheets("Devis réalisés").Cells(i, 8)
Range(.Cells(j, 1), .Cells(j, 1)).Borders.Value = 1
Range(.Cells(j, 2), .Cells(j, 2)).Borders.Value = 1
Range(.Cells(j, 3), .Cells(j, 3)).Borders.Value = 1
Range(.Cells(j, 4), .Cells(j, 4)).Borders.Value = 1
Range(.Cells(j, 5), .Cells(j, 5)).Borders.Value = 1
Range(.Cells(j, 6), .Cells(j, 6)).Borders.Value = 1
...
End If
End With
...


A+
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 11:31
Bonjour,
Malheureusement toujours le même message d'erreur s'affiche
0
re

a priori trouvé:

en conservant le With .. End With, remplacer les 6 lignes de mise en forme de bordure par

.Range(Cells(j, 1).Address, Cells(j, 6).Address).Borders.Value = 1

A+
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 12:27
Non plus le problème vient cette fois ci de la ligne Clear.

Le problème viendrait de Range et se déclenche dès qu'une autre macro est lancé sur la feuille. La macro de la feuille est un bouton retour qui me permet de retourner à ma feuille principale là ou se font toute les saisies et c'est lorsque je clique sur ce bouton que range devient impossible si je change de page manuellement il n'y a pas de problème et en lançant les macros sur les autres feuille et en revenant dans la feuille du tableau il n'y a pas de problème.
0
Le mieux, c'est de joindre votre classeur sans données sensibles pour voir les interactions des autres macros.

A+
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 12:43
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 12:44
en voici une version contenant utilisant ce que vous avez corrigé dans la feuille "Tableau = Tous les devis"
Merci de votre aide
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re

Désolé, j'ai parcouru les feuilles et les userform dans tous les sens : pas d'anomalies.

Je vous met le code modifié de la Private Sub Worksheet_Activate() de la feuille Tableau = Tous les devis pour éviter de parcourir plus de 200 lignes pour rien. J'ai supprimé le référencement à la feuille puisque l'on se trouve dans la feuille concernée.

Private Sub Worksheet_Activate()
Dim DerLig As Integer
Dim j As Integer
Dim As Integer
j = 4

DerLig = Sheets("Devis réalisés").Range("A" & Rows.Count).End(xlUp).Row
Range("A4:F203").Clear
For i = 7 To DerLig
If Sheets("Devis réalisés").Cells(i, 4) <> "" Then
Cells(j, 1) = Sheets("Devis réalisés").Cells(i, 1).Value
Cells(j, 2) = Sheets("Devis réalisés").Cells(i, 2).Value
Cells(j, 3) = Sheets("Devis réalisés").Cells(i, 3).Value
Cells(j, 4) = Sheets("Devis réalisés").Cells(i, 5).Value
Cells(j, 5) = Sheets("!").Cells(i, 26)
Cells(j, 6) = Sheets("Devis réalisés").Cells(i, 8)
Range(Cells(j, 1).Address, Cells(j, 6).Address).Borders.Value = 1
j = j + 1
End If
Next

End Sub


Refaite des essais sur votre classeur transmis (qui n'est sans doute pas le classeur original)
Si ça ne se reproduisait pas : anomalie au niveau du classeur original
Si ça se reproduite : Nouveau message avec exactement le procédure suivie amenant cette anomalie.

A+
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 14:14
Très bien, merci de ton aide, le changement entre les feuille se fera manuellement du coup afin qu'il n'y ai pas de macro dans la même feuille qui fasse bugger le programme.
Merci beaucoup,
Bonne journée.
0
avez vous refait des essais sur le classeur copie?
0
A noter :

dans le dernier code fourni, supprimer Dim As Integer, reliquat de modification

par ailleurs la Private Sub Worksheet_Activate() de la feuille Tableau = Devis validés met à jour la feuille Tableau = Tous les devis ( mais ça ne provoque pas d'erreur

Bonne suite
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 14:42
Toujours le même problème, le changement des feuilles se fera en manuel du coup ce n'est pas grave.
En tout cas merci d'avoir pris le temps de m'aider.
0
pouvez décrire (comme demandé plus haut) précisemment les manipulations effectuées qui provoquent le plantage, afin que je les exécute sur votre classeur d'essai ?
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 14:54
Sur la première page, "Editeur de tableaux" -> "Tous les devis", "Retour au menu principal" et refaire la manip. Alors que en changeant de feuille manuellement il n'y a pas de problème.
Le problème arrive lorsque l'on fait appel à une macro sur la même feuille
0
Sur le classeur d'essais transmis, aucune anomalie en suivant votre procédure!

vous avez procéder aux tests sur le fichier origine ou sur le classeur transmis?
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 15:19
je n'ai pas précisé que j'utilise une version excel 97
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 15:26
oui j'ai fais des tests et cela ne fonctionne pas, quelle version d'excel possédez vous ?
0
Je vais faire comme vous: éluder la question

ma question n'était pas de savoir si vous aviez fait des tests , mais de savoir si les tests avaient été fait sur le classeur original ou le classeur mis en ligne
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 15:50
Les deux, aucun ne fonctionne.
0
alors effectivement, peut-être un problème de version Excel ??
Je n'ai plus Excel 97
0
idro6 Messages postés 13 Date d'inscription lundi 23 février 2015 Statut Membre Dernière intervention 24 février 2015
24 févr. 2015 à 15:58
Merci de m'avoir éclairé.
0