OVH Cloud OVH Cloud

Où est le problème?

3 réponses
Avatar
JBF
Bonsoir,

J'ai apparement un problème de "compatibilité" entre deux macro. Et, mon
niveau ne me permet pas d'identifier l'erreur.

Sur ma page "FormulaireDIAG" voici la macro qui s'exécute lorsque je clique
sur le bouton "CREER DEVIS":

Sub transpose_DEVIS_dans_FACTURIER()
'Atteindre le formulaire et mémoriser les données
Sheets("FormulaireDIAG").Select
Range("C4:C13").Select
Selection.Copy
'Test pour determiner la ligne où coller les infos dans le tableau
Sheets("Ne pas ouvrir").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Memorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:=False, Transpose:=True
'Rendre Vierge le formulaire
Sheets("FormulaireDIAG").Select
Range("C6:C12").Select
Selection.ClearContents
Range("C6").Select
'Retourner dans le tableau
Sheets("Ne pas ouvrir").Select
Range("A1").Select
'Tri automatique par ordre decroissant
Range("A2:IV65536").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Imprimer le devis en PDF
Sheets("DEVIS").PrintOut
'Mise à jour du Previsionnel
Sheets("Previsionnel").Select
Rows("2:2").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Ne pas Ouvrir").Select
Range("A2").Select
Selection.Copy
Sheets("Previsionnel").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("C2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("C2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("D2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("D2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("H2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = True
End Sub

Parralelement, sur ma page "Previsionnel" j'aimerais qu'un bouton apparaisse
dès lors que j'ajoute une donnée dans la colonne "F". Pour cela j'ai trouvé
la macro ci dessous. J'ai déjà demandé de l'aide mais deux d'entre vous
m'ont dit qu'il n'y avait pas d'erreur. Effectivement quand je l'exécute
dans un module, je n'ai pas de pb mais lorsque que cette macro est rattachée
à la page "Previsionnel" j'ai un message d'erreur : ERREUR D'EXÉCUTION '13'
: INCOMPATIBILITE DE TYPE

Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque changement de
valeur
'condition : si le changement se fait ailleurs que dans la colonne F de
Previsionnel alors la macro sort de la procédure
If Intersect(Target, Range("F2:F65000")) Is Nothing Then Exit Sub
'si colonne F<>"rien" alors ça lance la macro du Module4 :
bouton_transformation_du_devis_en_facture
If Target.Value <> "" Then Module4.bouton_transformation_du_devis_en_facture
End Sub

Qq'un voit-il pourquoi?

Merci

JBF

3 réponses

Avatar
Daniel.C
Bonsoir.
A priori, la seule différence, c'est que, quand une macro s'exécute
depuis une feuille, la feuille par défaut est la feuille qui contient
la macro, pas la feuille active. Aussi quand tu mets, par exemple :
Sheets("Ne pas Ouvrir").Select
Range("A2").Select
Ce n'est pas la cellule A2 de la feuille "Ne pas Ouvrir" qui est
sélectionnée, mais la cellule A2 de la feuille qui contient la macro.
Et comme tu ne peux pas sélectionner une cellule d'une feuille non
active, tu récoltes une erreur. Donc, toujours qualifier les plages :
Sheets("Ne pas Ouvrir").Range("A2").Select
Cordialement.
Daniel

Bonsoir,

J'ai apparement un problème de "compatibilité" entre deux macro. Et, mon
niveau ne me permet pas d'identifier l'erreur.

Sur ma page "FormulaireDIAG" voici la macro qui s'exécute lorsque je clique
sur le bouton "CREER DEVIS":

Sub transpose_DEVIS_dans_FACTURIER()
'Atteindre le formulaire et mémoriser les données
Sheets("FormulaireDIAG").Select
Range("C4:C13").Select
Selection.Copy
'Test pour determiner la ligne où coller les infos dans le tableau
Sheets("Ne pas ouvrir").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Memorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:=True
'Rendre Vierge le formulaire
Sheets("FormulaireDIAG").Select
Range("C6:C12").Select
Selection.ClearContents
Range("C6").Select
'Retourner dans le tableau
Sheets("Ne pas ouvrir").Select
Range("A1").Select
'Tri automatique par ordre decroissant
Range("A2:IV65536").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Imprimer le devis en PDF
Sheets("DEVIS").PrintOut
'Mise à jour du Previsionnel
Sheets("Previsionnel").Select
Rows("2:2").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Ne pas Ouvrir").Select
Range("A2").Select
Selection.Copy
Sheets("Previsionnel").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("C2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("C2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("D2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("D2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("H2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = True
End Sub

Parralelement, sur ma page "Previsionnel" j'aimerais qu'un bouton apparaisse
dès lors que j'ajoute une donnée dans la colonne "F". Pour cela j'ai trouvé
la macro ci dessous. J'ai déjà demandé de l'aide mais deux d'entre vous m'ont
dit qu'il n'y avait pas d'erreur. Effectivement quand je l'exécute dans un
module, je n'ai pas de pb mais lorsque que cette macro est rattachée à la
page "Previsionnel" j'ai un message d'erreur : ERREUR D'EXÉCUTION '13'
: INCOMPATIBILITE DE TYPE

Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque changement de
valeur
'condition : si le changement se fait ailleurs que dans la colonne F de
Previsionnel alors la macro sort de la procédure
If Intersect(Target, Range("F2:F65000")) Is Nothing Then Exit Sub
'si colonne F<>"rien" alors ça lance la macro du Module4 :
bouton_transformation_du_devis_en_facture
If Target.Value <> "" Then Module4.bouton_transformation_du_devis_en_facture
End Sub

Qq'un voit-il pourquoi?

Merci

JBF


Avatar
JBF
Bonjour,

Pardon mais je ne comprends pas ta réponse.
Sauf erreur de ma part, ce que tu me conseilles de faire est déjà fait, non?

Precision : l'erreur d'execution '13' me met en surbrillance cette partie là
de la macro : IF TARGET.VALUE <>""

Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque changement de
valeur
'condition : si le changement se fait ailleurs que dans la colonne F de
Previsionnel alors la macro sort de la procédure
Sheets("Previsionnel").Select
If Intersect(Target, Range("F2:F65000")) Is Nothing Then Exit Sub
'si colonne F<>"rien" alors ça lance la macro du Module4 :
bouton_transformation_du_devis_en_facture
If Target.Value <> "" Then Module4.bouton_transformation_du_devis_en_facture
End Sub


"Daniel.C" a écrit dans le message de news:

Bonsoir.
A priori, la seule différence, c'est que, quand une macro s'exécute depuis
une feuille, la feuille par défaut est la feuille qui contient la macro,
pas la feuille active. Aussi quand tu mets, par exemple :
Sheets("Ne pas Ouvrir").Select
Range("A2").Select
Ce n'est pas la cellule A2 de la feuille "Ne pas Ouvrir" qui est
sélectionnée, mais la cellule A2 de la feuille qui contient la macro. Et
comme tu ne peux pas sélectionner une cellule d'une feuille non active, tu
récoltes une erreur. Donc, toujours qualifier les plages :
Sheets("Ne pas Ouvrir").Range("A2").Select
Cordialement.
Daniel

Bonsoir,

J'ai apparement un problème de "compatibilité" entre deux macro. Et, mon
niveau ne me permet pas d'identifier l'erreur.

Sur ma page "FormulaireDIAG" voici la macro qui s'exécute lorsque je
clique sur le bouton "CREER DEVIS":

Sub transpose_DEVIS_dans_FACTURIER()
'Atteindre le formulaire et mémoriser les données
Sheets("FormulaireDIAG").Select
Range("C4:C13").Select
Selection.Copy
'Test pour determiner la ligne où coller les infos dans le tableau
Sheets("Ne pas ouvrir").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Memorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:=True
'Rendre Vierge le formulaire
Sheets("FormulaireDIAG").Select
Range("C6:C12").Select
Selection.ClearContents
Range("C6").Select
'Retourner dans le tableau
Sheets("Ne pas ouvrir").Select
Range("A1").Select
'Tri automatique par ordre decroissant
Range("A2:IV65536").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess,
_
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Imprimer le devis en PDF
Sheets("DEVIS").PrintOut
'Mise à jour du Previsionnel
Sheets("Previsionnel").Select
Rows("2:2").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Ne pas Ouvrir").Select
Range("A2").Select
Selection.Copy
Sheets("Previsionnel").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("C2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("C2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("D2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("D2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("H2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = True
End Sub

Parralelement, sur ma page "Previsionnel" j'aimerais qu'un bouton
apparaisse dès lors que j'ajoute une donnée dans la colonne "F". Pour
cela j'ai trouvé la macro ci dessous. J'ai déjà demandé de l'aide mais
deux d'entre vous m'ont dit qu'il n'y avait pas d'erreur. Effectivement
quand je l'exécute dans un module, je n'ai pas de pb mais lorsque que
cette macro est rattachée à la page "Previsionnel" j'ai un message
d'erreur : ERREUR D'EXÉCUTION '13'
: INCOMPATIBILITE DE TYPE

Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque changement
de valeur
'condition : si le changement se fait ailleurs que dans la colonne F de
Previsionnel alors la macro sort de la procédure
If Intersect(Target, Range("F2:F65000")) Is Nothing Then Exit Sub
'si colonne F<>"rien" alors ça lance la macro du Module4 :
bouton_transformation_du_devis_en_facture
If Target.Value <> "" Then
Module4.bouton_transformation_du_devis_en_facture
End Sub

Qq'un voit-il pourquoi?

Merci

JBF






Avatar
JBF
Re,

En fait j'ai résolu mon problème de la façon suivante.

Dans la macro rattachée à la feuille "Previsionnel" j'ai remplacé l'erreur
qui était surlignée en jaune : IF TARGET.VALUE <>""
par : IF INTERSECT(TARGET, RANGE("F2:F65000")) et ça marche impeccablement.

Merci de votre participation

JBF

"JBF" a écrit dans le message de news:

Bonsoir,

J'ai apparement un problème de "compatibilité" entre deux macro. Et, mon
niveau ne me permet pas d'identifier l'erreur.

Sur ma page "FormulaireDIAG" voici la macro qui s'exécute lorsque je
clique sur le bouton "CREER DEVIS":

Sub transpose_DEVIS_dans_FACTURIER()
'Atteindre le formulaire et mémoriser les données
Sheets("FormulaireDIAG").Select
Range("C4:C13").Select
Selection.Copy
'Test pour determiner la ligne où coller les infos dans le tableau
Sheets("Ne pas ouvrir").Select
valeurA2 = Range("A2").Value
If valeurA2 = "" Then
Range("A2").Select
Else
Range("A1").Select
Selection.End(xlDown).Select
ligne_active_base = ActiveCell.Row
Range("A" & ligne_active_base + 1).Select
End If
'Memorise le n° de la ligne où coller les données
ligne_active_base = ActiveCell.Row
'Collage avec transposition
Range("A" & ligne_active_base).Select
Selection.PasteSpecial Paste:=xlPasteValues, _
Operation:=xlNone, SkipBlanks:úlse, Transpose:=True
'Rendre Vierge le formulaire
Sheets("FormulaireDIAG").Select
Range("C6:C12").Select
Selection.ClearContents
Range("C6").Select
'Retourner dans le tableau
Sheets("Ne pas ouvrir").Select
Range("A1").Select
'Tri automatique par ordre decroissant
Range("A2:IV65536").Select
Selection.Sort Key1:=Range("A2"), Order1:=xlDescending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom, _
DataOption1:=xlSortNormal
'Imprimer le devis en PDF
Sheets("DEVIS").PrintOut
'Mise à jour du Previsionnel
Sheets("Previsionnel").Select
Rows("2:2").Select
Application.CutCopyMode = False
Selection.Insert Shift:=xlDown
Sheets("Ne pas Ouvrir").Select
Range("A2").Select
Selection.Copy
Sheets("Previsionnel").Select
Range("A2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("B2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("C2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("C2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("D2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("D2").Select
ActiveSheet.Paste
Sheets("Ne pas Ouvrir").Select
Range("H2").Select
Application.CutCopyMode = False
Selection.Copy
Sheets("Previsionnel").Select
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = True
End Sub

Parralelement, sur ma page "Previsionnel" j'aimerais qu'un bouton
apparaisse dès lors que j'ajoute une donnée dans la colonne "F". Pour cela
j'ai trouvé la macro ci dessous. J'ai déjà demandé de l'aide mais deux
d'entre vous m'ont dit qu'il n'y avait pas d'erreur. Effectivement quand
je l'exécute dans un module, je n'ai pas de pb mais lorsque que cette
macro est rattachée à la page "Previsionnel" j'ai un message d'erreur :
ERREUR D'EXÉCUTION '13' : INCOMPATIBILITE DE TYPE

Private Sub Worksheet_Change(ByVal Target As Range) 'à chaque changement
de valeur
'condition : si le changement se fait ailleurs que dans la colonne F de
Previsionnel alors la macro sort de la procédure
If Intersect(Target, Range("F2:F65000")) Is Nothing Then Exit Sub
'si colonne F<>"rien" alors ça lance la macro du Module4 :
bouton_transformation_du_devis_en_facture
If Target.Value <> "" Then
Module4.bouton_transformation_du_devis_en_facture
End Sub

Qq'un voit-il pourquoi?

Merci

JBF