IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Commentaires

  1. Avatar de xuorel
    • |
    • permalink
    Bonjour
    quelle différence entre le module xlTools et le module Tools ?
    Je n'ai pas bien saisi la subtilité.
    Merci
  2. Avatar de Pierre Fauconnier
    • |
    • permalink
    Attention qu'avec LAMBDA, les paramètres optionnels doivent être signalés par des ; 🙄🙄🙄

    =DATE.JOURSEMDECALAGE( ; ; )
  3. Avatar de Pierre Fauconnier
    • |
    • permalink
    La formule pour un copier:coller:

    =LAMBDA(_Date;_Jour;_Decalage;LET(_DateCalcul;SI(ISOMITTED(_Date);AUJOURDHUI();_Date);_DateCalcul-JOURSEM(_DateCalcul;10+SI(ISOMITTED(_Jour);1;_Jour))+8+7*SI(ISOMITTED(_Decalage);0;_Decalage)))
  4. Avatar de E KERGRESSE
    • |
    • permalink
    Bonjour Pierre,

    Je viens de mettre en oeuvre ta solution 4, le chemin est directement le fichier qu'on choisit à partir d'une liste de validation.
    C'est suffisamment clair pour qu'un "has been" comme moi peut comprendre. Sans rancune...
  5. Avatar de laurent_ott
    • |
    • permalink
    Citation Envoyé par g.rullier
    Bonjour,

    J'utilise l'ensemble de ton code depuis peu et je te remercie pour la mise à disposition.
    Seulement, je rencontre un problème avec le caractère 244 correspondant au ô.
    En effet, la méthode ChrW présente comme exception CharCode < -32768 ou > 65535 :roll:

    Connais tu un moyen de contourner ?

    Je te remercie pour ton retour.
    Gwen
    Bonjour,
    Il faudrait essayer avec l'API : ConvertUTF8ToString (ou inversement : ConvertStringToUTF8)


    Code VBA : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Private Const CP_UTF8 = 65001
     
    Private Declare PtrSafe Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, _
                                                                         ByVal dwFlags As Long, ByVal lpMultiByteStr As LongPtr, _
                                                                         ByVal cchMultiByte As Long, ByVal lpWideCharStr As LongPtr, _
                                                                         ByVal cchWideChar As Long) As Long
     
    Private Declare PtrSafe Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, _
                                                                         ByVal lpWideCharStr As LongPtr, ByVal cchWideChar As Long, _
                                                                         ByVal lpMultiByteStr As LongPtr, ByVal cbMultiByte As Long, _
                                                                         ByVal lpDefaultChar As Long, ByVal lpUsedDefaultChar As Long) As Long
     
    '------------------------------------------------------------------------------------------------
    Public Function ConvertStringToUTF8(StrInput As String) As String
    '------------------------------------------------------------------------------------------------
    Dim nBytes As Long, abBuffer() As Byte, i As Long
     
    If Len(StrInput) > 0 Then
        ' Get length in bytes *including* terminating null
        nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(StrInput), -1, 0&, 0&, 0&, 0&)
        ' We don't want the terminating null in our byte array, so ask for `nBytes-1` bytes
        ReDim abBuffer(nBytes - 2)  ' NB ReDim with one less byte than you need
        nBytes = WideCharToMultiByte(CP_UTF8, 0&, ByVal StrPtr(StrInput), -1, ByVal VarPtr(abBuffer(0)), nBytes - 1, 0&, 0&)
        ' Génèration d'une chaîne à partir du tableau:
        For i = LBound(abBuffer) To UBound(abBuffer)
            ConvertStringToUTF8 = ConvertStringToUTF8 & Chr(abBuffer(i))
        Next i
    End If
     
    End Function
     
    '------------------------------------------------------------------------------------------------
    Private Function sUTF8ToUni(bySrc() As Byte) As String
    '------------------------------------------------------------------------------------------------
    ' Converts a UTF-8 byte array to a Unicode string
    Dim lBytes As Long, lNC As Long, lRet As Long
     
    lBytes = UBound(bySrc) - LBound(bySrc) + 1
    lNC = lBytes
    sUTF8ToUni = String$(lNC, Chr(0))
    lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(bySrc(LBound(bySrc))), lBytes, StrPtr(sUTF8ToUni), lNC)
    sUTF8ToUni = Left$(sUTF8ToUni, lRet)
     
    End Function
     
    '------------------------------------------------------------------------------------------------
    Public Function ConvertUTF8ToString(UTF8String As String) As String
    '------------------------------------------------------------------------------------------------
    Dim bData() As Byte, sData As String, lSize As Long, i As Long
     
    sData = UTF8String
    lSize = Len(sData)
     
    If lSize > 0 Then
        ReDim bData(0 To lSize - 1)
        For i = 1 To lSize
         bData(i - 1) = Asc(Mid(sData, i, 1))
        Next i
        ' Convert all the data to Unicode
        sData = sUTF8ToUni(bData)
    Else
        sData = ""
    End If
     
    ConvertUTF8ToString = sData
    End Function
    '------------------------------------------------------------------------------------------------

    Bonne programmation.
  6. Avatar de g.rullier
    • |
    • permalink
    Bonjour,

    J'utilise l'ensemble de ton code depuis peu et je te remercie pour la mise à disposition.
    Seulement, je rencontre un problème avec le caractère 244 correspondant au ô.
    En effet, la méthode ChrW présente comme exception CharCode < -32768 ou > 65535

    Connais tu un moyen de contourner ?

    Je te remercie pour ton retour.
    Gwen
  7. Avatar de Baboutz
    • |
    • permalink
    Citation Envoyé par Pierre Fauconnier
    Bonjour Malick,

    C'est bien tardivement que je réponds à ton intervention. J'espère que tu vas bien

    Merci pour tes encouragements qui me donnent envie de continuer à écrire des billets. On a parfois l'impression d'écrire "pour du vent", et il est donc toujours agréable de savoir que le billet sert à quelqu'un.

    Au plaisir de te croiser sur les forums

    Salut Pierre,

    Je suis une personne qui commente rarement mais ça fais plusieurs années que j'apprécie suivre et lire tes billets, j'y cherche souvent les bonnes pratiques à utiliser ! Typiquement, je ne savais pas qu'il était mieux de passer par la plage que feuille + listobject !
    Même si tu en écris moins ces derniers temps, merci pour tout !

    Bonne journée,

    Baboutz
  8. Avatar de Bruno-63
    • |
    • permalink
    Bonjour Pierre,

    N'étant pas un développeur "expert", je tiens d'abord à te remercier pour ta série de 4 billets très pédagogiques sur l'utilisation de chemin relatif dans Power Query.

    Je pense avoir à peu près compris ce que je faisais , mais j'ai un souci avec l'adressage de mon fichier à partir de la formule
    = GAUCHE(CELLULE("nomfichier");CHERCHE("[";CELLULE("nomfichier"))-2)

    Au lieu d'avoir le chemin C:\Users\bcadi\OneDrive\Dossier auquel je m'attendais (et qui fonctionne),
    j'obtiens un chemin "https://entreprise-my.sharepoint.com/personal/bruno_entreprise_com/Documents/Dossier".

    Aurais-tu une idée de comment je peux corriger cela ?

    Merci pour ton aide.
  9. Avatar de Promethee25
    • |
    • permalink
    Bonjour Pierre,

    Avant tout, d''une manière générale, merci pour tous tes écrits de grande qualité.

    Concernant le passage de paramètre(s) de Power Query à un script SQL, il existe à mon sens une alternative encore plus puissante passant par une seconde étape avec Value.NativeQuery:

    • Je ne précise pas la requête dans Sql.Database mais dans Value.NativeQuery
    • Cette fonction permet de laisser une requête SQL en l'état, avec ses paramètres SQL du type @Paramètre. On peut ensuite préciser les valeurs à affecter à chacun des paramètres SQL (en y affectant une constante, une valeur calculée ou un paramètre Power Query, c'est-à-dire n'importe quel code Power Query retournant une valeur scalaire)


    C'est peut-être moins utile avec une procédure stockée mais ça l'est avec un SELECT: cela facilite grandement la maintenance de la requête SQL (typiquement si elle est assurée dans SSMS) et évite également des concaténations à répétition dans le cas où un paramètre est utilisé plusieurs fois dans la requête.

    Exemple:
    https://blog.crossjoin.co.uk/2016/12...-and-power-bi/


    A noter: sur SQL Server (et probablement sur d'autres), il est également possible de passer des tables en paramètre en "trichant" un peu (typiquement envoyer une colonne construite dynamiquement par Power Query et constituée d'éléments destinés à une éventuelle jointure ou un filtre "WHERE ... IN (...)" directement dans la base de données, dans le but de réduire le nombre d'éléments retournés vers Power Query):
    • sur les versions plus anciennes (et bien sûr aussi sur les actuelles), il faut passer une chaîne de caractères en argument concaténant la colonne avec un séparateur donné, puis, dans le script SQL, remplacer ce séparateur par des balises XML et ensuite utiliser la fonction XML.node de SQL Server (il est bien sûr possible d'utiliser les balises XML directement comme séparateur dans la chaîne power query).
    • sur les versions plus récentes, on peut utiliser STRING_SPLIT pour la séparation s'il n'y a qu'une seule colonne.



    Exemple:
    https://expert-only.com/en/t-sql/spl...lit-functions/

    ça donne au final des possibilités très intéressantes.
  10. Avatar de pourtom
    • |
    • permalink
    Depuis le temps que je bosse sur Excel (et que parfois je perds la boule avec les dates et que je cherche à mieux comprendre le sujet), je n'avais jamais trouvé ces infos très précieuses pour comprendre le sujet.
    A compléter éventuellement avec des infos sur les paramètres régionaux? (j'ai parfois l'impression que les paramètres régionaux pris en comptes ne sont pas les mêmes dans Excel et en VBA)?
    Quoiqu'il en soit, merci beaucoup!
  11. Avatar de FC42740
    • |
    • permalink
    Bonjour,

    Merci pour ce tutoriel très facile à utiliser, ça fonctionne super bien.

    J'aurais voulu créer plusieurs cellules contenant une liste déroulante comme dans l'exemple. Le problème étant que pour chaque liste déroulante je dois créer un tableau avec la formule donnée dans le tutoriel.

    Je me demandais s'il était possible d'utiliser la liste déroulante sans passer par une cellule annexe ?
    L'idée serait de rentrer la formule directement dans la source de la validation de données, lorsque j'essaye j'ai un message me disant que la source est reconnue comme erronée et rien ne s'affiche alors dans le menu déroulant.

    Peut-être que ce n'est pas faisable et qu'il faut forcément faire référence à une cellule annexe mais je trouverai ça plus pratique.

    Merci
    Florian
  12. Avatar de Goube
    • |
    • permalink
    Bonsoir Pierre,

    J'ai suivi avec intérêt tes billets sur Power Query, je me demande s'il y aura une suite ?

    Bonne continuation.
    Bien cordialement.
    Goube
  13. Avatar de Birdwing91
    • |
    • permalink
    Bonjour,

    merci pour ces explications.
    Pour être cohérent concernant votre dénomination afin que seules les lignes qui ne sont pas communes sont reprises. J'opterai pour "Interne opposée" plutôt que "Externe opposée"

    Bien à vous.
  14. Avatar de Qwazerty
    • |
    • permalink
    Salut Pierre

    Encore une nouvelle fois merci pour ce partage de connaissance. Je vais devoir utiliser "une gestion de BD" pour un projet et cette fois je vais un peu plus m’intéresse à Power Query (plutôt que d'utiliser des recordset... ).
    L'insertion de la colonne Condition me semble prometteuse, c'est une méthode que je trouve élégante et intéressante pour faciliter le tri y compris avec du paramétrage plus complexe.

    J'espère que tu trouveras le temps d'écrire la suite

    PS:
    Sur le cours n° 2, je pense qu'il manque un mot ici
    Intégration d'une plage nommée

    L'intégration d'une plage nommée est un peu plus délicate,
    Je te souhaite une bonne continuation et une bonne journée
    Qwaz
  15. Avatar de Malick
    • |
    • permalink
    Salut Pierre,

    L'exemple porte sur un fichier, mais s'il s'agit d'un dossier contenant plusieurs fichiers à importer, comment procéder ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Folder.Files("C:\Users\Malick\Documents\Perso\TimeSheets\2022\Janvier2022")
    Avec ceci, cela fonctionne bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    = Folder.Files(CheminDossierImport)
    Est-ce la bonne démarche ?

    Merci
  16. Avatar de curt
    • |
    • permalink
    Bonjour Pierre,

    au hasard d'une recherche, je suis tomber sur cet article.... qui résout pleinement mon besoin.
    C'est nickel. On a a présent la réponse à une question qu'on n'a pas encore posé.... c'est noël avant noël
    J'en profite pour te souhaiter un excellent noël et de très bonnes fêtes de fin d'année.
    Curt
  17. Avatar de Chti160
    • |
    • permalink
    Bonjour Pierre ,
    J'espère que tu vas bien ?
    Petite Question : y'aura-t-il de ci de là un Fichier exemple qui permettrait de passé de la théorie à la manipulation .
    Cela depuis un Fichier récapitulatifs des éléments étudiés.
    Bonne fin de Journée
    Merci encore de ce partage
    Cordialement
    Jean marie
  18. Avatar de Pierre Fauconnier
    • |
    • permalink
    Bonjour Philippe,

    Merci pour ton message et ton appréciation.

    Nous réfléchissons actuellement à la meilleure manière de procéder:
    • Tag spécifique Power Query sur une discussion;
    • Sous-forum spécialisé pour regrouper toutes les questions Power Query.


    J'espère pouvoir rapidement annoncer la mise en place d'une solution permettant de regrouper et de retrouver rapidement tout ce qui concerne Power Query, Power Pivot et, dans une moindre mesure, Power View.

    Bonne semaine et bonne continuation avec Excel et Power Query
  19. Avatar de Phil333250
    • |
    • permalink
    Bonjour Pierre

    Merci pour ce petit billet qui permet de commencer par le début.
    C'est clair, précis et concis.
    J'ai commencé un petit peu sur PQ grâce à l'aide des pro du forum (que je remercie énormément) en partant de problèmes que j'avais sur certains fichiers.
    La difficulté que je rencontre c'est que je n'ai pas de lecture de tous les possibles donc il m'est difficile de me projeter sur PQ.
    J'avance donc par tâtonnement.
    De plus il est difficile de trouver des discussions dédiées à PQ. En effet on trouve des "solutions" cachées dans des discussions classiques.
    Par exemple, j'ai trouvé ton billet dans la discussion "Excel avec base externe". Si je n'ouvre pas cette discussion je passe à coté de beaucoup de choses.
    Peut être qu'en rajoutant un indicateur, cela permettrait d'identifier des discussions avec des réponses en lien avec PQ.
    Philippe
  20. Avatar de Pierre Fauconnier
    • |
    • permalink
    Salut Igloobel,

    Je pense que Power Query devient incontournable pour qui doit traiter et analyser des données avec Excel. Nul doute que si tu t'y mets, tu risques vite de trouver de l'intérêt à l'outil...

    Au passage, merci pour ton appréciation
Page 1 sur 10 12345 ... DernièreDernière