Forums XLPages

Tous les messages (myDearFriend!)

1 2 3 4 ... 149 »
Re: Ouvrir une page web et récupérer les données d'un tableau
#1
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 07-03-2023 21h08

Bonsoir Icedarts, le Forum,

 

En modifiant une partie du code précèdent comme suit (en rouge), ça devrait suffire pour répondre à cette nouvelle demande :

       'Complétude du tableau
        With Sheets("Données")
            For L = 1 To NbLignTab
                For C = 0 To NbColTab
                    With .Cells(Lmax + L + 1, C + 1)
                        .Value = TabDoc.Rows(L).Cells(C).innerText
                        If C = NbColTab Then
                            .Offset(0, 1).Value = vTabLiens(Lnk, 2)
                        End If
                    End With
                Next C
            Next L
        End With

En pièce jointe, le code en action.

 

Bien cordialement,

Pièce jointe:
xlsm PourIcedarts2.xlsm   [ Taille: 23.35 Ko - Téléchargements: 123 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: VBA Graphique Bulle
#2
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 04-03-2023 20h59

Bonsoir verdanto,

 

Sans doute le sujet n'est-il plus d'actualité...

 

Compte tenu de la complexité du code recopié ici (origine allemande ?) et sans fichier joint pour aider à éclaircir un peu le problème, je n'avais d'abord pas l'intention de répondre à ta demande à vrai dire...

 

Mais juste au cas où (et avec un peu de chance !), je dirai que la solution se trouve dans ce morceau de code :

 

' Anzahl Zeitperioden T

  AnzahlT = 2
  'WorksheetFunction.CountIf(Sheets("SAISIE DES RISQUES").Range("F4:Z4"), "*SM*")
  activeCol = 4 + (AnzahlT * 2)

Ici, la variable "activeCol" prend une valeur de 4 + (2 * 2) = 8

(ce qui correspond en théorie à la colonne H, 8ème colonne)

 

Je pense qu'en affectant une valeur de 12 (soit colonne L), la suite du code devrait pouvoir répondre à ton besoin. ATTENTION, cependant : une telle modification impliquera forcément d'autres répercutions ailleurs dans ton code !!!

 

Te souhaitant bonne chance,

Bien cordialement,

 

 


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Ouvrir une page web et récupérer les données d'un tableau
#3
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 04-03-2023 20h35

Bonsoir Icedarts, le Forum,

 

Tu trouveras en pièce-jointe sans doute une façon de faire :

 

DANS UN MODULE DE CODE STANDARD (ex : Module1)

Option Explicit

Sub RecupDatas()
' myDearFriend! - www.mdf-xlpages.com
' Mars 2023

' Nécessite une référence à "Microsoft HTML Object Library"
Dim vTabLiens As Variant
Dim iDoc As New MSHTML.HTMLDocument
Dim TabDoc As HTMLTable
Dim Lnk As Long, NbLignTab As Long, Lmax As Long, L As Long
Dim NbColTab As Byte, C As Byte
    'Liste des liens
    vTabLiens = Sheets("Liens").Cells(1, 1).CurrentRegion.Value
    'Pour chaque lien
    For Lnk = 1 To UBound(vTabLiens, 1)
        'Récup table datas
        With CreateObject("MSXML2.XMLHTTP")
            .Open "GET", vTabLiens(Lnk, 1), False
            .send
            iDoc.body.innerHTML = .responseText
        End With
        Set TabDoc = iDoc.getElementById("tableSort")
        
        NbLignTab = TabDoc.Rows.Length - 1
        NbColTab = TabDoc.Rows(0).Cells.Length - 1
        
        'Complétude du tableau
        With Sheets("Données")
            For L = 1 To NbLignTab
                For C = 0 To NbColTab
                    .Cells(Lmax + L + 1, C + 1).Value = TabDoc.Rows(L).Cells(C).innerText
                Next C
            Next L
        End With
        Lmax = Lmax + NbLignTab
    Next Lnk
    
    MsgBox "Récup terminée !"
    
    Set TabDoc = Nothing
    Set iDoc = Nothing
End Sub

Nb : tu n'as pas besoin de faire usage d'un webBrowser pour le fonctionnement de ce code.

 

En espérant t'avoir aidé.

 

Bien cordialement,

 

Pièce jointe:
xlsm PourIcedarts.xlsm   [ Taille: 22.26 Ko - Téléchargements: 131 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Aide sur userform
#4
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 13-02-2023 15h19

Bonjour tactic6, le Forum,

 

Je n'ai pas tout repris dans ton code (et je ne le ferai pas, hein ?! wink), mais tu trouveras en pièce jointe des façons de t'en sortir je pense...

 

Citation :

tactic6 a écrit :

Sur la feuille SAISIE

1 Dblclick sur une cellule entre B15: B52 déclenche l'USF

apres recherche je voudrais que les infos sur l'usf soit recopiée sur la feuille SAISIE

 

Concernant le lancement du USF par double-clic, ton code était correct (mais ton USF se nomme "Recherche_Pièces", aussi l'instruction "Pièces.Show" méritait aussi une modification du nom correspondant pour fonctionner)

 

Ensuite, je n'ai pas compris pourquoi ce choix de colonne H de la FEUIL1 pour la source de données de la ComboBox des Quantités... Voir mon interprétation de ce point dans le fichier.

 

Concernant la recopie des données dans la feuille SAISIE, tu y étais presque! Il ne te manquait que la ligne ci-dessous en rouge pour déposer les données au bon endroit :

Private Sub BtnImporter_Click()
Dim x$
Dim Lig As Long
    x = "SAISIE"
    
    With Sheets(x)
        Lig = .Cells(52, 2).End(xlUp).Row + 1       ' = 1ère ligne libre dans la facture
        .Cells(Lig, 2).Value = TextBox1.Value
        .Cells(Lig, 3).Value = TextBox2.Value
        .Cells(Lig, 11).Value = TextBox3.Value * 1
        .Cells(Lig, 9).Value = TextBox4.Value * 1
        .Cells(Lig, 8).Value = ComboQuantite.Value * 1
        .Cells(Lig, 10).Value = (ComboQuantite.Value * 1) * (TextBox4.Value * 1)
    End With
    Unload Me
End Sub

 

Citation :

tactic6 a écrit :

J'aimerais aussi que les colonnes de ma ListBox soient remaniées afin que les noms des colonnes soient alignées avec les colonnes

 

Tu as 2 solutions pour ce faire :

  1.  Tu positionnes les labels d'entête à la main dans ton USF (c'est ce qu'il y a de plus simple à faire, et c'est la solution que je te conseille...)
  2.  Tu peux intégrer directement les ENTETES de colonnes sur une ligne figée dans la ListBox elle-même en faisant comme ceci :
            With Feuil1
                Set Plage = .Range("A2:D" & .Cells(.Rows.Count, 2).End(xlUp).Row)
                ListeArticles.ColumnHeads = True
                ListeArticles.RowSource = "'" & .Name & "'!" & Plage.Address
            End With
    
    MAIS ATTENTION ! Si ça te permet d'avoir les titres bien alignés proprement dans les colonnes, en contrepartie, ça interdit l'utilisation de certaines méthodes ou propriétés de la ListBox classique dans la suite de ton code...
    Par exemple, impossible ensuite d'utiliser la méthode "ListeArticles.Clear" notamment!

 

Pour conclure, je te conseille très fortement de renommer les objets de tes formulaires (comme je l'ai fait pour certains ici) afin de clarifier un peu ce que tu fais... Par exemple, "BtnImporter", c'est quand même un peu plus clair que "CommandButton3" ou autre...

 

Je te laisse observer le code en pièce jointe, en espérant que ça t'aidera un peu.

 

Par ailleurs, tu peux aussi essayer de t'inspirer d'un autre projet similaire que j'avais déjà remanié  un peu pour l'ami Antonio dans CE FIL DE DISCUSSIONS (voir le fichier joint à mon post en fin de discussion).

 

Je te souhaite bon courage pour la suite.

Bien cordialement,

Pièce jointe:
zip PourTactic6 -UserformRecherche1.zip   [ Taille: 165.60 Ko - Téléchargements: 117 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Supprimer les espaces d'une cellule
#5
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 27-01-2023 20h48

Re,

 

Si le problème venait de la boucle mal placée, il n'y aurait aucune raison pour que l'erreur apparaisse une trentaine de lignes plus haut

 

Je ne vais pas mettre en doute ta façon de me présenter les choses, mais es-tu vraiment sûr que la ligne surlignée en jaune dans ton image précédente est réellement la ligne mise en évidence automatiquement par VBA lorsque l'erreur survient ?

 

Perso, j'ai un doute... car ton ErrorHandler est normalement fait - justement - pour empêcher les erreurs d'interrompre le code. Et c'est plutôt un handicap dans ta situation, car ici, on souhaiterais plutôt voir où le code plante !

 

Tu trouveras ci-joint, ton classeur d'origine "DiffClasseur.xlsm" dans lequel j'ai recopié tout le nouveau code que tu viens de fournir plus haut (et pour moi, la boucle est au bon endroit).

Pour simplifier, j'ai seulement désactivé toute la partie du code concernant le traitement XML qui n'a visiblement rien à voir avec le problème en cours d'analyse ici.

 

Je te laisse tester et voir... mais chez moi, ça fonctionne très bien. En traitant l'autre fichier que tu avais fourni "MatrixDiag.xlsm", je n'ai aucune erreur et le résultat me semble celui attendu.

 

Je te souhaite bon courage pour la suite.

Bien cordialement,

 

Pièce jointe:
xlsm PourRazmo_DiffClasseur.xlsm   [ Taille: 32.29 Ko - Téléchargements: 109 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Supprimer les espaces d'une cellule
#6
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 27-01-2023 18h17

Bonjour Razmo, le Forum,

 

En principe, lorsque qu'une erreur apparait, la ligne de code générant cette erreur bloquante est surlignée en jaune dans l'éditeur VBA. A quel endroit le code s'est-il arrêté et quelle est la ligne concernée ?

Selon moi, l'erreur n'est pas liée aux lignes que tu as écrite ici...

 

Pour tenter d'éclaircir tout ça, je résume la situation :

  1.  Tu as déclaré correctement les objets ranges suivants :
    Dim MaCellule As Range, MaPlage As Range
  2.  L'extrait de code ressemble à ceci :
    'Copy and paste column Matrix to Diff
    'Copy that cell values without comments
    MATRIX_LABEL_H_Datas.Copy 'Destination:=DIFF_LABEL_H.Offset(1, 0)
    DIFF_LABEL_H.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
    MATRIX_DETECT_H_Datas.Copy 'Destination:=DIFF_DETECT_H.Offset(1, 0)
    DIFF_DETECT_H.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
    MATRIX_STATE_H_Datas.Copy 'Destination:=DIFF_STATE_H.Offset(1, 0)
    DIFF_STATE_H.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
    MATRIX_DTC_H_Datas.Copy 'Destination:=DIFF_DTC_H.Offset(1, 0)
    DIFF_DTC_H.Offset(1, 0).PasteSpecial Paste:=xlPasteValues
    
    
    Set MaPlage = DIFF_WS.UsedRange.Columns(DIFF_DTC_H.Column)
    Set MaCellule = DIFF_DTC_H.Offset(1, 0)
    
    For Each MaCellule In MaPlage.Cells
        'Étape 5: supprimer les espaces
        MaCellule.Value = Trim(MaCellule.Value)
    Next MaCellule
    Remarque : les expressions barrées sont à supprimer car inutiles. Par ailleurs, l'objet MaCellule est défini directement dans la boucle For Each et n'a donc pas lieu d'être défini par un Set en amont. 
     

Mais, selon moi, ces expressions inutiles ne sont pas à l'origine de ton message d'erreur... Pour moi, ce code doit fonctionner correctement et ton erreur est certainement ailleurs...

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Supprimer les espaces d'une cellule
#7
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 26-01-2023 18h04

Bonjour Razmo, ,le Forum,

 

Encore une fois, tu y étais presque ! wink

 

Tu as visiblement effectué des recherches et tester certaines solutions par toi-même, et moi j'apprécie tes efforts, ça donne envie de te donner un coup de main.

 

Ta réflexion est tout à fait bonne au final :
 

  • C'est bien la fonction Trim() qu'il faut privilégier car, à elle seule, elle réalise ce que fait LTrim() et RTrim() réunies.
  • Il faut bien utiliser une boucle sur chaque cellule car cette fonction Trim() ne peut pas traiter une plage de cellules entière.

 

Quant à la définition de "MaPlage", je te propose ceci (en tenant compte du code présenté dans tes précédents fils de discussion) :

Set MaPlage = DIFF_WS.UsedRange.Columns(DIFF_DTC_H.Column)

For Each MaCellule In MaPlage.Cells
    'Étape 5: supprimer les espaces
    MaCellule.Value = Trim(MaCellule.Value)
Next MaCellule

Nb: j'ai supprimé ton test sur cellule vide IsEmpty() car il me semble inutile ici : la fonction Trim() tolère les chaines vides sans générer d'erreur.

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Enlever les notes d'une cellule et valeur ordre croissant
#8
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 24-01-2023 19h14

Bonjour Razmo, le Forum,

 

Tout d'abord, afin que les visiteurs intéressés puissent comprendre, le présent sujet est la suite de cette précédente DISCUSSION.

 

  • Concernant le problème de Commentaires de cellule inopportuns

Tu as plusieurs solutions pour régler cette situation et j'en vois deux particulièrement :
 

- La première serait d'échanger ta ligne de code :

MATRIX_DTC_H_Datas.Copy Destination:=DIFF_DTC_H.Offset(1, 0)

Par les 2 suivantes :

MATRIX_DTC_H_Datas.Copy
DIFF_DTC_H.Offset(1, 0).PasteSpecial Paste:=xlPasteValues

Ça permet de ne recopier QUE les valeurs de cellules.

 

 

- La deuxième serait de laisser ton code tel quel, et supprimer les commentaires après collage 

en ajoutant simplement la ligne suivante :

DIFF_DTC_H.EntireColumn.ClearComments

 

  • Concernant le problème de Tri de tes lignes (entières) en fonction de la colonne 1 

Tu y étais presque !

​Tu devrais pouvoir insérer ceci, en fin de procédure :

With DIFF_WS.UsedRange.Offset(2, 0)
    .Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlNo, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
End With

J'espère que ça pourra t'aider.

Bien cordialement,

Edité par myDearFriend! le 24/01/2023 19:30:19

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Transfert de données
#9
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 08-01-2023 12h54

Bonjour tactic6, le Forum,

 

On en apprend tous les jours... Et moi, je découvre aujourd'hui cette limitation VBA que je n'avais pour ma part jamais rencontré encore ! surprise

Donc, tout d'abord merci à toi tactic6 pour cette découverte, c'est toujours intéressant à savoir.

 

Du coup, une petite recherche dans la doc Microsoft et tu tomberas sur cet article :

Nombre de continuités de ligne trop élevé

Le nombre de lignes que vous pouvez joindre avec des caractères de continuation de ligne est limité. Cause et solution de ce problème :

  • Votre code possède plus de 25 lignes physiques jointes avec des caractères de continuation de ligne ou plus de 24 caractères de continuation de ligne consécutifs sur une seule ligne. Allongez physiquement les lignes existantes pour réduire le nombre de caractères de continuation de ligne ou décomposez la construction en plusieurs instructions.

 

Pour rappel, utiliser des caractères de continuité de ligne n'est pas une obligation, c'est tout simplement une façon plus élégante de présenter du code afin qu'il soit plus facile à lire et à comprendre.

Tu devrais donc pouvoir prolonger tes lignes pour contourner cette limitation dans l'éditeur.

 

De mémoire (à vérifier) je crois que l'éditeur VBE est limité à 1024 caractères sur une même ligne.

 

Bien cordialement,


Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

Re: Choisir la destination Dble click
#10
Webmestre

Inscription: 18/05/2006
De Saône-et-Loire (71)

Messages: 1539

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 07-01-2023 12h40

Bonjour tactic6, le Forum,

 

En pièce jointe, une façon de faire (parmi d'autres) :

 

DANS LE MODULE DE CODE DE LA FEUILLE

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    'recherche de la cellule dans la colonne A
    If Target.Column = 1 Then
        Cancel = True
        With UserForm1
            'On passe la valeur directement en propriété Tag du userform
            .Tag = Target.Value
            .Show
        End With
    End If
End Sub

DANS LE MODULE DE CODE DU USERFORM

Option Explicit

Private Sub CommandButton1_Click()
    CopierCodeClient "SAISIE"
End Sub

Private Sub CommandButton2_Click()
    CopierCodeClient "PAGE2"
End Sub

Private Sub CopierCodeClient(shName As String)
    With Sheets(shName)
        'On récupère la valeur en propriété Tag du userform
        .Range("C12").Value = Me.Tag
        .Activate
    End With
    Unload Me
End Sub

Je me sers de la propriété Tag du Userform comme d'une mémoire fourre-tout ! Tu peux l'utiliser pour mémoriser dedans n'importe quelle chaîne de caractères (String). C'est très pratique et ça évite l'usage de variables publiques pour faire passer des valeurs d'un module private à un autre. Moi, j'en fais usage très souvent wink.

 

Bien sûr, tu aurais pu aussi y stocker l'adresse de la cellule source, mais pour le coup, je pense que stocker directement sa valeur était plus simple et efficient.

 

Nb : en passant... les déclarations Dim des variables ça se fait plutôt en début de procédure, et non au milieu.

 

En espérant t'avoir aidé.

Bien cordialement,

Pièce jointe:
xlsm PourTactic6_USF.xlsm   [ Taille: 21.49 Ko - Téléchargements: 96 ]

Didier_mDF
Image redimensionnée
Le Webmaster

La réponse vous satisfait ? Merci de revenir solder le sujet en [résolu], voir ce lien
Hors Ligne
Rapport   Haut 

1 2 3 4 ... 149 »