Prob macro, pour importer données de cellule
Bonjour,
J'ai un souci avec une macro :
voici le code :
Sub Macro1()
ActiveSheet.Unprotect Password:="clapoutil"
Dim P As Worksheet 'déclare la variable P (onglet Plan d'action)
Dim R As Worksheet 'déclare la variable R (onglet Revue perf)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set P = Worksheets("Plan d'action") 'définit l'onglet P
Set R = Worksheets("Revue perf") 'définit l'onglet R
TV = P.Range("A11").CurrentRegion 'définit le tableau des valeurs TV
J = 1 'initialise la variable J
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
If TV(I, 8) = "Oui" Then 'condition : si la donnée ligne I colonne 8 du tableau des valeurs TV vaut "Oui"
ReDim Preserve TL(1 To J) 'redimensionne le tableau des lignes TL
TL(J) = TV(I, 7) 'récupère l'action dans la ligne J de TL
J = J + 1 'incrémente J
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
For I = 1 To J - 1 'boucle sur les J-1 lignes détectées
R.Rows(33).Insert Shift:=xlDown 'insère une ligne sous la ligne 33
Next I 'prochaine ligne détectée de la boucle
R.Range("B34").Resize(UBound(TL), 1).Value = Application.Transpose(TL) 'renvoie dans B34 redimensionnée le tableau TL transposé
ActiveSheet.Protect Password:="clapoutil"
End Sub
Mon objectif est :
- en colonne G j'indique une action,
- en colonne H je détermine si le fait est marquant ou non,
- si il est marquant, les données de la colonne G sont reportées dans l'onglet revue perf qd je clic sur le bouton fait marquant.
Mon souci est que mon code bug, qqn voit-il le problème ? Merci
Bonjour,
Difficile de répondre alors que ton tableau est vide et que la macro en question n'est pas dans le fichier (sauf erreur de ma part), et que tu ne précises pas non plus l'erreur obtenue.
A première vue, je vois 2 ou 3 choses :
- TV qui, ne l'absence de parenthèses, n'est pas déclaré comme une variable tableau
- En l'absence d'un paramètre "Option Base 1", les tableaux débutent avec l'indice 0 et pas 1 (donc attention avec les indices pour parcourir les éléments des tableaux)
- A11 est vide, donc peut poser problème lorsque tu affectes dans un tableau se basant sur la région dont fait partie cette cellule (.CurrentRegion)
Bonjour Lapin53, Bonjour Pedro22,
Au vue du fichier la ligne qui pose problème est la :
TV = P.Range("A11").CurrentRegion 'définit le tableau des valeurs TVComme la colonne "B" est vide le currentRegion s’arrête à celle ci et ne s’étend pas au reste du tableau, soit il faut:
- Modifier ta colonne " B" pour la transformer en tableau
- Modifier ton code pour forcer la prise en compte de l'intégralité de on tableau
Voici un exemple de code qui fonctionne, j'ai juste rentré en "dur" les dimensions de ton tableau.
Sub Macro1()
ActiveSheet.Unprotect Password:="clapoutil"
Dim P As Worksheet 'déclare la variable P (onglet Plan d'action)
Dim R As Worksheet 'déclare la variable R (onglet Revue perf)
Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
Dim TL() As Variant 'déclare la variable TL (Tableau des Lignes)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)
Application.ScreenUpdating = False 'masque les rafraîchissements d'écran
Set P = Worksheets("Plan d'action") 'définit l'onglet P
Set R = Worksheets("Revue perf") 'définit l'onglet R
TV = P.Range("A11:R50") 'définit le tableau des valeurs TV
J = 1 'initialise la variable J
For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs (en partant de la seconde)
If TV(I, 8) = "Oui" Then 'condition : si la donnée ligne I colonne 8 du tableau des valeurs TV vaut "Oui"
ReDim Preserve TL(1 To J) 'redimensionne le tableau des lignes TL
TL(J) = TV(I, 7) 'récupère l'action dans la ligne J de TL
J = J + 1 'incrémente J
End If 'fin de la condition
Next I 'prochaine ligne de la boucle
For I = 1 To J - 1 'boucle sur les J-1 lignes détectées
R.Rows(33).Insert Shift:=xlDown 'insère une ligne sous la ligne 33
Next I 'prochaine ligne détectée de la boucle
R.Range("B34").Resize(UBound(TL), 1).Value = Application.Transpose(TL) 'renvoie dans B34 redimensionnée le tableau TL transposé
ActiveSheet.Protect Password:="clapoutil"
End Subbonjour
salut au passage Pedro.
je faisais ce genre d'analyse d'enjeux sur Excel. Mais ça c'était avant Power BI Desktop gratuit
la saisie des datas se fait dans Excel comme sur ton premier onglet
mais l'analyse comme sur ton onglet 2 se fait avec PBI
sans macros
avec 1000 fois plus de possibilités
amitiés à vous
ok, super ca marche, merci