Forums XLPages

Tous les messages (myDearFriend!)

1 2 3 4 ... 149 »
Re: Supprimer les espaces d'une cellule
#1
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 27-01 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: 8 ]

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
#2
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 27-01 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
#3
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 26-01 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
#4
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 24-01 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
#5
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 08-01 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
#6
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 07-01 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: 13 ]

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: Effacer le contenu de la feuille Excel
#7
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 05-01 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
#8
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 05-01 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: 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: Userform TVA
#9
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 24-12 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
#10
Webmestre

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

Messages: 1534

Système d'exploitation:
PC
Version Excel utilisée:
97, 2000, 2002, 2003, 2007, 2010, 2013, 2016 et 365
Posté le : 23-12 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 

1 2 3 4 ... 149 »