Export de donnée à partir d'une listview

Bonjour à tous,

Je souhaite exporter ma listview sur une feuille Excel mais pour cela je souhaite que mon programme trouve par lui même la colonne qui correspond ou mettre les informations de ma listview. J'ai réussi à faire en sorte que mon programme trouve ma colonne mais une fois ma colonne trouver, mon code (qui de base fonctionne) ne fonctionne plus avec cette colonne trouver.

Mon programme est un userform qui permet de prendre des commandes (P pizza, etc) et l'afficher dans la feuil excel choisi. Le but est de mettre les commandes correspondantes à l'heure choisi par les clients. Si vous souhaitez voir le fichier entier prévenez moi.

Voici le code correspondant à mon bouton "Commander" sois le bouton qui permet d'exporter ma commande sur une feuil excel.

Je vous préviens, j'ai commencer il y a très peu de temps, par conséquent il peut y avoir des énormes coquille ou alors le code peut être "mal rangé".

Merci à ceux qui vont se pencher sur le sujet.

Si vous voulez plus d'informations n'hésitez pas à me demander :D

Private Sub Btn_Export_Click()
 Dim Sh As Worksheet, Ligne As Long
 With Me.LView_Recap
    Set Sh = Sheets("ECRAN CUISINE")
    For i = 1 To .ListItems.Count

        Ligne = Sh.Cells(Sh.Rows.Count, 2).End(xlUp).Offset(2).row
        Colonne = Sh.Cells(2, Sh.Columns.Count).End(xlToLeft).Column + 1

        Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseTrouvee As String

        Valeur_Cherchee = Me.LView_Recap.ListItems(i).ListSubItems(3).Text
        Set PlageDeRecherche = ActiveSheet.Rows(1)
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
        If Trouve Is Nothing Then

            AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else

              MotTrouve = Trouve.Text
        End If

        If MotTrouve = Me.LView_Recap.ListItems(i).ListSubItems(3).Text Then
            Sh.Cells(Ligne, Trouve.Column).Value = Me.LView_Recap.ListItems(i).ListSubItems(2).Text + Me.LView_Recap.ListItems(i).Text + Me.LView_Recap.ListItems(i).ListSubItems(1).Text
        End If
        'Sh.Cells(Ligne, 2) = Me.LView_Recap.ListItems(i).ListSubItems(2).Text + Me.LView_Recap.ListItems(i).Text + Me.LView_Recap.ListItems(i).ListSubItems(1).Text
        'Sh.Cells(Ligne - 2, 2) = Me.LView_Recap.ListItems(i).ListSubItems(3).Text
        'Sh.Cells(Ligne, 6) = Me.LView_Recap.ListItems(i).ListSubItems(4).Text
    Next i
 End With
End Sub

Bonjour,

En plaçant un Debug.Print à cet endroit dans votre code, quel résultat avez-vous dans la fenêtre exécution (Ctrl-G pour l'activer) ?

Debug.Print  Trouve.Column      
  If MotTrouve = Me.LView_Recap.ListItems(i).ListSubItems(3).Text Then
            Sh.Cells(Ligne, Trouve.Column).Value = Me.LView_Recap.ListItems(i).ListSubItems(2).Text + Me.LView_Recap.ListItems(i).Text + Me.LView_Recap.ListItems(i).ListSubItems(1).Text
        End If

Bonjour,

La fenêtre d'exécution s'ouvre mais rien ne se passe même si je compile ou autre.

Cela signifie que le code n'accède pas dans cette partie de programme.

Or ce code fonctionne très bien

Sub ChercheColonne()
 Dim Sh As Worksheet, Ligne As Long
    Set Sh = Sheets("ECRAN CUISINE")

        Ligne = Sh.Cells(Sh.Rows.Count, 2).End(xlUp).Offset(2).row
        Colonne = Sh.Cells(2, Sh.Columns.Count).End(xlToLeft).Column + 1
        Dim Trouve As Range, PlageDeRecherche As Range
        Dim Valeur_Cherchee As String, AdresseTrouvee As String

        Valeur_Cherchee = "18h00"
        Set PlageDeRecherche = ActiveSheet.Rows(1)
        Set Trouve = PlageDeRecherche.Cells.Find(what:=Valeur_Cherchee, LookAt:=xlWhole)
        If Trouve Is Nothing Then

            AdresseTrouvee = Valeur_Cherchee & " n'est pas présent dans " & PlageDeRecherche.Address
        Else

            MotTrouve = Trouve.Text
        End If

        If MotTrouve = "18h00" Then
            Cells(3, Trouve.Column).Value = "Pizza"
            'Sh.Cells(Ligne, AdresseTrouvee) = Me.LView_Recap.ListItems(i).ListSubItems(2).Text + Me.LView_Recap.ListItems(i).Text + Me.LView_Recap.ListItems(i).ListSubItems(1).Text
        End If

End Sub

Re-belote, que donne Debug.print Trouve.column dans ce code qui marche ?

Debug.Print  Trouve.Column
If MotTrouve = "18h00" Then
            Cells(3, Trouve.Column).Value = "Pizza"
            'Sh.Cells(Ligne, AdresseTrouvee) = Me.LView_Recap.ListItems(i).ListSubItems(2).Text + Me.LView_Recap.ListItems(i).Text + Me.LView_Recap.ListItems(i).ListSubItems(1).Text
        End If

Il donne la valeur 2 ce qui correspond à la bonne valeur

Donc c'est ce que je vous indiquais, le code ne passe pas dans cette partie de programme. Il vous faut trouver une autre solution pour trouver la bonne colonne.

Tant que le programme n'est pas lancé le Trouve.Column ne peut pas avoir de valeur donc en sois c'est normal qu'il n'y est pas de valeur quand je le test sur mon code principal, non ?

Tant que le programme n'est pas lancé le Trouve.Column ne peut pas avoir de valeur donc en sois c'est normal qu'il n'y est pas de valeur quand je le test sur mon code principal, non ?

Pour trouver une colonne, j'utilise cette fonction à placer dans un module standard :

Function ColonnePosition(ByVal FeuilleEnCours As Worksheet, ByVal LigneTitre As Long, ByVal TitreRecherche As String)

Dim CtrI As Long, NbColPosition As Long
Dim AireTitre2 As Range

    ColonnePosition = 0

    With FeuilleEnCours
         NbColPosition = .Cells(LigneTitre, .Columns.Count).End(xlToLeft).Column
         Set AireTitre2 = .Range(.Cells(LigneTitre, 1), .Cells(LigneTitre, NbColPosition))
         For CtrI = 1 To AireTitre2.Count
             Select Case Mid(AireTitre2(CtrI).Value, 1, Len(TitreRecherche))
                    Case TitreRecherche
                         ColonnePosition = AireTitre2(CtrI).Column
                         Exit For
             End Select
         Next
         Set AireTitre2 = Nothing
    End With

    If ColonnePosition = 0 Then
        MessagePresenceVariables = MessagePresenceVariables & TitreRecherche & Chr(10)
       ' Debug.Print TitreRecherche
    End If

End Function

Un exemple d'utilisation :

Option Explicit

Public MessagePresenceVariables As String

Sub XXXX()

Dim ColonneCherchee As Integer
Dim Valeurcherchee As Variant

    MessagePresenceVariables = "Absence colonnes : " & Chr(10)
    Valeurcherchee = "X"
    ColonneCherchee = ColonnePosition(ActiveSheet, 1, Valeurcherchee)
    If MessagePresenceVariables <> "Absence colonne : " & Chr(10) Then
       MsgBox MessagePresenceVariables
       Exit Sub
    End If

End Sub

Si la fonction ne trouve pas la colonne, c'est qu'il y a un problème de syntaxe ou de type.

Ta fonction fonctionne très bien! Je t'en remercie !

Maintenant j'ai un autre problème que je n'avais pas avant : à chaque fois que je rentre des valeurs au lieu d'aller de ligne en ligne, ça saute une ligne peu importe la colonne..

Voici le code actuel :

Private Sub Btn_Export_Click()
 Dim Sh As Worksheet, Ligne As Long
 With Me.LView_Recap
    Set Sh = Sheets("ECRAN CUISINE")
    For i = 1 To .ListItems.Count

        Dim ColonneCherchee As Integer
        Dim Valeurcherchee As Variant

        Valeurcherchee = Me.LView_Recap.ListItems(i).ListSubItems(3).Text
        ColonneCherchee = ColonnePosition(Sh, 1, Valeurcherchee)
        Ligne = Sh.Cells(Sh.Rows.Count, ColonneCherchee).End(xlUp).Offset(1).row + 1

        Sh.Cells(Ligne, ColonneCherchee).Value = Me.LView_Recap.ListItems(i).ListSubItems(2).Text + Me.LView_Recap.ListItems(i).Text +
Me.LView_Recap.ListItems(i).ListSubItems(1).Text

    Next i
 End With
End Sub

Je n'ai rien dit problème résolu. Merci de ton aide !

Rechercher des sujets similaires à "export donnee partir listview"