Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Variable tableau + code

8 réponses
Avatar
dracbi
Bonjour,

Voila mon probl=E8me :

J'aimerais d=E9clarer une variable tableau dynamique dans une feuille
excel (exemple Feuil 2 Colonne A Ligne 1 =E0 xxx )
Les =E9l=E9ments enregistr=E9es dans lea feuille serviront de crit=E8re lors=

de la copie des donn=E9es
Mon probl=E8me doit certianement provenir de l'attribution Compte...


Sub xxxx()

Sheets("Feuil2").Select
Dim Compte() As String
Compte =3D Range([A1], [A1].End(xlDown))
ReDim Preserve Compte(100)

Sheets("Feuil1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select

For Each d In Selection.Rows
ligne =3D d.Row
If d.Cells(1, 15).Value < M + 1 And
d.Cells(1, 3).Value =3D Compte Then
d.Copy
Sheets("CG-Global").Select
Cells(ligne, 1).Select
Selection.PasteSpecial
End If
Next d

Sheets("CG-Global").Activate

With ActiveSheet.UsedRange
derli =3D .Row + .Rows.Count - 1
End With
Application.ScreenUpdating =3D True
For r =3D derli To 1 Step -1
If Application.CountA(Rows(r)) =3D 0 Then Rows(r).Delete
Next r

End Sub()

8 réponses

Avatar
Jacques ALARDET
Bonjour,

J'ai trouvé une 'incompatbilité du type entre la variable (Dim Compte() As
String) et son utilisation (d.Cells(1, 3).Value = Compte Then)

C'est ton problème ?

Il attend un indice au tableau dans le 2ème cas, par exemple compte(?)

J a c q u e s

a écrit dans le message de
news:
Bonjour,

Voila mon problème :

J'aimerais déclarer une variable tableau dynamique dans une feuille
excel (exemple Feuil 2 Colonne A Ligne 1 à xxx )
Les éléments enregistrées dans lea feuille serviront de critère lors
de la copie des données
Mon problème doit certianement provenir de l'attribution Compte...


Sub xxxx()

Sheets("Feuil2").Select
Dim Compte() As String
Compte = Range([A1], [A1].End(xlDown))
ReDim Preserve Compte(100)

Sheets("Feuil1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select

For Each d In Selection.Rows
ligne = d.Row
If d.Cells(1, 15).Value < M + 1 And
d.Cells(1, 3).Value = Compte Then
d.Copy
Sheets("CG-Global").Select
Cells(ligne, 1).Select
Selection.PasteSpecial
End If
Next d

Sheets("CG-Global").Activate

With ActiveSheet.UsedRange
derli = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = True
For r = derli To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r

End Sub()
Avatar
dracbi
On 4 mai, 18:50, "Jacques ALARDET" wrote:
Bonjour,

J'ai trouvé une 'incompatbilité du type entre la variable (Dim Compte( ) As
String) et son utilisation (d.Cells(1, 3).Value = Compte Then)

C'est ton problème ?

Il attend un indice au tableau dans le 2ème cas, par exemple compte(?)

J a c q u e s



merci pour ta réponse si rapide Jacques

Mon problème est bien la mais comment faire ?

J'aimerais que l'ensemble des infos de la variable "Compte" soit pris
en compte pour la copie des lignes.

Variable Compte=
611
613
624
706
707...

Cordialement

Avatar
Jacques ALARDET
Bonjour,

Pour charger les données dans le tableau, habituellement je fais comme cela
:

Sheets("Feuil2").Select
ReDim Compte(100)
For L = 1 To UBound(Compte)
Compte(L) = Cells(L, 1).Value
Next

au lieu de :
Compte = Range([A1], [A1].End(xlDown))
ReDim Preserve Compte(100)


J a c q u e s

a écrit dans le message de
news:
On 4 mai, 18:50, "Jacques ALARDET" wrote:
Bonjour,

J'ai trouvé une 'incompatbilité du type entre la variable (Dim Compte() As
String) et son utilisation (d.Cells(1, 3).Value = Compte Then)

C'est ton problème ?

Il attend un indice au tableau dans le 2ème cas, par exemple compte(?)

J a c q u e s



merci pour ta réponse si rapide Jacques

Mon problème est bien la mais comment faire ?

J'aimerais que l'ensemble des infos de la variable "Compte" soit pris
en compte pour la copie des lignes.

Variable Compte 611
613
624
706
707...

Cordialement

Avatar
PMO
Bonjour,

Au lieu de :
Dim Compte() As String
Compte = Range([A1], [A1].End(xlDown))

utilisez
Dim Compte As Variant
Compte = Range([A1], [A1].End(xlDown))

Ci-dessous un exemple de code
'***********
Sub pmo()
Dim Compte As Variant
Dim i&
Dim j&
Compte = Range([A1], [A1].End(xlDown))
For i& = 1 To UBound(Compte, 1)
For j& = 1 To UBound(Compte, 2)
Debug.Print Compte(i&, j&)
Next j&
Next i&
End Sub
'***********

Cordialement.

PMO
Patrick Morange
Avatar
dracbi
On 5 mai, 17:00, PMO <patrickPOINTmorangeAROBASElapostePOINTnet>
wrote:
Bonjour,

Au lieu de :
Dim Compte() As String
Compte = Range([A1], [A1].End(xlDown))

utilisez
Dim Compte As Variant
Compte = Range([A1], [A1].End(xlDown))

Ci-dessous un exemple de code
'***********
Sub pmo()
Dim Compte As Variant
Dim i&
Dim j&
Compte = Range([A1], [A1].End(xlDown))
For i& = 1 To UBound(Compte, 1)
  For j& = 1 To UBound(Compte, 2)
    Debug.Print Compte(i&, j&)
  Next j&
Next i&
End Sub
'***********

Cordialement.

PMO
Patrick Morange


Avatar
dracbi
On 5 mai, 17:00, PMO <patrickPOINTmorangeAROBASElapostePOINTnet>
wrote:
Bonjour,

Au lieu de :
Dim Compte() As String
Compte = Range([A1], [A1].End(xlDown))

utilisez
Dim Compte As Variant
Compte = Range([A1], [A1].End(xlDown))

Ci-dessous un exemple de code
'***********
Sub pmo()
Dim Compte As Variant
Dim i&
Dim j&
Compte = Range([A1], [A1].End(xlDown))
For i& = 1 To UBound(Compte, 1)
  For j& = 1 To UBound(Compte, 2)
    Debug.Print Compte(i&, j&)
  Next j&
Next i&
End Sub
'***********

Cordialement.

PMO
Patrick Morange


Tout d'abord je vous remercie pour votre aide. Je tiens à préciser que
je suis novice en vba, soyez donc indulgent. ^^
Rien à faire ca ne fonctionne pas.

Je vais donc tenter d'expliquer ce que je souhaite faire.

Dans une feuille ici "Feuil2" j'aimerais déclarer des paramètres
( variable tableau = Compte)
Dans une seconde feuille "Feuil1" j'ai des données figées sur les
colonnes mais pas sur les lignes.

J'aimerais sélectionner dans la Feuil1 les données correspondantes à
la variable tableau.
Ensuite je désire copier ses données dans une troisieme feuille appelé
ici CG-Global

Mon problème est sur cette ligne :

If d.Cells(1, 3).Value = Sheets("Feuil2").Cells(L, 1).Value Then
et si je remplace Sheets("Feuil2")... par :

If d.cells(1,3).value = Compte(N)

Un message apparait lors de l'execution :
"Qualificateur incorrect"


Sub bibi()

Sheets("Feuil2").Select 'Sélection
de la feuille contenant les parametres
Dim Compte() As String 'Déclaration
de ma variable tableau
ReDim Preserve Compte(50) 'Dimension du
tableau
For L = 1 To UBound(Compte)
Compte(L) = Cells(L, 1).Value
Next


Sheets("Feuil1").Select 'Sélection
de la feuille 1
ActiveCell.SpecialCells(xlLastCell).Select 'Attribution de la
plage à la variable d
Range(Selection, Cells(1)).Select

For Each d In Selection.Rows 'Boucle sur
toutes les lignes de la plage "d"
ligne = d.Row
If d.Cells(1, 3).Value = Sheets("Feuil2").Cells(L, 1).Value Then

d.Copy
Sheets("CG-Global").Select
Cells(ligne, 1).Select
Selection.PasteSpecial
End If
Next d

Sheets("CG-Global").Activate

With ActiveSheet.UsedRange
derli = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = True
For r = derli To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r

Msgbox "Traitement terminé"
End sub ()



Merci par avnce pour toute l'aide qui sera apportée.

Cordialement

Benjamin

Avatar
dracbi
On 6 mai, 00:35, wrote:
On 5 mai, 17:00, PMO <patrickPOINTmorangeAROBASElapostePOINTnet>
wrote:





Bonjour,

Au lieu de :
Dim Compte() As String
Compte = Range([A1], [A1].End(xlDown))

utilisez
Dim Compte As Variant
Compte = Range([A1], [A1].End(xlDown))

Ci-dessous un exemple de code
'***********
Sub pmo()
Dim Compte As Variant
Dim i&
Dim j&
Compte = Range([A1], [A1].End(xlDown))
For i& = 1 To UBound(Compte, 1)
  For j& = 1 To UBound(Compte, 2)
    Debug.Print Compte(i&, j&)
  Next j&
Next i&
End Sub
'***********

Cordialement.

PMO
Patrick Morange


Tout d'abord je vous remercie pour votre aide. Je tiens à préciser que
je suis novice en vba, soyez donc indulgent. ^^
Rien à faire ca ne fonctionne pas.

Je vais donc tenter d'expliquer ce que je souhaite faire.

Dans une feuille ici "Feuil2" j'aimerais déclarer des paramètres
( variable tableau = Compte)
Dans une seconde feuille "Feuil1" j'ai des données figées sur les
colonnes mais pas sur les lignes.

J'aimerais sélectionner dans la Feuil1 les données correspondantes à
la variable tableau.
Ensuite je désire copier ses données dans une troisieme feuille appel é
ici CG-Global

Mon problème est sur cette ligne :

If d.Cells(1, 3).Value = Sheets("Feuil2").Cells(L, 1).Value Then
 et si je remplace Sheets("Feuil2")... par :

If d.cells(1,3).value = Compte(N)

Un message apparait lors de l'execution :
"Qualificateur incorrect"

Sub bibi()

Sheets("Feuil2").Select                                    'Sélection
de la feuille contenant les parametres
Dim Compte() As String                                   'Déclaration
de ma variable tableau
ReDim Preserve Compte(50)                             'Dimension du
tableau
For L = 1 To UBound(Compte)
Compte(L) = Cells(L, 1).Value
Next

Sheets("Feuil1").Select                                    'Sélection
de la feuille 1
ActiveCell.SpecialCells(xlLastCell).Select          'Attribution de la
plage à la variable d
Range(Selection, Cells(1)).Select

For Each d In Selection.Rows                           'Boucle sur
toutes les lignes de la plage "d"
ligne = d.Row
If d.Cells(1, 3).Value = Sheets("Feuil2").Cells(L, 1).Value Then

d.Copy
Sheets("CG-Global").Select
Cells(ligne, 1).Select
                            Selection.PasteSpe cial
                            End If
                            Next d

    Sheets("CG-Global").Activate

        With ActiveSheet.UsedRange
        derli = .Row + .Rows.Count - 1
        End With
Application.ScreenUpdating = True
For r = derli To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r

Msgbox "Traitement terminé"
End sub ()

Merci par avnce pour toute l'aide qui sera apportée.

Cordialement

Benjamin- Masquer le texte des messages précédents -

- Afficher le texte des messages précédents -


ok s


Avatar
dracbi
Sheets("Feuil2").Select
Dim Compte() As String
ReDim Preserve Compte(15)
For L = 1 To UBound(Compte)
Compte(L) = Cells(L, 1).Value

Sheets("Feuil1").Select
ActiveCell.SpecialCells(xlLastCell).Select
Range(Selection, Cells(1)).Select

For Each d In Selection.Rows
ligne = d.Row
If d.Cells(1, 3).Value = Sheets("Feuil2").Cells(L, 1).Value Then
d.Copy
Sheets("CG-Global").Select
Cells(ligne, 1).Select
Selection.PasteSpecial
End If
Next d

Sheets("CG-Global").Activate

With ActiveSheet.UsedRange
derli = .Row + .Rows.Count - 1
End With
Application.ScreenUpdating = True
For r = derli To 1 Step -1
If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
Next r

Next

Sa fonctionne de cette façon... le "next" était mal placé.

Pour les prochains éventuellement voici un lien interessant:
http://silkyroad.developpez.com/vba/tableaux/


Merci Jacques et PMO pour votre aide et sasn doute à bientôt ^^