Sélectionner une plage pour parcourir des colonnes

Bonjour au forum,

Bonjour à tous,

Je souhaite savoir s'il existe une instruction du genre Range("A1:A"& Range("A1").End(xlDown).rows) pour des colonnes dynamique. Je souhaite l'inclure dans un For Each cellule In........(Plage de colonnes)

Merci d'avance.

Bonjour

Joins un fichier exemple avec ce que tu as au départ et ce que tu veux obtenir.

Bye !

Salut,

Si tu n'a pas de cellules vides sur la ligne A cette fonction devrait répondre à tes attentes :

Range("A1").End(xlToRight).Select

Bonjour Yeshua,

Essaye ce petit code VBA :

Option Explicit

Sub Essai()
   Dim pcol As Integer ' première colonne
   Dim dcol As Integer ' dernière colonne
   Dim dlig As Long ' dernière ligne
   pcol = 1: dcol = 3: dlig = Cells(Rows.Count, pcol).End(xlUp).Row
   Range(Cells(1, pcol), Cells(dlig, dcol)).Select
End Sub

Ce code n'est pas pour une colonne dynamique mais juste

pour la syntaxe utilisée pour l'instruction Range.

Cordialement

Bonjour GmB, Bonjour Gorodo, Bonjur forum,

J'ai essayé la proposition donnée de Range("A1").End(xltoRight). Je n'ai pas mis le point select à la fin cela dit. Cette instruction m'envoie directement sur la dernière colonne dynamque du tableau. Ma boucle For each ne "boucle" pas du coup, mais affiche seulement la première valeur.

Je vais donc ajouter .select pour voir ce que ça donne.


Bonjour Dhany,

Je viens de voir ta proposition qui ressemble un peu à une suggestion que je teste encore. Seulement il m'indique que DernLigne n'existe pas.

Public Sub remplissage()
        Dim i, j
        Dim c As Range, e As Range, f As Range, g As Range
        Dim DernLgine As Integer, DernColonne As Long

        Dim F1 As Worksheet, F2 As Worksheet
        Dim MaPlage As Range
        Set F1 = Worksheets("Data_MDS")
        Set F2 = Worksheets("Data_MDE")
        Set e = F2.Range("I2")
        Set f = F2.Range("J2")
        Set g = F2.Range("K2")

        DernLigne = Range("A" & Rows.Count).End(xlUp).Row

        DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
        Set MaPlage = F1.Range(Cells(1, 1), Cells(DernLigne, DernColonne))

        For Each c In MaPlage
            MaPlage.Copy
            F2.Range("A" & decalage + 1).PasteSpecial Paste:=xlPasteValues
            F2.Range("A" & decalage + 1).PasteSpecial Paste:=xlPasteFormats
        Next

        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                e.Value = Int(e.Value)
        Next c
        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                f.Value = Int(f.Value)
        Next c
        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                g.Value = Int(g.Value)
        Next c
End Sub
17test-forum.xlsm (552.82 Ko)

Bonjour,

J'ai pu corriger les anomalies de déclaration. Je ne sais pas si ma plage définie dans le For each...Next est correcte, mais le programme boucle à l'infini.

J'aimerais dans l'idée, parcourir les colonnes et sélectionner des colonnes en particulier ( ici I, J, K par exemple) pour lesquelles afficher les données en tant que parties entières (au sens mathématique) des valeurs du tableau source.

Voici le code qui boucle sans fin; Je cherche le problème. Pourriez vous m'aider svp? Merci beaucoup.

Public Sub remplissage()
        Dim i, j, decalage As Integer
        Dim c As Range, e As Range, f As Range, g As Range
        Dim DernLigne As Integer, DernColonne As Long

        decalage = 0
        Dim F1 As Worksheet
        Dim F2 As Worksheet
        Dim MaPlage As Range
        Set F1 = Worksheets("T")
        Set F2 = Worksheets("V")
        Set e = F2.Range("I2")
        Set f = F2.Range("J2")
        Set g = F2.Range("K2")

        DernLigne = Range("A" & Rows.Count).End(xlUp).Row

        DernColonne = Cells(1, Cells.Columns.Count).End(xlToLeft).Column
        Set MaPlage = F1.Range(Cells(1, 1), Cells(DernLigne, DernColonne))

        For Each c In MaPlage
            MaPlage.Copy
            F2.Range("A" & decalage + 1).PasteSpecial Paste:=xlPasteValues
            F2.Range("A" & decalage + 1).PasteSpecial Paste:=xlPasteFormats
        Next

        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                e.Value = Int(e.Value)
        Next c
        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                f.Value = Int(f.Value)
        Next c
        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                g.Value = Int(g.Value)
        Next c
End Sub
17test-forum.xlsm (835.15 Ko)

Bonjour,

J'ai trouvé le problème. C'est bon. En fait, j'ai oublié d'incrémenter à chaque fois mes variables d'arrivée. Pour la boucle sans fin, j'ai enlever le copier-coller du for (je voulais copier ligne par ligne au départ puis ai pensé à l'option de sélection de la plage directement.

Merci encore pour vos proposition.

For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                [b]e.Value = Int(c.Value)
                Set e = e.Offset(1)[/b]
        Next c
        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

              [b]  f.Value = Int(c.Value)
                Set f = f.Offset(1)[/b]
        Next c
        For Each c In Range("I2:I" & Range("I2").End(xlDown).Rows)

                [b]g.Value = Int(c.Value)
                Set g = g.Offset(1)[/b]
        Next c

Yeshua,

Ma réponse est par rapport à ton message de 16:17 ;

je te retourne ton fichier modifié (voir plus bas).

À l'ouverture, tu seras sur la 2ème feuille V (vide).

Ctrl e => travail effectué

Alt F11 pour voir la macro remplissage()

Merci de me donner ton avis.

21test-forum.xlsm (515.70 Ko)

Bonsoir Dhany,

C'est parfait, vraiment impeccable !!!

Merci beaucoup pour la proposition

Yeshua,

Je viens de voir que tu as lu mon message précédent,

et je suis ravi que mon fichier Excel te plaît.

Après avoir lu ton message de 17:16, je te propose

une version plus courte de mon code VBA.

30test-forum-2.xlsm (515.48 Ko)

Bonjour Dhany,

Joli le code compact et efficace. Tu gères comme un chef!

Merci beaucoup.

J'ai une question par contre. Peux tu me dire à quoi sert la ligne Application.Calculation = -4105 ?

Bonjour Dhany,

Très joli code, concis et efficace. Tu assures comme un chef!

En parcourant, j'ai trouvé la ligne: Application.Calculation = -4105 et une autre presque identique. A quoi sert elle? Lerci d'avance.

Bonjour Yeshua,

Je suis content que tu aies apprécié mon 2ème code VBA

(celui de mon précédent message du 9 octobre à 18:38).

Pour répondre à ta question :

Application.Calculation = xlCalculationManual met le mode de calcul d'Excel en manuel ;

xlCalculationManual est une constante Excel qui vaut -4135 ; c'est donc plus court

d'écrire : Application.Calculation = -4135 (et plus rapide à lire) ; même chose pour

la constante Excel xlCalculationAutomatic qui vaut -4105 => ceci est plus court :

Application.Calculation = -4105 ; met le mode de calcul d'Excel en automatique.

Cordialement

Bonsoir Dhany,

Merci du retour rapide. Merci pour ton aide. Vraiment sympa.

Bien à toi,

Y.

Rechercher des sujets similaires à "selectionner plage parcourir colonnes"