Bonjour,
J'ai un morceau de code qui fonctionne bien mais qui est bien trop long a s'exécuter.
Il s'agit en fait de deux feuilles de calcul, une qui contient des variables (et oui, l'automatisme se met à Excel !) et l'autre contient du programme.
Par exemple, contenu de la premiere feuille :
Par exemple, contenu de la seconde feuille :
Mon petit bout de code prend chaque variable de la premiere feuille (B0 par exemple) et balaye la seconde feuille.
Si la variable est trouvee, je copie l'adresse où la variable est utilisée (L59 pour B4).
Mon code (voir ci-dessous un extrait) fonctionne directement sur les feuilles, ce qui est (très, voire trop) long.
var = tab_var(ind_var, 1) & "<-"
With Range(Cells(1, 1), Cells(max_calc, 1))
Set LastCell = .Cells(.Cells.Count)
End With
Set FoundCell = Range(Cells(1, 1), Cells(max_calc, 1)).Find(what:=var, LookIn:=xlValues, LookAt:=xlPart)
If Not FoundCell Is Nothing Then
FirstAddr = FoundCell.Address
End If
Do Until FoundCell Is Nothing
line = Left(FoundCell.Value, InStr(FoundCell.Value, ".") - 1)
If Left(line, 1) = "L" Then
Feuil3.Activate
If Feuil3.Cells(ind_var, 6) = "" Then
Feuil3.Cells(ind_var, 6) = line
Else
Feuil3.Cells(ind_var, 6) = Feuil3.Cells(ind_var, 6) & ", " & line
End If
Feuil2.Activate
End If
Set FoundCell = Range(Cells(1, 1), Cells(max_calc, 1)).FindNext(after:=FoundCell)
If FoundCell.Address = FirstAddr Then
Exit Do
End If
Pour gagner du temps, je souhaite le transformer pour travailler avec des "array".
Je sais transferer le contenu des feuilles dans les tableaux, et rapatrier le contenu du tableau dans les feuilles.
Par contre, je bute sur les fonctions de recherche.
Si vous avez une idée, un (non, des) conseil, je suis preneur !
Bonne journée,
Didier
J'ai un morceau de code qui fonctionne bien mais qui est bien trop long a s'exécuter.
Il s'agit en fait de deux feuilles de calcul, une qui contient des variables (et oui, l'automatisme se met à Excel !) et l'autre contient du programme.
Par exemple, contenu de la premiere feuille :
B0 | CLIGNOT | CLIGNOTANT | |
B4 | BININIT | BIT DE FIN D'INITIALISATION | |
B6 | VFICC10 | VFI ET VALIDATION COMPT. 1/10s TR DE PRG | |
B7 | VFICCTR | VFI COMPTEUR TOUR DE PROGRAMME | |
B8 | BTSCC10 | VAT COMPTEUR 1/10 | |
B9 | BTSCCTR | VAT COMPTEUR TOUR DE PROGRAMME |
Par exemple, contenu de la seconde feuille :
L56.M511,M70<-2390. |
L57.M70<-M70+1.MISE A JOUR TABLE DES MESSAGES |
L58.M511,M70<-2400.EDITION HEURE DE REDEMARAGE AUTOMATE |
L59.B4<-1.ACTIVATION BIT EN FIN D'INITIALISATION |
L60.->1023. |
Mon petit bout de code prend chaque variable de la premiere feuille (B0 par exemple) et balaye la seconde feuille.
Si la variable est trouvee, je copie l'adresse où la variable est utilisée (L59 pour B4).
Mon code (voir ci-dessous un extrait) fonctionne directement sur les feuilles, ce qui est (très, voire trop) long.
var = tab_var(ind_var, 1) & "<-"
With Range(Cells(1, 1), Cells(max_calc, 1))
Set LastCell = .Cells(.Cells.Count)
End With
Set FoundCell = Range(Cells(1, 1), Cells(max_calc, 1)).Find(what:=var, LookIn:=xlValues, LookAt:=xlPart)
If Not FoundCell Is Nothing Then
FirstAddr = FoundCell.Address
End If
Do Until FoundCell Is Nothing
line = Left(FoundCell.Value, InStr(FoundCell.Value, ".") - 1)
If Left(line, 1) = "L" Then
Feuil3.Activate
If Feuil3.Cells(ind_var, 6) = "" Then
Feuil3.Cells(ind_var, 6) = line
Else
Feuil3.Cells(ind_var, 6) = Feuil3.Cells(ind_var, 6) & ", " & line
End If
Feuil2.Activate
End If
Set FoundCell = Range(Cells(1, 1), Cells(max_calc, 1)).FindNext(after:=FoundCell)
If FoundCell.Address = FirstAddr Then
Exit Do
End If
Pour gagner du temps, je souhaite le transformer pour travailler avec des "array".
Je sais transferer le contenu des feuilles dans les tableaux, et rapatrier le contenu du tableau dans les feuilles.
Par contre, je bute sur les fonctions de recherche.
Si vous avez une idée, un (non, des) conseil, je suis preneur !
Bonne journée,
Didier