Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Pb de macros

Dimitri13

XLDnaute Nouveau
bonjour ,dans le cadre pro, je souhaite mettre en place un planning dynamique qui attribue certains critères comme référence, une zone de chargement , une personne etc .
j'ai suivi un tuto qui pourrait me convenir et modifier quelques critères sauf que la macros ne fonctionne pas . qui peut m'aider sur cette erreur.
Merci par avance

 

Pièces jointes

  • Planning4.xlsm
    28.7 KB · Affichages: 6

Phil69970

XLDnaute Barbatruc
Bonjour à tous

@Dimitri13
Je vois 2 Pb dans cette ligne

Dim ligne As Byte

1) "Ligne" est un mot réservé à excel et il n'est jamais recommandé d'utiliser des mots réservés pour tes variables
==> Remplace "ligne" par "Lig" par exemple

2) Et Byte est limité à 255


donc au dela tu auras un message de dépassement de capacité !
Comme c'est des lignes déclare ta variable en Long

Dim Lig as Long

3) Tu auras le même PB pour

Dim colonne As Byte
Et comme ta feuille fait plus de 255 colonnes ==> plantage !!!
Pour les colonnes déclare en integer ....

Bonne lecture
 
Dernière édition:

Franc58

XLDnaute Occasionnel
Salut, en vba, ligne et colonne ne sont pas des mots réservés, le compilateur les accepte sans problème.
 

Phil69970

XLDnaute Barbatruc
@Franc58

J'ai juste dit que ligne est un mot réservé à excel et qu'il n'est jamais recommandé d'utiliser des mots réservés pour les variables et perso j'évite les mots réservés à excel pour mes variables même si excel et VBA les acceptent.

D'ailleurs si tu écris ceci

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sheets As Long: Dim colonne As Byte
Sheets = Target.Row: colonne = Target.Column
If (Sheets = 5 And (colonne = 3 Or colonne = 5 Or colonne = 7)) Then
recup_zone
End If

End Sub

ou

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sheet As Long: Dim colonne As Byte
Sheet = Target.Row: colonne = Target.Column
If (Sheet = 5 And (colonne = 3 Or colonne = 5 Or colonne = 7)) Then
recup_zone
End If

End Sub

VBA ne dit rien
 

Franc58

XLDnaute Occasionnel
Ce n'est pas tout à fait la même chose. Sheet n'est pas un type de variable, il fait référence à un objet, donc ce n'est pas un mot réservé et le compilateur l'accepte sans erreur. Par contre si tu essaies Dim date as Long ou Dim byte as String par exemple, ça ne passera pas, tu auras une erreur de syntaxe parce que ce sont des types de variables et donc des mots réservés.
 

Phil69970

XLDnaute Barbatruc
Ce n'est pas tout à fait la même chose. Sheet n'est pas un type de variable, il fait référence à un objet, donc ce n'est pas un mot réservé et le compilateur l'accepte sans erreur.
Tout à fait d'accord mais si tu fait ce test

VB:
Sub Test1()
Dim Sheets As Long

Sheets = 2024
If Sheets = 2024 Then MsgBox "Coucou"

Test2
End Sub

Sub Test2()
Dim NomFeuille

NomFeuille = Sheets(1).Name
MsgBox NomFeuille

Test3
End Sub

Sub Test3() 'Provoque une erreur

Dim NomFeuille ', Sheets As Long

Sheets = 2024     'Erreur ici si variable non déclarée
If Sheets = 2024 Then MsgBox "Coucou"

NomFeuille = Sheets(1).Name  'Ou erreur ici si variable est déclarée
MsgBox NomFeuille

End Sub

Même si ce n'est pas des mots interdits pour VBA le mélange des genres peux provoquer une erreur si on n'y fait pas attention.
Le plus simple est encore de préfixer les variables......

Par exemple on peut s'inspirer de ceci :
==> https://argyronet.developpez.com/office/vba/convention/
 
Dernière édition:

Franc58

XLDnaute Occasionnel
On est bien d'accord que même si c'est pas des mots réservés, il vaut mieux éviter les confusions.
 

Discussions similaires

Réponses
20
Affichages
1 K
Réponses
0
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…