Variable Tableau

Le
DesseJ
Bonjour tous,

J'ai toujours du mal insrer un tableau, rsultat une unique
variable dans une plage de cellules.
Le rsultat de la premire macro, c'est la mme occurrence
rpte autant de fois qu'il y a de rsultats possibles (cellules
en gras).
En revanche, dans la seconde, en "rusant" et en faisant croire Excel
que mon tableau a deux variables, l c'est juste. J'ai bien le contenu
de toutes mes cellules en gras dans la plage ddie.
O pche-je, svp ?

Merci
Steph D.

Sub MaMacroQuiNeMarchePas()
Dim MaCellule As Range
Dim MesDonnees
Dim i As Double
ReDim MesDonnees(1 To 30)
i = 1
For Each MaCellule In Range(Worksheets("Feuil1").Range("B2"),
Worksheets("Feuil1").Range("B2").CurrentRegion)
If MaCellule.Font.Bold = True Then
MesDonnees(i) = MaCellule.Value
i = i + 1
End If
Next MaCellule
ReDim Preserve MesDonnees(i - 1)
Sheets("Feuil2").Range("A1:A" & i - 1) = MesDonnees
End Sub

Sub MaMacroQuiMarche()
Dim MaCellule As Range
Dim MesDonnees
Dim i As Double
ReDim MesDonnees(1 To 30, 1 To 1)
i = 1
For Each MaCellule In Range(Worksheets("Feuil1").Range("B2"),
Worksheets("Feuil1").Range("B2").CurrentRegion)
If MaCellule.Font.Bold = True Then
MesDonnees(i, 1) = MaCellule.Value
i = i + 1
End If
Next MaCellule
Sheets("Feuil2").Range("A1:A" & i - 1) = MesDonnees
End Sub
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #3562871
Bonjour DesseJ,

Essaie ceci :

'--------------------------------
Sub MaMacroQuiNeMarchePas()

Dim C As Range, Rg As Range
Dim MesDonnees()
Dim i As Long

With Worksheets("Feuil1")
Set Rg = .Range("B2").CurrentRegion
End With

For Each c In Rg
If c.Font.Bold = True Then
ReDim Preserve MesDonnees(i)
MesDonnees(i) = c.Value
i = i + 1
End If
Next
'Pour avoir ton résultat en colonne ... sinon tu
'enlève cette section WorksheetFunction.Transpose
Sheets("Feuil2").Range("A1").Resize(i).Value = _
WorksheetFunction.Transpose(MesDonnees)

End Sub
'--------------------------------


Salutations!


"DesseJ" Bonjour à tous,

J'ai toujours du mal à insérer un tableau, résultat à une unique
variable dans une plage de cellules.
Le résultat de la première macro, c'est la même occurrence
répétée autant de fois qu'il y a de résultats possibles (cellules
en gras).
En revanche, dans la seconde, en "rusant" et en faisant croire à Excel
que mon tableau a deux variables, là c'est juste. J'ai bien le contenu
de toutes mes cellules en gras dans la plage dédiée.
Où pêche-je, svp ?

Merci
Steph D.

Sub MaMacroQuiNeMarchePas()
Dim MaCellule As Range
Dim MesDonnees
Dim i As Double
ReDim MesDonnees(1 To 30)
i = 1
For Each MaCellule In Range(Worksheets("Feuil1").Range("B2"),
Worksheets("Feuil1").Range("B2").CurrentRegion)
If MaCellule.Font.Bold = True Then
MesDonnees(i) = MaCellule.Value
i = i + 1
End If
Next MaCellule
ReDim Preserve MesDonnees(i - 1)
Sheets("Feuil2").Range("A1:A" & i - 1) = MesDonnees
End Sub

Sub MaMacroQuiMarche()
Dim MaCellule As Range
Dim MesDonnees
Dim i As Double
ReDim MesDonnees(1 To 30, 1 To 1)
i = 1
For Each MaCellule In Range(Worksheets("Feuil1").Range("B2"),
Worksheets("Feuil1").Range("B2").CurrentRegion)
If MaCellule.Font.Bold = True Then
MesDonnees(i, 1) = MaCellule.Value
i = i + 1
End If
Next MaCellule
Sheets("Feuil2").Range("A1:A" & i - 1) = MesDonnees
End Sub
michdenis
Le #3562851
Bonjour DesseJ,

Une variante:

Si tu désires contrôler lors de la boucle sur ta plage de cellules, si excel doit procédure en ligne ou en colonne pour la lectures,
Tu n'as qu'à inverser l'ordre des 2 boucles.


'-----------------------------------
Sub Test()

Dim R As Long, C As Integer
Dim MesDonnees()
Dim i As Long, Rg As Range

With Worksheets("Feuil1")
Set Rg = .Range("B2").CurrentRegion
End With

R = Rg.Rows.Count
C = Rg.Columns.Count

For a = 1 To Rg.Rows.Count
For b = 1 To C
If Rg(a, b).Font.Bold = True Then
ReDim Preserve MesDonnees(i)
MesDonnees(i) = Rg(a, b)
i = i + 1
End If
Next
Next
'Recopie en ligne
Sheets("Feuil2").Range("A1").Resize(, i).Value = _
MesDonnees
End Sub
'-----------------------------------


Salutations!




"DesseJ" Bonjour à tous,

J'ai toujours du mal à insérer un tableau, résultat à une unique
variable dans une plage de cellules.
Le résultat de la première macro, c'est la même occurrence
répétée autant de fois qu'il y a de résultats possibles (cellules
en gras).
En revanche, dans la seconde, en "rusant" et en faisant croire à Excel
que mon tableau a deux variables, là c'est juste. J'ai bien le contenu
de toutes mes cellules en gras dans la plage dédiée.
Où pêche-je, svp ?

Merci
Steph D.

Sub MaMacroQuiNeMarchePas()
Dim MaCellule As Range
Dim MesDonnees
Dim i As Double
ReDim MesDonnees(1 To 30)
i = 1
For Each MaCellule In Range(Worksheets("Feuil1").Range("B2"),
Worksheets("Feuil1").Range("B2").CurrentRegion)
If MaCellule.Font.Bold = True Then
MesDonnees(i) = MaCellule.Value
i = i + 1
End If
Next MaCellule
ReDim Preserve MesDonnees(i - 1)
Sheets("Feuil2").Range("A1:A" & i - 1) = MesDonnees
End Sub

Sub MaMacroQuiMarche()
Dim MaCellule As Range
Dim MesDonnees
Dim i As Double
ReDim MesDonnees(1 To 30, 1 To 1)
i = 1
For Each MaCellule In Range(Worksheets("Feuil1").Range("B2"),
Worksheets("Feuil1").Range("B2").CurrentRegion)
If MaCellule.Font.Bold = True Then
MesDonnees(i, 1) = MaCellule.Value
i = i + 1
End If
Next MaCellule
Sheets("Feuil2").Range("A1:A" & i - 1) = MesDonnees
End Sub
DesseJ
Le #3312211
Bonjour,

Merci Denis, parfait comme toujours. De plus, l'écriture est plus
claire et élégante.
Puis-je abuser, stp, en te demandant pourquoi les données sont bien
recopiées à partir de la cellule A2, et non A1 ?
Sheets("Feuil2").Range("A1").Resize(i).Value =
WorksheetFunction.Transpose(mesdonnees)

Bonne journée à tous
Steph D.
michdenis
Le #3311941
Bonjour Steph,

les 2 procédures proposées sur ce fil fonctionne très bien. Si tu as une difficulté particulière, il faudra que tu sois plus
explicite dans tes explications.


Salutations!


"DesseJ" Bonjour,

Merci Denis, parfait comme toujours. De plus, l'écriture est plus
claire et élégante.
Puis-je abuser, stp, en te demandant pourquoi les données sont bien
recopiées à partir de la cellule A2, et non A1 ?
Sheets("Feuil2").Range("A1").Resize(i).Value WorksheetFunction.Transpose(mesdonnees)

Bonne journée à tous
Steph D.
DesseJ
Le #3310591
Re-bonjour Denis,

Autant pour moi, j'avais testé tes procédures en ajoutant, en début
de procédure après la déclaration des variables, un i = 1 (je
pensais qu'il fallait toujours initialiser les variables après
déclaration, un i = 0 aurait suffit bien que ce soit implicite).

Désolé, et merci encore
Steph
michdenis
Le #3310331
Bonjour Desse,

Pourquoi ceci :

un i = 0

Quand tu déclares le TYPE d'une variable en début de procédure que ce soit par exemple :
i As integer, i As Double, i As long

La valeur de la variable est déjà à zéro. Zéro est à ce type de variable ce que rien ("") est au type String. Pourquoi ajouter une
ligne de code qui n'apporte rien de plus à une procédure. C'est autre chose si la variable n'est pas déclarée, ou, on lui a attribué
le TYPE variant. Dans ce cas, Excel ne sait pas avant que l'on lui attribue une valeur, si c'est une valeur numérique, texte ou un
Array(tableau) et au pis aller, un objet (worksheet, range....)


Salutations!




"DesseJ" Re-bonjour Denis,

Autant pour moi, j'avais testé tes procédures en ajoutant, en début
de procédure après la déclaration des variables, un i = 1 (je
pensais qu'il fallait toujours initialiser les variables après
déclaration, un i = 0 aurait suffit bien que ce soit implicite).

Désolé, et merci encore
Steph
DesseJ
Le #3305081
Bonjour Denis,

A ta question "Pourquoi ceci un i = 0", je te répondrai simplement que
je ne savais pas, avant tes explications, que le fait de déclarer le
type (integer double ou long) initialisait implicitement la variable à
0, ce qui est un peu honteux.
Comme souvent, par excès de facilité, je boucle ou je gère mes
tableaux en débutant l'indice à 1, c'est vite devenu une très
mauvaise habitude.

Autant la corriger pour s'approcher un peu plus de "l'écriture
parfaite" ;o)))

Merci pour tes réponses. Bonne journée.
Steph D.
Publicité
Poster une réponse
Anonyme