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

15outil-suivi.xlsm (195.36 Ko)

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 TV

Comme 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 Sub

bonjour

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

Rechercher des sujets similaires à "prob macro importer donnees"