Array? (optimisation de mon code)

[Résolu]
Signaler
-
 BIOoOAG123 -
Rebonjour à tous, merci déjà pour toute les réponses que vous m'avez apporté jusque là. Mais je me trouve face à un nouveau problème : les arrays.

J'ai un code qui analyse beaucoup de valeur. celui-là

Ou NbLigneBDDDe est égal à 5600 environ


Private Sub btnValiderAnalyse_Click()
Dim Valeur As String
Dim NbLigneBDDDe As Integer



Application.ScreenUpdating = False



NbLigneBDDDe = Worksheets(5).Cells(10000, 2).End(xlUp).Row



Worksheets(6).Range("A3:Z500").clear
Valeur = ComboBox1.Value

For i = 3 To NbLigneBDDDe Step 1
    If Worksheets(5).Range("B" & i).Value = Valeur Then
    Worksheets(6).Rows(3).Insert
    With Worksheets(5)
    .Activate
    .Range("A" & i & ":D" & i).Copy Destination:=Worksheets(6).Range("B3:E3")
    .Range("E" & i).Copy Destination:=Worksheets(6).Range("G3")
    .Range("F" & i & ":G" & i).Copy Destination:=Worksheets(6).Range("I3:J3")
    End With
    End If
Next
Unload Me

'*************Filtres*******************************************************
P5_ChoixDates.Show



Application.ScreenUpdating = True
Application.CutCopyMode = False


End Sub



Et je suis passé à ça :

Sub Arraytest()
Dim Tblo As Variant
Dim i As Long

With Sheets(5)
    Tblo = .Range("A1:D" & .Cells(65536, 2).End(xlUp).Row).Value
End With


Test = Filter
For i = 3 To UBound(Tblo, 1)

    If Tblo(i, 1) = "ALLEMAND " Then
    Sheets(7).Range(Cells(i, 1), Cells(i, 4)).Value = Tblo
    End If
   
Next i
End Sub


C'est la ligne en rouge qui bug.
Je souhaite coller les infos de la ligne i du tableau vers la feuille 7. Je ne trouve pas de solution sur internet

12 réponses

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Alors regarde :
On part des données de l'exemple donné dans mon message du jeudi 11 avril 2013 à 17:40:26 (avec nos titi et toto, etc ...)
On met (pour exemple) un bouton de commande sur la feuille Feuil1, avec ce code :
Private Sub CommandButton1_Click()
  Dim plage As Range, retenu As Range, i As Long
  Set plage = Range("B4:D10")
  tablo = plage
  For i = 1 To UBound(tablo)
    If tablo(i, 1) = "titi" Then
      If retenu Is Nothing Then
        Set retenu = plage.Rows(i)
      Else
        Set retenu = Union(retenu, plage.Rows(i))
      End If
      With Worksheets("Feuil2")
        .Cells.ClearContents
        retenu.Copy Destination:=.Range("D8")
      End With
     End If
  Next
  Set retenu = Nothing
  Set plage = Nothing
End Sub

on lance et on clique sur Commandbutton1
Regarde maintenant ta feuille Feuil2 :
On y trouvera, à partir de la cellule D8, toutes les données qui nous intéressent, les unes sous les autres.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
172
Date d'inscription
jeudi 8 décembre 2011
Statut
Membre
Dernière intervention
21 juillet 2013
2
Bonjour.

Il y a un message ?
Qu'est censé effectuer cette ligne en rouge ?

___________________________________________________________________________________________________________________
Comme la vitesse de la lumière est supérieure à celle du son, certains ont l'air brillant avant d'avoir l'air con !
C'est juste qu'il ne me copie aucune valeur. (Pas de message d'erreur)

Cette ligne :
Sheets(7).Range(Cells(i, 1), Cells(i, 4)).Value = Tblo


Je souhaite que lorsque dans le array il me trouve "ALLEMAND " il me copie la ligne du array ou il trouve "ALLEMAND "(qui au final sera une variable) dans : Sheets(7).Range(Cells(i, 1), Cells(i, 4))

Et je vois pas pourquoi il ne me copie rien (aucune valeur).
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,
Qu'il te "trouve" "ALLEMAND " (avec un espace derrière ???) dans quelle colonne du tableau, très exactement ?



________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Oui non mais Allemand c'est un nom extrait d'une base de données, et il l'ont inscrit comme ça, au final ce sera une variable issue d'un comboBox(qui va chercher les valeur exacte)donc pour moi ça ne change rien! :)

En fait
Allemend est dans Tblo (i,1)
et je souhaite qu'il me copie
Tblo(i,1) vers Sheets(7).range("A1")
Tblo(i,2) vers Sheets(7).range("B1")
Tblo(i,3) vers Sheets(7).range("C1")
Tblo(i,4) vers Sheets(7).range("D1")


A la limite il y aurait ça que je viens de trouver (et qui marche, mais je devrai copier beaucoup plus de colonne normalement) Est-ce que c'est un "bon" code ou une magouille qui marche? ^^ lol
N'y a t'il pas moyen de sélectionner un plage du array et de la copier directement? (et ainsi améliorer le code et le rendre plus concis?)


For i = 3 To UBound(Tblo, 1)

If Tblo(i, 1) = "ALLEMAND " Then
Sheets(7).Cells(i, 1).Value = Tblo(i, 1)
Sheets(7).Cells(i, 2).Value = Tblo(i, 2)
Sheets(7).Cells(i, 3).Value = Tblo(i, 3)
Sheets(7).Cells(i, 4).Value = Tblo(i, 4)
End If
   
Next i
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Voilà qui devient moins évidemment clair.
ceci m'interpelle :
et je souhaite qu'il me copie
Code Visual Basic :

Tblo(i,1) vers Sheets(7).range("A1")
Tblo(i,2) vers Sheets(7).range("B1")
Tblo(i,3) vers Sheets(7).range("C1")
Tblo(i,4) vers Sheets(7).range("D1")


car il s'agirait d'une inversion des lignes et des colonnes.
Intéresse-toi alors à Application.Transpose

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Ecoute : on va y voir plus clair

ouvre un nouveau classeur :
1) sur sa feuille Feuil1, tu vas écrire ceci, en colonne C, à partir de la ligne 4 :
toto
titi
tata
titi
blabla
titi
toto
2) mets ce que tu veux dans les autres colonnes (disons D,E,F et G) correspondant à ces valeurs
que veux-tu que contienne exactement ta feuille Feuil2 si tu retiens "titi" pour valeur ? (en disant à partir de quelle ligne et de quelle colonne.

Et tu verras ce que je ferai alors. Il te restera à analyser et inclure dans ton vrai classeur en adaptant.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Pour répondre à ta question je souhaite que lorsqu'il me trouve à chaque fois "titi" la ligne ou il le trouve (ou plutôt la Plage ici par exemple("C" & i ":G" & i)) se copie vers la feuille 2

Voila et tout ça avec un array car j'ai 6000 lignes :)
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
la ligne ou il le trouve (ou plutôt la Plage ici par exemple("C" & i ":G" & i)) se copie vers la feuille 2

Bien compris, mais , sur la feuille 2 ?
Regarde l'exemple :
on a titi en lignes 5, 7 et 9 de la colonne C
dans quelle colonne on écrit les "titi" sur la feuille Feui2 ? Et sur quelles lignes (puiqu'ils sont trois "titi") ? Le reste est simple (les autres valeurs...) et déjà compris
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
Toujours sur la ligne 3 avec un insert pour les mettre à la suite : Feuille(2).Rows(3).Insert :)
Et la colonne peut importe après tant que les valeur sont les unes à la suite des autres (j'adapterai après à mon cas)! :)
Merci de la réponse! :) ça m'a bien aidé.