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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

[VBA Excel] Aide concernant les conditions


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut [VBA Excel] Aide concernant les conditions
    Bonjour.

    J'ai besoin d'aide en ce qui concernant VBA en Excel.
    Je m'y connais pas trop dans ce langage de programmation.

    Je m'explique.

    J'ai 2 fichiers excel, on va les nommer fichier1 et fichier2.
    Le but est que mes informations du fichier2 se mettent automatiquement dans mon fichier1.

    Le fait de copier/coller d'un fichier2 à un fichier1 automatiquement est très simple.
    Mais la difficulté s’opère du fait que les lignes ne sont pas dans l'odre.

    Donc, il faut que je le fasse par rapport aux noms de machines qui sont identiques.

    En résumé, si le nom de la machine du fichier1 porte le même nom que celui du fichier2 alors on modifiera toute la ligne en copiant le fichier2
    et en collant dans le fichier1.

    Mon idée était de mettre une condition :

    Si le nom de la machine(fichier1) == au non de la machine(fichier2){
    Alors on copie/colle
    }
    Sinon {
    On fait rien.
    }

    Je ne sais pas si je suis très clair, je peux fournir les documents éventuellement.

    Je pense que mon problème est en grande partie du fait que je n'arrive pas à comprendre le fonctionnement des conditions en VBA.

    Merci pour votre aide.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    regarde du côté de filtres actifs ou filtre élaboré!

  3. #3
    Membre confirmé
    Profil pro
    Administration et finances
    Inscrit en
    Mai 2012
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : Algérie

    Informations professionnelles :
    Activité : Administration et finances
    Secteur : Bâtiment

    Informations forums :
    Inscription : Mai 2012
    Messages : 19
    Par défaut
    Bonsoir,
    Je ne sais pas si ce bout de code peut vous aider:
    Code : 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
    Sub CompareNomsChemins()
        Dim strNom1 As String, strNom2 As String
        Dim strChem1 As String, strChem2 As String
        Dim fichier1 As Workbook, fichier2 As Workbook
     
        strNom1 = "Donnees1.xlsm"
        strNom2 = "Donnees2.xlsx"
     
        Set fichier1 = Workbooks(strNom1)
        strChem1 = fichier1.Path
     
        Set fichier2 = Workbooks(strNom2)
        strChem2 = fichier2.Path
     
        'si l'on ne veut avoir que les noms des postes d'où ont été tirés les 2 fichiers on peut
        'les extraire des variables strChem1 et strChem2 et revoir en conséquence ce qui suit
     
        If strChem1 = strChem2 Then
            MsgBox "Même dossier : " & strChem1
            'traitement de la copie des données d'un fichier vers l'autre
        Else
            MsgBox "Dossiers différents : " & vbCrLf & _
                    strChem1 & vbCrLf & _
                    strChem2
        End If
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Merci pour votre aide.

    Mais, je suis toujours bloqué. Voici mon problème :

    Mon fichier excel n°1 :

    Nom : Capture1.PNG
Affichages : 239
Taille : 19,4 Ko

    Mon fichier excel n°2 :

    Nom : Capture2.PNG
Affichages : 230
Taille : 13,9 Ko

    Comme, on peut le voir, les données de la VCPU, de la Ram et du Stockage sont différents.
    Le but est de remplacer les données du fichier excel n°2 par celle du fichier excel n°1 avec une macro.

    Donc, on va prendre les noms de machines pour trouver la bonne ligne à remplacer.

    J'ai essayé de le faire.
    En effet, voici mon code :

    Code : 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
    Sub Test()
    'Déclaration de variables'
     
    Dim Noms As String
    Dim Machines As String
    Dim Environnement As String
    Dim VCPU As Integer
    Dim Ram As Integer
    Dim Stockage As Integer
     
    'Récupération des données'
     
    'Set Wkb1 = Workbooks("test1.xlsx")'
    Set Wks1 = Worksheets("Feuil1")
     
    'Wkb1.Activate'
    Wks1.Activate
     
    Noms = Wks1.Range("A1:A9").Select
     
    'Set Wkb2 = Workbooks("test2.xlsx")'
    Set Wks2 = Worksheets("Feuil2")
     
    'Wkb2.Activate'
    Wks2.Activate
     
    Machines = Wks2.Range("A1:A9").Select
     
    'Condition'
     
    If Noms = Machines Then
     
    Wks1.Range("C1:C9").Copy
    ActiveSheet.Paste Destination:=Wks2.Range("C1:C9")
     
    Wks1.Range("D1:D9").Copy
    ActiveSheet.Paste Destination:=Wks2.Range("D1:D9")
     
    Wks1.Range("E1:E9").Copy
    ActiveSheet.Paste Destination:=Wks2.Range("E1:E9")
     
    Else
     
    MsgBox "Erreur !"
     
    End If
    End Sub
    Concernant ce code, mes problèmes sont multiples, je m'explique :

    - Premièrement, je n'arrive pas à extraire seulement le nom de ma machine. J'aimerais ne pas prendre en compte la parenthèse qui se situe dans mon fichier excel n°1. Est-ce possible ?
    - Deuxièmement, je n'arrive pas à copier/coller mes chiffres en fonction de la ligne de ma machine. Mon copier/coller se fera dans le même ordre ce qui est problématique puisque la VCPU, la Ram et le Stockage ne seront pas pour la bonne machine ...
    - Troisièmement et dernièrement, je n'arrive pas à ajouter une ligne à mon document pour les machines qui n'existe pas.

    Voilà, il me semble avoir tout dit.

    Merci d'avance pour votre aide.

    De mon côté, je vais continuer mes recherches pour essayer de résoudre ces problèmes.

  5. #5
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut
    Bonjour !



    Je m'arrête juste pour le « Premièrement, je n'arrive pas à extraire seulement le nom de ma machine » :
    on s'en moque, déjà ne serait-ce que via le B-A-BA d'Excel, la fonction de feuille de calculs EQUIV (Application.Match en VBA) !
    Il suffit d'ajouter au nom de la machine du fichier 2 le caractère générique * pour la valeur cherchée dans cette fonction.
    En l'affectant à une variable de type Variant, si la fonction IsError sur cette variable est vraie, la machine n'existe pas
    sinon la variable contient le numéro d'ordre et pouvant correspondre au numéro de la ligne, tiens c'est le deuxièmement !

    Autre voie via la méthode Find bien utilisée notamment avec son paramètre LookAt à xlPart comme indiqué dans l'aide VBA …
    En affectant cette méthode à un objet Range, si ce dernier Is Nothing alors la machine n'existe pas
    sinon sa propriété Row renvoie le numéro de la ligne, tiens cela c'est aussi le deuxièmement !
    Ou encore se décaler via la propriété Offset (là encore tout est déjà dans l'aide VBA interne !) …

    Si tu tiens vraiment à extraire le nom de la machine, voir du côté de la fonction VBA Split

    Quant au troisièmement c'est tellement facile (sans compter la FAQ et p't'être un tutoriel),
    il serait vraiment utile d'expliquer ce qui a été tenté voir mieux de poster le code en question !

    _________________________________________________________________________________________________________
    Je suis Paris, Nice, Bruxelles, Charlie, …

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Bonjour !

    Autre voie via la méthode Find bien utilisée notamment avec son paramètre LookAt à xlPart comme indiqué dans l'aide VBA …
    En affectant cette méthode à un objet Range, si ce dernier Is Nothing alors la machine n'existe pas
    sinon sa propriété Row renvoie le numéro de la ligne, tiens cela c'est aussi le deuxièmement !
    Ou encore se décaler via la propriété Offset (là encore tout est déjà dans l'aide VBA interne !) …
    Je vais le faire avec cette méthode.
    Mais, c'est possible de le faire avec 2 feuilles excel différentes ? Pour les exemples trouvés sur le net, ils utilisent tous une seul et unique feuille excel.
    De plus, le problème est que je ne cherche pas une valeur précise mais bien prendre toute les valeurs d'une même colonne pour la comparer avec l'autre colonne de mon fichier excel.

    Bon, je te montre mon code :

    Code : 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
    Sub Test()
     
    'Déclaration de variables'
     
    Dim Rng As Range
    Dim Rng2 As Range
     
    Set Rng = Worksheets("Feuil1").Range("A1:A10").Find("A1:A10", LookAt:=xlPart) 'Plage de la recherche'
     
    Set Rng2 = Worksheets("Feuil2").Range("A1:A10").Find("A1:A10", LookAt:=xlPart) 'Plage de la recherche'
     
    'Les conditions'
     
    If Rng Is Nothing Then
     
    MsgBox "La machine n'existe pas !"
     
    Else
     
    Worksheets("Feuil1").Range("C1:C10").Copy.Row
     
    Worksheets("Feuil1").Range("D1:D10").Copy.Row
     
    Worksheets("Feuil1").Range("E1:E10").Copy.Row
     
    If Rng2 Is Nothing Then
     
    MsgBox "La machine n'existe pas !"
     
    Else
     
    ActiveSheet.Paste Destination:=Worksheets("Feuil2").Range("C1:C10").Row
     
    ActiveSheet.Paste Destination:=Worksheets("Feuil2").Range("D1:D10").Row
     
    ActiveSheet.Paste Destination:=Worksheets("Feuil2").Range("E1:E10").Row
     
    End If
    End If
    End Sub
    Ça ne marche pas.
    Après j'ai essayé de faire une condition si Rng = Rng2 mais ça ne fonctionne pas non plus ...

    Quant au troisièmement c'est tellement facile (sans compter la FAQ et p't'être un tutoriel),
    On utilise :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Selection.EntireRow.Insert
    ?

    Merci d'avance pour votre aide.

  7. #7
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut


    Là il y a un problème de logique : pourquoi deux Find ?‼ Qui plus est il faut chercher machine par machine !

    Sinon où est enregistré le code : dans l'un des deux classeurs ou dans un troisième ?

  8. #8
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Là il y a un problème de logique : pourquoi deux Find ?‼ Qui plus est il faut chercher machine par machine !
    J'ai utilisé 2 Find car j'ai 2 tableaux.
    Le premier Find recherche la colonne de mon premier tableau et le deuxième Find recherche la colonne de mon deuxième tableau.

    Sinon où est enregistré le code : dans l'un des deux classeurs ou dans un troisième ?
    Dans l'un des deux classeurs.

  9. #9
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Illogique ! Un seul Find étant nécessaire …

    Du reste on aimerait bien que tu nous expliques ta logique d'une manière claire et complète, sait-on jamais …

    « Dans l'un des deux classeurs. » : là encore quelle précision ! Avec cela je suis tellement bien avancé
    car même si je le désirais ardemment, je ne pourrais écrire la première ligne de code !

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Bonjour,

    Désolé pour le retard, j'ai eu des problèmes de santé.

    J'ai réglé le problème, mon code fonctionne bien. Les valeurs de la VCPU, de la Ram et du Stockage changent bien.

    Mais, je bloque sur une autre problématique.

    Je voudrais récupérer sur le nom de ma machine, une partie du texte.

    Par exemple, pour :

    WBX-REC-DOCKER => RECETTE

    Je repère le mot "REC" et j'attribue sur la même ligne et dans une nouvelle colonne le mot "Recette".

    WBX-PRD-SEPA => Production

    Je repère le mot "PRD" et j'attribue sur la même ligne et dans une nouvelle colonne le mot "Production".

    WBX-PP-WEB01 => Préproduction

    Je repère le mot "PP" et j'attribue sur la même ligne et dans une nouvelle colonne le mot "Préproduction".

    Est-ce compréhensible ?
    En résumé, je cherche des mots précis dans la colonne C qui est la colonne des noms de machines.
    Si, nous voyons par exemple le mot REC sur une des machines alors nous devrons écrire automatique avec une macro, le mot recette dans la colonne F.

    Voici mon code :

    Code : 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
    Sub test()
    Dim MotCle
    Dim i As Byte
    Dim C As Range
        'On définit les mots clés
        MotCle = Array("REC")
        'On effectue la recherche de chaque mot clé dans la colonne C de la feuil1
        For i = 0 To UBound(MotCle)
                Set C = Worksheets("Feuil1").Columns(3).Find(MotCle(i), LookIn:=xlValues, lookat:=xlPart)
                'Si le mot clé est trouvé
                If Not C Is Nothing Then
                        'On écrit le texte sur la ligne du mot trouvé 
                       Worksheets("Feuil1").Cells(i, 5).Value = "recette"   
                End If
        Next i
    End Sub
    Ça me donne "Erreur définie par l'application ou par l'objet".
    La ligne en erreur est celle en jaune.

    Merci.

  11. #11
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    ta boucle commence en 0, et utilise la variable i comme indice

    du coup, que vaut Cells(i, 5) au premier tour de boucle ?


    soit tu fait Cells(i+1, 5) pour conserver tes tableaux en base 0 (premier élément = indice 0) soit tu passes en base1 (Option Base 1 à mettre en haut du module) et tu boucles du "plus petit élément (LBound(LeTableau)) au "plus grand" (UBound(LeTableau))

  12. #12
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2015
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2015
    Messages : 27
    Par défaut
    Bonjour,

    Merci. Je n'ai plus d'erreur. Par contre, le programme n'affiche rien :/

Discussions similaires

  1. [VBA-Excel] aide pour maccro (selection)
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/02/2006, 08h53
  2. VBA Word - Aide sur les "Retours" dans tableaux
    Par wouebmaster dans le forum VBA Word
    Réponses: 5
    Dernier message: 29/12/2005, 10h08
  3. [VBA Excel] supprimer tous les onglets sauf un
    Par drinkmilk dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/11/2005, 18h11
  4. [vb excel]Aide avec les tableaux
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 27/09/2005, 12h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo