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 :

Changer de colonne automatiquement


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2012
    Messages : 121
    Par défaut Changer de colonne automatiquement
    Bonjour

    J'ai un programme relativement simple que j'applique sur plusieurs lignes d'une même colonne. Une fois terminé, j'aimerais l'appliquer sur d'autre colonne sans avoir a répéter le programme pour chacune des colonnes. (le programme change les "oui" en 1, les "non" et les cases vides en 0)
    J'ai utilisé la commande X = Range("S,AC:AE,AK:AM,AN:AP,AR").Select (les lettres sont les plages de colonnes où je désire que le programme s'effectue). Je sais que mon utilisation de cette commande est farfelue, mais je ne sais pas comment l'utiliser autrement, ni comment faire pour l'intégrer à une boucle pour permettre l’incrémentation.

    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
    Dim Valeur As String
    Dim I As Integer
    Dim J As Integer
     
    Private Sub CommandButton1_Click()
     
    'Convertir le OUI en 1, le NON en 0 et les espaces vides en 0
     
        J = Range("S,AC:AE,AK:AM,AN:AP,AR:BC,BE").Select
        For I = 2 To 170
            Valeur = Feuil1.Range(J & I).Value
                If Valeur = "Oui" Then
                   Feuil1.Range(J & I) = 1
                ElseIf Valeur = "Non" Or Valeur = NA Then
                    Feuil1.Range(J & I) = 0
                End If
        Next I
     
    'FIN Convertir le OUI en 1 et le NON en 0
     
    End Sub
    Merci beaucoup à la communauté

  2. #2
    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,

    c'est en gros un "rechercher/remplacer tout" que tu fais ?

    pourquoi ne pas utiliser cet outil ?
    tu peux le coupler à des tableaux pour tout réaliser avec des boucles

    voici un exemple, améliorable au niveau des colonnes, on pourrait calculer la plage d'union de toutes les colonnes et supprimer la boucle travaillant sur chaque colonne

    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
    Option Base 1
    Sub RechRempl()
     
    Dim TabColonne() As Variant
    Dim DerLig As Long, DebutLig As Long
    Dim Recherche(), Remplace()
    Dim i As Long, t As Long
    Dim Plage As Range
     
    ' colonne A / C / E
    TabColonne = Array(1, 3, 5)
     
    ' les trois rechercher/remplacer
    Recherche = Array("oui", "non", ""): Remplace = Array(1, 0, 0)
     
    ' ligne de départ et de fin
    DebutLig = 2: DerLig = 170
     
    ' boucle sur chaque recherche
    For t = LBound(Recherche) To UBound(Recherche)
        ' boucle sur chaque colonne
        For i = LBound(TabColonne) To UBound(TabColonne)
            Set Plage = Range(Cells(DebutLig, TabColonne(i)), Cells(DerLig, TabColonne(i)))
            Plage.Replace _
                        What:=Recherche(t), _
                 Replacement:=Remplace(t), _
                      LookAt:=xlWhole, _
                 SearchOrder:=xlByRows, _
                   MatchCase:=False, _
                SearchFormat:=False, _
               ReplaceFormat:=False
        Next i
    Next t
     
    End Sub

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2012
    Messages : 121
    Par défaut
    Bonjour

    Merci beaucoup pour ce programme qui fonctionne très très bien

    Juste une petite question, comment puis-je faire pour permettre la lecture du programme sur une large plage de colonnes?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabColonne = Array(1, 3, 5)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TabColonne = Array(De la colonne 1 à la colonne 200)

  4. #4
    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
    Je pensais que les colonnes ne seraient pas contigües

    si c'est en fait le cas, on a pas besoin de tableau de colonnes et on évite une boucle, ce qui revient à la simplification dont j'ai parlé précédemment.

    j'ai utilisé des variables pour la première et dernière colonne, afin que tu comprennes facilement

    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
    Option Base 1
    Sub RechRempl()
     
    Dim DerLig As Long, DebutLig As Long
    Dim DerCol As Long, DebutCol As Long
    Dim Recherche(), Remplace()
    Dim t As Long
    Dim Plage As Range
     
    ' les trois rechercher/remplacer
    Recherche = Array("oui", "non", ""): Remplace = Array(1, 0, 0)
    ' ligne de départ et de fin
    DebutLig = 2: DerLig = 170
    ' colonne de départ et de fin
    DebutCol = 1: DerCol = 200
     
    ' boucle sur chaque recherche
    For t = LBound(Recherche) To UBound(Recherche)
        ' la plage de remplacement
        Set Plage = Range(Cells(DebutLig, DebutCol), Cells(DerLig, DerCol))
            Plage.Replace _
                     What:=Recherche(t), _
              Replacement:=Remplace(t), _
                   LookAt:=xlWhole, _
              SearchOrder:=xlByRows, _
                MatchCase:=False, _
             SearchFormat:=False, _
            ReplaceFormat:=False
    Next t
     
    End Sub

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2012
    Messages : 121
    Par défaut
    Merci encore

    Je remarque toutefois que le programme arrête de traiter les données à la 18ième ligne.... alors qu'il devrait continuer jusqu'à la 170 ième!!

    Une idée!!

    1000 fois mercis

  6. #6
    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
    tu as bien des données après la ligne 18 ?

    le remplacement s'arrête à la dernière ligne non vide de ta plage

  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

    Bonjour,

    c'est normal, Replace ne fonctionne pas pour une valeur vide sur des cellules en dehors du UsedRange
    (la plage de cellules utilisées) …

    En réponse à la demande initiale :
    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
    Private Sub CommandButton1_Click()
        Dim Rg As Range
        Application.ScreenUpdating = False
     
        With Feuil1.Rows("2:170")
            For Each V In Split("S AC:AE AK:AM AN:AP AR:BC BE")
                With .Columns(V)
                    For Each Rg In .Cells
                        With Rg
                            If .Value = "" Then .Value = 0
                        End With
                    Next
     
                    .Replace "Oui", 1, xlWhole, , False
                    .Replace "Non", 0
                End With
            Next
        End With
    End Sub
    _____________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

    _____________________________________________________________________________________________________
    Je suis Charlie - Je suis Bardo

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [POI]Largeur de colonne automatique
    Par JohnBlatt dans le forum Documents
    Réponses: 2
    Dernier message: 10/06/2008, 10h52
  2. [VBA-A] Changer largeur colonne zone de liste
    Par hacksi dans le forum VBA Access
    Réponses: 5
    Dernier message: 02/06/2006, 10h20
  3. Ajout d'une colonne automatiquement suivant date
    Par paflolo dans le forum Access
    Réponses: 7
    Dernier message: 07/03/2006, 17h51
  4. changer titre graphique automatiquement
    Par stephsen dans le forum Access
    Réponses: 1
    Dernier message: 01/11/2005, 15h16
  5. [JTable] Changer les colonnes de manière dynamique
    Par gg2laba dans le forum Composants
    Réponses: 3
    Dernier message: 03/10/2005, 23h39

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