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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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 : 234
Taille : 19,4 Ko

    Mon fichier excel n°2 :

    Nom : Capture2.PNG
Affichages : 223
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.

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