Excel : Ubound => Incompatibilité de type

Résolu/Fermé
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 - 2 janv. 2017 à 18:56
 Utilisateur anonyme - 3 janv. 2017 à 18:04
Bonjour,

Je bidouille, je bidouille...
J'essaie de regrouper de fichier pour n'en faire qu'un.
Indépendamment l'un de l'autre tout fonctionne à présent.
Mais lorsque je veux les lier je me retrouve avec une erreur "d'incompatibilité de type" sur la fonction Ubound
Sub Export()
   Dim start As Single
start = Timer
   
   'remplace le "." par "," dans la colonne "F"
   'Sheets("Edit_Chq").Range("K:K").NumberFormat = "@"
   'Sheets("Donnees").Range("F:F").Replace What:=".", Replacement:=","
   
    With Worksheets("Edit_Chq")
        derlig = .Range("K" & Rows.Count).End(xlUp).Row
        Tinfos = .Range("K2:K" & derlig).Value
    End With
    Range("K1:K1") = "<START>"
    LTInf = UBound(Tinfos, 1)
    Close


Auriez-vous, je vous prie, l'amabilité de bien vouloir me secourir :D
D'avance merci.


A voir également:

5 réponses

gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
2 janv. 2017 à 19:08
Bonjour,

Tu n'as peut-être qu'une cellule dans ta colonne et donc pas de table.
2
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
3 janv. 2017 à 07:38
Bonjour, je pense comme toi,

Tinfos = .Range("K2:K" & derlig).Value
    '...
    LTInf = UBound(Tinfos, 1)

Tinfos n'a bien qu'une seule colonne.
0
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
Modifié par NaXiLeAn le 3/01/2017 à 09:37
Bonjour,
Effectivement pour faire mes tests ma colonne K n'a qu'une seule données. Ce qui , cependant, peut arriver.
0
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1 > Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
3 janv. 2017 à 09:53
Bonjour et Merci Whismeril,
effectivement la colonne K n'a qu'une donnée dans mon test, mais cela peut arriver.
1 à l'infini à compter de la ligne 2.
J'ai mis mon code complet dans la conversation. Merci pour ton aide.
0
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
3 janv. 2017 à 09:54
Je met "mon" code complet c'est peut être plus utile.
Merci pour ton aide.
Sub Export()
   Dim start As Single
start = Timer
   
    With Worksheets("Edit")
        derlig = .Range("K" & Rows.Count).End(xlUp).Row
        Tinfos = .Range("K2:K" & derlig).Value
    End With
    If IsArray(Tinfos) Then LTInf = UBound(Tinfos, 1) Else LTInf = 1 ' Si une seule donnée dans colonne
    'LTInf = UBound(Tinfos, 1)
    Close
    Fichier = "Imprim_" & Environ("username") & "_" & Format(Date, "yyyy-mm-dd") & "_" & Format(Time, "hh-mm-ss") & ".txt"
    Chemin = "C:\00_Export\"
    SepT = ""
    Open Chemin & Fichier For Output As #1
        Print #1, "'<START>"

        For N = 1 To LTInf
         If Tinfos(N, 1) <> "" Then
            For NL = 1 To 1
                If NL = 1 Then
                Print #1, Tinfos(N, 11) '11=> colonne K
                End If
            Next NL
            End If
        Next N
        Print #1, "</END>"
        Print #1, "//"
    Close 1
MsgBox "Traitement Terminé! Durée : " & Timer - start & " secondes"
End Sub
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 928
3 janv. 2017 à 10:21
Non, tu n'as pas compris, quad un tableau n'a qu'une Colonne on utilise
Ubound(tableau)
et pas
Ubound(tableau, chiffre)
0
Bonjour NaXiLeAn,

Bonne année 2017 !

1) LTInf non déclaré => type implicite : Variant
2) Range("K1:K1") = "<START>" => Range("K1") = "<START>"
3) Où est ton End Sub ?
4) Close est pour fermer un fichier qu'on a ouvert avant,
    mais il n'y en n'a pas.

Cordialement.  :)
1
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
Modifié par NaXiLeAn le 3/01/2017 à 09:55
Bonjour Albkan,
Bonne et heureuse année :D
Mon code fait 4 pages, c'est juste un extrait :) c'est pourquoi le End Sub n'apparait pas.
Je souhaite exporter le contenu de la colonne K (hors ligne 1 : Titre / Nombre de lignes variable de la ligne 2 à l'infini) vers un fichier texte.
La colonne K peut contenir qu'une seule donnée.
Je met le code complet qui peut être plus claire :$
0
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
3 janv. 2017 à 09:52
Sub Export()
   Dim start As Single
start = Timer
   
    With Worksheets("Edit")
        derlig = .Range("K" & Rows.Count).End(xlUp).Row
        Tinfos = .Range("K2:K" & derlig).Value
    End With
    If IsArray(Tinfos) Then LTInf = UBound(Tinfos, 1) Else LTInf = 1 ' Si une seule donnée dans colonne
    'LTInf = UBound(Tinfos, 1)
    Close
    Fichier = "Imprim_" & Environ("username") & "_" & Format(Date, "yyyy-mm-dd") & "_" & Format(Time, "hh-mm-ss") & ".txt"
    Chemin = "C:\00_Export\"
    SepT = ""
    Open Chemin & Fichier For Output As #1
        Print #1, "'<START>"

        For N = 1 To LTInf
         If Tinfos(N, 1) <> "" Then
            For NL = 1 To 1
                If NL = 1 Then
                Print #1, Tinfos(N, 11) '11=> colonne K
                End If
            Next NL
            End If
        Next N
        Print #1, "</END>"
        Print #1, "//"
    Close 1
MsgBox "Traitement Terminé! Durée : " & Timer - start & " secondes"
End Sub
0
Patrice33740 Messages postés 8556 Date d'inscription dimanche 13 juin 2010 Statut Membre Dernière intervention 2 mars 2023 1 775
2 janv. 2017 à 19:13
Bonjour,

Erreur si tu n'as qu'une cellule, essaies :
    If IsArray(Tinfos) Then LTInf = UBound(Tinfos, 1) Else LTInf = 1


1
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
3 janv. 2017 à 09:57
Bonjour Patrice et merci pour ton aide.
J'ai changé le code en fonction de ton conseil et le problème se déplace avec toujours une "incompatibilité de type" sur Tinfos(N, 1)
If Tinfos(N, 1) <> "" Then
0
gbinforme Messages postés 14946 Date d'inscription lundi 18 octobre 2004 Statut Contributeur Dernière intervention 24 juin 2020 4 684
Modifié par gbinforme le 3/01/2017 à 10:31
Bonjour,

Si tu n'as qu'une cellule tu ne peux pas utiliser "Tinfos" en tant que table car ce n'est qu'une variable : il te faut donc une branche spécifique.

Print #1, Tinfos(N, 11) '11=> colonne K

Ceci plantera aussi car tu n'as mis qu'une colonne dans ta table et donc la colonne K est en 1 et non en 11 : tu veux l'utiliser ainsi il te faut mettre 11 colonnes dans ta table.
Tinfos = .Range("A2:K" & derlig).Value

Toujours zen
La perfection est atteinte, non pas lorsqu'il n'y a plus rien à ajouter, mais lorsqu'il n'y a plus rien à retirer.  Antoine de Saint-Exupéry
1
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
3 janv. 2017 à 10:57
Ce que je ne comprend pas c'est que ce code fonctionne parfaitement sur un autre fichier ou l'information est en colonne A...
Je pensais donc l'avoir compris :(
Est-ce que Tinfos me permet bien d'effectuer ma lecture ligne à ligne jusqu'à la dernière non vide?
J'ai effectué une modif et mon export fonctionne sauf dans le cas où la colonne K ne contient qu'une seule donnée (en K2)
Sub Export()
   Dim start As Single
start = Timer
   
    With Worksheets("Edit")
        derlig = .Range("K" & Rows.Count).End(xlUp).Row
        Tinfos = .Range("K2:K" & derlig).Value
    End With
    'If IsArray(Tinfos) Then LTInf = UBound(Tinfos, 1) Else LTInf = 1 ' Si une seule donnée dans colonne
    LTInf = UBound(Tinfos)
    Close
    Fichier = "Imprim_" & Environ("username") & "_" & Format(Date, "yyyy-mm-dd") & "_" & Format(Time, "hh-mm-ss") & ".txt"
    Chemin = "C:\00_Export\"
    SepT = ""
    Open Chemin & Fichier For Output As #1
        Print #1, "'<START>"

        For N = 1 To LTInf
         If Tinfos(N, 1) <> "" Then
            For NL = 1 To 1
                If NL = 1 Then
                Print #1, Tinfos(N, 1) '=> colonne 1 de la plage défini par Tinfos (k2;k)
                End If
            Next NL
            End If
        Next N
        Print #1, "</END>"
        Print #1, "//"
    Close 1
MsgBox "Traitement Terminé! Durée : " & Timer - start & " secondes"
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NaXiLeAn Messages postés 112 Date d'inscription mercredi 27 juillet 2016 Statut Membre Dernière intervention 2 juin 2020 1
3 janv. 2017 à 11:19
MERCI A TOUS
0