Macro qui ne fonctionne qu'une fois

Résolu
idro6 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -  
idro6 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention   -
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

11 réponses

Normad Messages postés 112 Date d'inscription   Statut Membre Dernière intervention   40
 
Bonjour,
L'erreur est probablement liée à la protection de la feuille..
1
idro6 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
Bonjour,
La feuille n'est pas protégé
0
Paf
 
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   Statut Membre Dernière intervention  
 
Bonjour,
Malheureusement toujours le même message d'erreur s'affiche
0
Paf
 
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   Statut Membre Dernière intervention  
 
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
Paf
 
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   Statut Membre Dernière intervention  
 
0
idro6 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
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
Paf
 
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   Statut Membre Dernière intervention  
 
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
Paf
 
avez vous refait des essais sur le classeur copie?
0
Paf
 
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   Statut Membre Dernière intervention  
 
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
Paf
 
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   Statut Membre Dernière intervention  
 
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
Paf
 
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   Statut Membre Dernière intervention  
 
je n'ai pas précisé que j'utilise une version excel 97
0
idro6 Messages postés 13 Date d'inscription   Statut Membre Dernière intervention  
 
oui j'ai fais des tests et cela ne fonctionne pas, quelle version d'excel possédez vous ?
0
Paf
 
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   Statut Membre Dernière intervention  
 
Les deux, aucun ne fonctionne.
0
Paf
 
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   Statut Membre Dernière intervention  
 
Merci de m'avoir éclairé.
0