Variable non défiini qui fonctionne avec "option explicit"
Bonjour,
J'ai un petit souci avec "Option explicit"
Contrairement au bon fonctionnement de l'option je n'ai pas d'erreur concernant une nouvelle variable.
Je m'explique je mets à jour mon code avec une harmonisation des variables sur tout mes codes.
Or sur un module j'ai rajouté des variable qui n'était pas défini et le code fonctionne, je n'ai pas de message d'erreur de variable non défini.
Vous allez me dire tant mieux ça fonctionne mais c'est pas le but de l'option. Quelqu'un as-t'il une idée du "Pourquoi".
merci d'avance
PS : voici le code, la variable a n'est pas défini et le code fonctionne
Option Explicit
'12-_____________________________________________________________________________________________________________
'_______________________________________________________________________________________________________________
Sub répart_CC_SR()
'------------------------------------Affectun n° de cas / Passage-----------------------------------------------
'_______________________________________________________________________________________________________________
'_______________________________________________________________________________________________________________
Dim lngMinL As Long, lngMaxL As Long, lngAleaL As Long
Dim colMinL As Long, colMaxL As Long, colaleaL As Long
Dim mdp As Variant, x As Variant, y As Variant
Dim derlig As Long, dercol As Long
Dim m As Long, n As Long
Dim Nb_CC As Variant, plagel As Range, lng_groupe As Long, Nb_stag As Long, Nb_CC_lgn As Long
Dim cell As Range
Dim Nb_CC_ent As Long, Nb_CC_pers As Long
mdp = Sheets("Gestion").Range("J2").Value
a=0
Sheets("CC SR").Unprotect Password:=mdp
Sheets("Sommaire CC SR").Copy after:=Sheets("Sommaire CC SAV")
Sheets("Sommaire CC SR (2)").Name = "repart"
Sheets("repart").Unprotect Password:=mdp
Nb_CC_ent = 0
With Sheets("repart").Range("A:Z")
Set x = .Find("Entrainements Obligatoires dans l'ordre", LookIn:=xlValues)
Nb_CC_ent = Sheets("repart").Range(x.Address).Offset(1, 0).End(xlDown).Row - Sheets("repart").Range(x.Address).Row
End With
Sheets("CC SR").Activate
lng_groupe = Range("AS2").Value
dercol = Cells(7, Columns.Count).End(xlToLeft).Column
'_________________________________________
'_________________________________________Cas Concrets Ent
'_________________________________________
Nb_CC_pers = 0
Nb_stag = Cells(36 + lng_groupe, 3).Value
derlig = (Sheets("repart").Range("A3").End(xlDown).Row)
Sheets("CC SR").Activate
For m = 5 To dercol
For n = 8 + lng_groupe To 35 + lng_groupe
If Cells(n, m).Interior.Color = RGB(180, 198, 231) And Nb_CC_ent <> 0 Then
Cells(n, m).Value = Sheets("repart").Range(x.Address).Offset(1 + p, 0)
Nb_CC_ent = Nb_CC_ent - 1
Nb_CC_pers = Nb_CC_pers + 1
If Nb_CC_pers = Nb_stag Then
GoTo Suite1:
End If
ElseIf Cells(n, m).Interior.Color = RGB(180, 198, 231) And Nb_CC_ent = 0 Then
choix1:
Sheets("repart").Activate
Sheets("repart").Range(Cells(3, 1), Cells(derlig, 1)).Select ' sélection de la 1ère ligne
lngMinL = Selection.Rows(1).Row ' numéro de la 1ère ligne
lngMaxL = Selection.Rows.Count + lngMinL - 1 ' numéro de la dernière ligne
lngAleaL = (lngMaxL - lngMinL) * Rnd() + lngMinL ' tirage aléatoire pour la ligne
If Sheets("repart").Cells(lngAleaL, 1) = 0 Then
GoTo choix1:
End If
Nb_CC = Sheets("repart").Cells(lngAleaL, 1)
Sheets("repart").Cells(lngAleaL, 1) = "0"
Sheets("CC SR").Activate
Cells(n, m).Value = Nb_CC
Nb_CC_pers = Nb_CC_pers + 1
If Nb_CC_pers = Nb_stag Then
GoTo Suite1:
End If
End If
Next n
Next m
Suite1:
With Sheets("repart").Range("A:Z")
Set y = .Find("Entrainements Obligatoires (pas d'ordre précis)", LookIn:=xlValues)
Nb_CC_ent = Sheets("repart").Range(y.Address).Offset(1, 0).End(xlDown).Row - Sheets("repart").Range(y.Address).Row
End With
For m = 1 To Nb_CC_ent
choix2:
Sheets("CC SR").Range(Cells(8 + lng_groupe, 5), Cells(35 + lng_groupe, dercol)).Select
lngMinL = Selection.Rows(1).Row ' numéro de la 1ère ligne
lngMaxL = Selection.Rows.Count + lngMinL - 1 ' numéro de la dernière ligne
colMinL = Selection.Columns(1).Column ' numéro de la 1ère ligne
colMaxL = Selection.Columns.Count + colMinL - 1 ' numéro de la dernière ligne
lngAleaL = (lngMaxL - lngMinL) * Rnd() + lngMinL ' tirage aléatoire pour la ligne
colaleaL = (colMaxL - colMinL) * Rnd() + colMinL ' tirage aléatoire pour la ligne
If Cells(lngAleaL, colaleaL).Interior.Color = RGB(180, 198, 231) Then
For n = Sheets("repart").Range(x.Address).Offset(1, 0).Row To Sheets("repart").Range(x.Address).Offset(1, 0).End(xlDown).Row
If Cells(lngAleaL, colaleaL).Value = Sheets("repart").Cells(n, 1).Value Or Cells(lngAleaL, colaleaL).Value = "x" Then
GoTo choix2:
End If
Next n
Cells(lngAleaL, colaleaL).Value = "x"
'Sheets("repart").Range(y.Address).Offset(m, 0).Value
GoTo cas1:
Else
GoTo choix2:
End If
cas1:
Next m
For m = 1 To Nb_CC_ent
With Sheets("CC SR").Range(Cells(8 + lng_groupe, 5), Cells(35 + lng_groupe, dercol))
Set x = .Find("x", LookIn:=xlValues)
Range(x.Address).Value = Sheets("repart").Range(y.Address).Offset(m, 0)
End With
Next m
'changer 2 thèmes par les thèmes obligatoires sans ordre précis
'_________________________________________
'_________________________________________Cas Concrets Noté
'_________________________________________
Application.DisplayAlerts = False
Sheets("repart").Delete
Application.DisplayAlerts = True
Sheets("Sommaire CC SR").Copy after:=Sheets("Sommaire CC SAV")
Sheets("Sommaire CC SR (2)").Name = "repart"
Sheets("repart").Unprotect Password:=mdp
Sheets("CC SR").Activate
With Sheets("repart").Range("A:Z")
Set x = .Find("Entrainements Obligatoires dans l'ordre", LookIn:=xlValues)
End With
Nb_CC_pers = 0
derlig = (Sheets("repart").Range("F3").End(xlDown).Row)
For m = 5 To dercol
For n = 8 + lng_groupe To 35 + lng_groupe
If Cells(n, m).Interior.Color = RGB(112, 173, 71) Then
'___________________________________________________
'--------------------cas précendent------------------------
'_____________________________________________________
ajout_ligne = 0
Set plagel = Range(Cells(n, 5), Cells(n, m)) ' on regarde les cellules précedentes
Nb_CC_lgn = Application.WorksheetFunction.CountA(plagel) 'si la valeur de p est déjà attribué on recherche une nouvelle ligne
If Nb_CC_lgn <> 0 Then
For Each cell In plagel
If cell.Formula <> "" Then
Cells(1 + ajout_ligne, 53).Formula = cell
With Sheets("repart").Range("A:A")
Set y = .Find(cell, LookIn:=xlValues)
End With
Cells(1 + ajout_ligne, 53).Value = Sheets("repart").Range(y.Address).Offset(0, 3).Value
ajout_ligne = ajout_ligne + 1
Else: End If
Next cell
End If
choix3:
Sheets("repart").Activate
Sheets("repart").Range(Cells(3, 6), Cells(derlig, 6)).Select ' sélection de la 1ère ligne
lngMinL = Selection.Rows(1).Row ' numéro de la 1ère ligne
lngMaxL = Selection.Rows.Count + lngMinL - 1 ' numéro de la dernière ligne
lngAleaL = (lngMaxL - lngMinL) * Rnd() + lngMinL ' tirage aléatoire pour la ligne
Nb_CC_ent = Sheets("repart").Cells(lngAleaL, 9)
If Sheets("repart").Cells(lngAleaL, 6) = 0 Or Sheets("repart").Cells(lngAleaL, 9) = Sheets("CC SR").Cells(ajout_ligne, 53).Value Then
GoTo choix3:
End If
Nb_CC = Sheets("repart").Cells(lngAleaL, 6)
Sheets("repart").Cells(lngAleaL, 6) = "0"
Sheets("CC SR").Activate
Cells(n, m).Value = Nb_CC
Nb_CC_pers = Nb_CC_pers + 1
Sheets("CC SR").Cells(ajout_ligne, 53).Clear
If Nb_CC_pers = Nb_stag Then
GoTo Suite2:
End If
End If
Next n
Next m
Suite2:
Application.DisplayAlerts = False
Sheets("repart").Delete
Application.DisplayAlerts = True
End Sub
Bon ça refonctionne..
A ni rien comprendre j'avais pourtant enregistré, quitté et rouvert. il n'y a pas eu de changement.
je suis toujours preneur d'une réponse même si je sais que ça ne vient pas du code.
Un réglage, une formule (genre : application.screenupdaiting....) ou autre ?
Merci
Bonjour,
As-tu modifié des options dans l'éditeur VBE (Ruban, Outils, Options...) ?
Cdlt.
Non pas de modification dans l'éditeur.
Le pire c'est que je ne sais pas pourquoi ça refonctionne.
C'est pas la 1ere fois que ça m'arrive et j'ai pas d'explication ça me perturbe
Re,
Peux-tu faire de petites copies (images) de tes options VBE ?
Cdlt.
Re,
J'ai la même configuration.
J'ai du mal à comprendre ce qu'il t'arrive !...
Cdlt.
Salut
As-tu déclare des variable public dans autre module ou projets
Merci Jean-Eric
Le problème n'est que passager mais j'aimerai ne pas passer à côté de quelque chose et que mon programme déconne dans quelques semaines.
AMIR, je n'ai qu'une seul variable publique dans un autre module mais elle n'a rien à voir avec la nouvelle variable...
(variable publique : SnomFichier, nouvelle variable : a, b c....)
Non pas de "a" de défini ni avant ni en public
D’accords
autre chose
pour quoi a=0
sont trops raproche normalement dans le bon editeur ils seront comme ca a = 0
Parce que je l'ai rajouté après avoir copié le code, pour confirmer que l'option explicit ne marchait pas.
Salut
essaye d envoyer un fichier exemple
Envoyer un fichier c'est compliqué comme dis plus tôt mon code à fini par remarcher.
Ce que je ne comprends pas c'est pourquoi ça a deconné. Et si quelqu'un a une réponse.
Salut
Ce que je ne comprends pas c'est pourquoi ça a deconné
ce que tu dis est une hypothèse
tu peu confirmer ça par la création d’un simple fichier comme celui ci et vérifier la persistance de ton problème
notez aussi que autres chose comme les macros complémentaire peuvent cause la même problème
j'ai pu vérifier en changeant juste de module.
Seul le module sur lequel je travaillais a déconné. J'ai essayé sur un autre module dans le même classeur et j'avais bien mon message d'erreur.
Qu'est ce que tu appelles "macros complémentaire?"
merci pour les réponses