Forums XLPages

Tous les messages (myDearFriend!)

« 1 2 3 4 5 ... 149 »
Re: Effacer le contenu de la feuille Excel
#11
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 : 05-01-2023 17h21

Bonjour Razmo,

 

L'utilisation de cette simple ligne de code dans ta macro (fichier DiffClasseur.xlsm) devrait répondre à ton besoin :

Sheets("Diff").UsedRange.Offset(2, 0).Clear

Attention, cette ligne de code agit immédiatement et effacera d'un coup toutes les données que tu te donnes tant de mal à récupérer (sur traitement XML)... A toi de voir à quel endroit exact tu veux l'utiliser, si tu veux quand même pouvoir exploiter ces données avant de les effacer indecision.

 

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
#12
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 : 05-01-2023 13h38

Bonjour tactic6, le Forum,

 

Tout dépend de comment tu souhaites présenter cette option à l'utilisateur...

J'imagine que le mieux serait de présenter un petit Userform avec le choix de feuille destination à prendre en compte pour cette copie de valeur...

 

Cela dit, j'ai fait au plus simple et au plus court, et tu peux sans doute utiliser quelque chose comme ça (voir pièce jointe) :

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Excel.Range, Cancel As Boolean)
Dim Rep As Integer
Cancel = True
    If Target.Column = 1 Then 'double click dans la 1ère colonne
        Rep = MsgBox("DESTINATION du Code Client ?" _
            & vbLf & vbLf & "- OUI = feuille 'SAISIE' (par défaut)" _
            & vbLf & "- NON = feuille 'PAGE2'", vbYesNoCancel + vbQuestion, "www.mDF-XLpages.com")
            
        If Rep = vbCancel Then Exit Sub
        With Sheets(Choose(Rep - 5, "SAISIE", "PAGE2"))
            .Cells(12, 3) = Target
            .Select
        End With
        MsgBox "Code Client transferé !"
    End If
End Sub

Bien cordialement,

Pièce jointe:
xlsm PourTactic6.xlsm   [ Taille: 19.36 Ko - Téléchargements: 93 ]

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: Userform TVA
#13
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-12-2022 12h58

Bonjour tactic6, le forum,

 

Chez moi, ce formulaire semble fonctionner correctement. Aucune erreur particulière.

 

  • Voir éventuellement si tu n'as pas une bibliothèque marquée "[Manquante]" depuis l'éditeur VBE / Outils / Références...

 

  • Sinon, voir peut-être aussi du côté du séparateur décimal dans le système :

- paramètres Excel Options / Options avancées / la rubrique "Utiliser les séparateurs système"

- ou éventuellement, paramètres de langue Windows et items en rapport avec le séparateur décimal appliqué (en théorie, c'est la virgule en France et le point pour l'US)

 

Pas d'autres idées pour ma part...

 

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: Copier coller colonnes d'un fichier à un autre
#14
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 : 23-12-2022 20h24

Citation :

Razmo a écrit :

Pour le reste, ton explication etait très comprehensible je te remercie pour ça, juste je comprends pas très bien la partie With/end With que t'as mis.

 

Un petit tour dans l'aide VBA Microsoft sur l'instruction With (ou plus exactement sur le bloc d'instructions With / End With) :

 

L’instruction With vous permet d’exécuter une série d’instructions sur un objet spécifié sans requalifier le nom de l’objet. Par exemple, pour modifier plusieurs propriétés sur un même objet, placez les instructions d’affectation de propriétés dans la structure de contrôle With et faites référence une fois à l’objet, au lieu d’y faire référence à chaque affectation de propriété.

 

Autrement dit, si je prends par exemple ton code :

'Define variables for Diff tab
Set DIFF_DETECT_H = DIFF_WS.Range("A2").EntireRow.Find("Detection Class")
Set DIFF_LABEL_H = DIFF_WS.Range("A2").EntireRow.Find("Supplier Label")
Set DIFF_DTC_H = DIFF_WS.Range("A2").EntireRow.Find("DTC code")
Set DIFF_STATE_H = DIFF_WS.Range("A2").EntireRow.Find("Activation state")

Je peux l'alléger un peu et surtout le rendre plus facile à lire en faisant :

'Define variables for Diff tab
With DIFF_WS.Range("A2").EntireRow
    Set DIFF_DETECT_H = .Find("Detection Class")
    Set DIFF_LABEL_H = .Find("Supplier Label")
    Set DIFF_DTC_H = .Find("DTC code")
    Set DIFF_STATE_H = .Find("Activation state")
End With

C'est exactement la même chose, mais beaucoup plus digeste à la lecture et compréhension du code.

 

L'expression

DIFF_WS.Range("A2").EntireRow"

représente un objet de type Range (c'est la ligne entière qui contient la cellule A2). Tu n'es donc pas obligé de l'écrire 4 fois de suite grâce à un bloc With / End With.

 

Prend bien note de la présence du "." (point) devant chaque méthode Find ci-dessus. C'est ce point qui fait le lien avec l'objet en With.

 

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: Copier coller colonnes d'un fichier à un autre
#15
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 : 23-12-2022 15h12

Bonjour Razmo, bienvenu sur XLpages Content(e)

 

Tu trouveras en pièce jointe une tentative de réponse à ta demande, sachant que je ne me suis préoccupé que de la partie du code dont tu parles...

 

1/ A mon avis, il y a visiblement une grosse confusion dans ton code entre les "objets" et les noms que tu leur donnes. ... Pas très simple à expliquer, mais je tente ma chance :

 

Par exemple, dans cette expression : 

Set MATRIX_WB = Workbooks.Open(Filename:=MATRIX_FILE, ReadOnly:=False)

MATRIX_WB est un objet (d'où la nécessité de l'instruction "Set" pour lui attribuer un contenu)

MATRIX_FILE est une variable chaine de caractère.

 

Si (plus loin dans ton code) tu écris quelque chose comme ça :

Workbooks("MATRIX_WB")
Ca ne peut plus avoir de signification pour VBA (car là, tu essaies de faire référence à un Classeur qui se nommerait textuellement "MATRIX_WB" et non au classeur lui-même !).
 

Par exemple, pour fermer le dit classeur, tu ferais simplement : MATRIX_WB.Close (et non pas Workbooks("MATRIX_WB").Close)

 

2/ Pour info, pour les déclarations de variables en VBA, lorsque tu écris :

Dim MATRIX_LABEL_H, MATRIX_DETECT_H, MATRIX_DTC_H As Range
 

Seul "MATRIX_DTC_H" est déclaré comme Range. Les 2 autres sont considérés comme Variant par VBA. Il faut obligatoirement indiquer le type de variable pour CHAQUE élément, même s'ils sont sur une même ligne Dim (c'est en particulier, une différence entre VB et VBA sauf erreur). En l'absence de Type, le code considère qu'il s'agit de Variant.

 

Par ailleurs, je pense sincèrement que nommer une variable "D7" (voir ton code) et en tant que Range qui plus est, ce n'est pas forcément un bonne idée (ça ressemblerait plus à une simple référence de cellule, mais c'est juste un point de vue personnel).

 

3/ En fonction de ce que j'ai compris de ton objectif, voici la partie du code que je te propose dans la pièce jointe :

 

En déclaration supplémentaire :

Dim MATRIX_LABEL_H_Datas As Range, MATRIX_DETECT_H_Datas As Range, MATRIX_STATE_H_Datas As Range, MATRIX_DTC_H_Datas As Range

Dim nbLignDatas&
Puis ...
...
...
...
'Set the header for every used column of the matrix
With MATRIX_WS
    Set MATRIX_LABEL_H = .Range("A6").EntireRow.Find("Supplier Label")
    Set MATRIX_DETECT_H = .Range("A6").EntireRow.Find("Detection Class")
    Set MATRIX_STATE_H = .Range("A6").EntireRow.Find("State of the activation of the strategy")
    Set MATRIX_DTC_H = .Range("A6").EntireRow.Find("Data Trouble Code (DTC)")
    
    'set Datas range for these columns
    nbLignDatas = .Cells(.Rows.Count, MATRIX_LABEL_H.Column).End(xlUp).Row - 6          '(car entête en ligne 6)
    Set MATRIX_LABEL_H_Datas = MATRIX_LABEL_H.Resize(nbLignDatas, 1).Offset(1, 0)
    nbLignDatas = .Cells(.Rows.Count, MATRIX_DETECT_H.Column).End(xlUp).Row - 6
    Set MATRIX_DETECT_H_Datas = MATRIX_DETECT_H.Resize(nbLignDatas, 1).Offset(1, 0)
    nbLignDatas = .Cells(.Rows.Count, MATRIX_STATE_H.Column).End(xlUp).Row - 6
    Set MATRIX_STATE_H_Datas = MATRIX_STATE_H.Resize(nbLignDatas, 1).Offset(1, 0)
    nbLignDatas = .Cells(.Rows.Count, MATRIX_DTC_H.Column).End(xlUp).Row - 6
    Set MATRIX_DTC_H_Datas = MATRIX_DTC_H.Resize(nbLignDatas, 1).Offset(1, 0)
End With

'Define variables for Diff tab
Set DIFF_DETECT_H = DIFF_WS.Range("A2").EntireRow.Find("Detection Class")
Set DIFF_LABEL_H = DIFF_WS.Range("A2").EntireRow.Find("Supplier Label")
Set DIFF_DTC_H = DIFF_WS.Range("A2").EntireRow.Find("DTC code")
Set DIFF_STATE_H = DIFF_WS.Range("A2").EntireRow.Find("Activation state")

'Copy and paste column Matrix to Diff
MATRIX_LABEL_H_Datas.Copy Destination:=DIFF_LABEL_H.Offset(1, 0)
MATRIX_DETECT_H_Datas.Copy Destination:=DIFF_DETECT_H.Offset(1, 0)
MATRIX_STATE_H_Datas.Copy Destination:=DIFF_STATE_H.Offset(1, 0)
MATRIX_DTC_H_Datas.Copy Destination:=DIFF_DTC_H.Offset(1, 0)
 

 

En espérant t'avoir donné la bonne piste à suivre...

 

Bien cordialement,

 

 

Pièce jointe:
xlsm PourRazmo - DiffClasseur.xlsm   [ Taille: 46.17 Ko - Téléchargements: 84 ]
Edité par myDearFriend! le 23/12/2022 20:01:11

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: Majuscule 1er mot
#16
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-12-2022 19h56

Bonsoir tactic6, le Forum,

Tu devrais pouvoir utiliser quelque chose comme ça, peut-être :

Sub MajusculePremiereLettre_Et_MinusculesPourLeReste()
Dim myRange As Range, R As Range

    Set myRange = [c15:c52]
   
    For Each R In myRange
        R.Value = UCase(Left(R.Value, 1)) & LCase(Mid(R.Value, 2))
    Next R

    'MsgBox ("Fin de traitement")
End Sub
  

Nb : je me suis permis de renommer ta procédure car, visiblement, tu ne fais pas qu'imposer la première lettre en majuscule, tu imposes également tout le reste en minuscules (et ça fait une nuance qui peut avoir son importance).

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: une double recherche
#17
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-12-2022 13h24

Bonjour tactic6, le Forum,

 

Si j'ai bien interprété ta demande (pas sûr !), tu trouveras en pièce jointe peut-être une solution.

(un peu plus d'explications aurait été bienvenu...)

 

J'ai donc un peu modifié ton Userform et voici principalement le code que j'ai adapté :

'ICI C'est le Moteur de Recherche
Private Sub CommandButton1_Click()
Dim cTab As Range, cTabLign As Range
Dim tablo() As String
Dim Firstaddress As String, T1 As String, T2 As String
Dim i As Integer, x As Integer
Dim S As Byte

    T1 = Me.TextBox1
    T2 = Me.TextBox2
    If T1 = "" Then Exit Sub
    
    For S = 1 To Worksheets.Count
        With Sheets(S).UsedRange
            'Recherche 1ère expression dans la feuille
            Set cTab = .Find(T1, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns)
            If Not cTab Is Nothing Then
                Firstaddress = cTab.Address
                Do
                    'Présence 2ème expression (si non vide) sur la même ligne  ?
                    If T2 <> "" Then
                        Set cTabLign = cTab.EntireRow.Find(T2, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows)
                    Else
                        Set cTabLign = cTab
                    End If
                    '
                    If Not cTabLign Is Nothing Then
                        ReDim Preserve tablo(8, i)
                        For x = 1 To 6
                            tablo(x - 1, i) = cTab.Offset(0, x - cTab.Column).Text
                        Next x
                        tablo(6, i) = S
                        tablo(7, i) = cTab.Row
                        i = i + 1
                    End If
                    Set cTab = .Find(T1, After:=cTab, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByColumns)
                Loop While Not cTab Is Nothing And cTab.Address <> Firstaddress
            End If
        End With
    Next S
    
    If i = 0 Then
        MsgBox "Aucune correspondance pour le(s) critère(s) saisi(s) !" & vbCrLf & "Faites un essai sur une partie d'expression", vbCritical, Sign
        Exit Sub
    End If
    
    Me.ListBox1.Column() = tablo()
End Sub

'ICI C'est la sélection au Double Click & Sortie du UserForm
Private Sub ListBox1_dblClick(ByVal Cancel As MSForms.ReturnBoolean)
    With ListBox1
        Application.Goto Sheets(Val(.Column(6))).Cells(Val(.Column(7)), 1)
    End With
    Unload Me
End Sub

En espérant que ça puisse être une piste à suivre pour toi.

Bien cordialement,

Pièce jointe:
xlsm PourTactic6.xlsm   [ Taille: 94.88 Ko - Téléchargements: 89 ]

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: Tableau croisé dynamique
#18
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-10-2022 23h24

Bonsoir slo777, le Forum,

 

Tout d'abord, je n'ai rien contre OpenOffice, mais le sous-titre du présent site c'est "Mon Univers Excel" et c'est donc bien du tableur de Microsoft dont on parle ici. D'ailleurs, ici, beaucoup de sujets traitent de VBA... et VBA, c'est uniquement sur le tableur Microsoft Excel que tu le retrouveras (sauf si tu utilises exclusivement une version Web d'Excel, car VBA ne fonctionne pas dans un navigateur internet)

 

Ensuite, comme je te l'indiquais dans mon précédent post :

Citation :

myDearFriend! a écrit :

Un classeur en pièce jointe comprenant un extrait de données suffisantes ainsi qu'une représentation simple de la synthèse que tu souhaites obtenir, aiderait sans doute ceux qui voudraient te venir en aide.

 

Je parlais évidemment d'un classeur Excel et pour le joindre, il suffit d'appliquer à la lettre ce qui est expliqué dans CE LIEN. Des éléments fournis sous forme d'images sont inexploitables pour nous.

 

Par ailleurs, je pense qu'il va falloir que tu détailles un peu plus cette histoire de pourcentage... Personnellement, je n'ai pas compris (% de quoi ? Et par rapport à quoi ? Ce n'est pas clair selon moi frown).

 

Au final, les TCD sont-ils adaptés ? J'en doute, mais comme je te l'ai dit, ce n'est pas ma spécialité et il reste fort possible qu'un expert TCD puisse nous démontrer le contraire.

Peut-être aussi que de simples formules Excel pourraient même répondre à ton besoin....

 

Ma spécialité à moi, ça reste VBA avec lequel tout me semble "presque" possible, pour autant que la base soit bien conçue, bien alimentée et surtout, que la demande soit véritablement claire. Avec VBA, on peut reproduire automatiquement ce qu'on ferait à la main... Mais pour ça, il faut être en capacité d'expliquer clairement ce qui est fait manuellement (VBA c'est de l'automatisme, pas de l'Intelligence Artificielle, hein ?! wink).

 

Sache aussi que l'objet du forum ici, c'est d'abord la pédagogie et le partage de connaissances. Le but n'est pas forcément de fournir un outil clé en main aux demandes, mais d'aider l'interlocuteur à réaliser son propre projet.

 

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: Tableau croisé dynamique
#19
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 : 25-10-2022 20h37

Bonjour slo777, le Forum,

 

Je ne suis pas un grand spécialiste des TCD, mais si tu souhaites de l'aide je pense que ta demande manque de précision...

 

Un classeur en pièce jointe comprenant un extrait de données suffisantes ainsi qu'une représentation simple de la synthèse que tu souhaites obtenir, aiderait sans doute ceux qui voudraient te venir en aide.

 

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: Code modification pas de temps VBA
#20
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 : 21-09-2022 13h45

Bonjour Leagr, bienvenue sur XLpages.com smiley

 

Pas facile de voir l'effet de ta procédure VBA sans avoir un minimum de données pour tester...

 

Je te conseille de joindre un fichier exemple de données (anonymisées) en pièce jointe à ton post.

Quelques lignes de données seulement devraient suffire (avec entêtes de colonne).

 

Le cas échéant, voir :

Comment joindre un fichier dans le Forum ?

 

(Attention, fichier excel si possible zippé, et de 120 Ko maximum)

 

Dans l'attente, je t'informe que dans ta ligne :

.Cells(ligne_result, 7).Date = .Cells(lignei, 1).Date

Cette ligne devrait déjà te générer une erreur VBA car la propriété "Date" n'est pas une propriété reconnue pour un objet "Cells".

 

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 

« 1 2 3 4 5 ... 149 »